CommentOut

プログラムの基本の「き」:変数とは?変数の概念 プログラムの基本の「き」:変数とは?変数の概念

プログラムの基本の「き」:変数とは?変数の概念

公開日:  最終更新日:

このページを見ている人は、恐らくこれからプログラムについて学ぼうとしている人だと思います。
どのような参考書でも、最初は画面に「Hello, World!」というメッセージを表示させ、その次には変数についての説明が来ることでしょう。
早い人だと、この変数で挫折する人も居ると思います。

この変数について、私なりに説明してみたいと思います。

TIPS
ちなみに、プログラミング言語ってたくさんの種類がありますが、だいたいの言語に『変数』はあります。

変数に関する一般的な説明

パソコンの中には『変数』というボックスがあり、そこにはデータを入れることが出来る。
プログラムから『変数』に名前を付けて『宣言』すること=ボックスを作ること
例)C言語で『hoge』という変数を作る
[c]int hoge;[/c]
ここでhogeというのがボックスの名前、intというのはボックスに入れる値の種類です。
これはプログラミング言語によって違うのですが、基本的には”数字と文字”や”整数と小数”などは同じ変数に入れることはできないものです。

POINT
プログラムでは同じ『1』でも、”数字”としての『1』と、”文字”としての『1』は区別される。
このパソコンがどのように認識しているか?という点が変数で<最もつまづきやすいポイント>ではないかと思います。

例えば、100は整数型の変数に入っていれば、それは数字としての100。
数字なので、他の数字と足し算・引き算などの計算も行えます。
100が文字型に入っていれば、それは『文字』ではなく『文字列』になるんです。
文字型は1文字しか持たないので、”100″は1と0を持った3文字の『文字列』ということになります。

また、代入式を使うことで、ボックスに値を入れられる。
例)C言語で整数型変数『hoge』に値”1″を代入する
[c]hoge = 1;[/c]

私がプログラムの勉強をするときに学んだ変数の考え方

私は今でこそ、上記の説明でもわかりやすいなと思えます。
しかし、元々抽象的な表現をされると、余計にわからなくなるタイプだったため、『そもそもパソコンは0と1で動いているはずなのに、ボックスを用意するとか宣言してとかなんだそれ』って思っていたんですね。
なので、まずデータってどうやって保存されているんだろう?という所から入りました。

そもそも『変数』とはデータを保存するメモリ上の『領域』であり、入れるデータ型によって必要となる領域の幅が変わります。
例えば、C言語の整数型(int)であれば、メモリを4Byte消費します。この4Byteがメモリ上に確保した変数の『領域』であり、ボックスという抽象化されたものの正体です。

TIPS
1Byteは8bitですから、8×4で32bitあることになります。
※ bitというのは、0か1の状態を表すデータの最小単位です。
整数値と言っても、天文学的数字まで扱えるわけではなく、32bitで表現できる限界までがC言語のintで表現できる最大数ということになります。


私は変数を”ボックス”という塊ではなく、データを入れる”空間”を作るっていう認識で覚えました。

変数の表現を抽象的に表現してしまうことにより、後に出てくる『ポインター』※1がより分かりにくい存在になってしまうんじゃないかと思います。
※1 多くの人を挫折させていると言われるC言語の最難関

変数には『型』がある!

『型』ってなんやねんって思うかもしれませんが、さっきも出てきた、中に入れるデータの種類のことです。
多くのプログラミング言語で、整数(6や10等)、浮動小数点数(0.3や103.4等)、文字(アルファベットや記号等1文字を扱える)、boolean(0か1,trueかfalse)があります。
他にはdecimal(厳密に数値表現を行える)やstring(1文字ではなく文字列を扱える)などがある言語もあります。
これらを組み合わせて、あんなことやこんなことして動いているのが『プログラム』なんです。

私は最初は「プログラムっちゅうのは0と1で出来ている世界なんだ」と思ってたので、直接文字や数字を扱えるって聞いただけで、すごいなーって思いましたね。

宣伝
WordPressサイトのテンプレート編集やトラブル対応、バグ修正、簡単なJavascriptの作成(カルーセルやバリデーション等)など、小規模なスポット対応を受け付けております。
もしお困りごとがありましたら、お問い合わせフォームよりご相談ください。

この記事を書いた人

uilou

uilou

プログラマー

基本的に、自分自身の備忘録のつもりでブログを書いています。 自分と同じ所で詰まった人の助けになれば良いかなと思います。 システムのリファクタリングを得意としており、バックエンド、フロントエンド、アプリケーション、SQLなど幅広い知識と経験があります。 広いだけでなく、知識をもっと深堀りしていきたいですね。