【ITコラム】プログラム入門:変数と型について

初めまして。IT事業本部のてらにしです。244と同じくエンジニアとしてそこそこ年数が経っており、フレッシュではない人間ですが、フレッシュ勢に負けないよう、プログラム入門シリーズと題して、プログラム未経験の人向けの記事を発信していこうと思います。
なお、出来る限り分かり易いようにとしているため、細かい部分に関しては突っ込みどころが出てくるかもしれませんが、生暖かい目で見守って頂けると助かります・・(笑)
入門シリーズの第一回は「変数と型」です。
プログラミングに触れる上で、必ず理解する必要があるものの一つになります。
変数について

変数のイメージ
まず、「変数」についてですが、数学の方程式なんかで出てくるaやbなどと同じようなものです。ざっくり言うと、数値や文字などの値を入れる為の箱となります。例えばリンゴ1個とみかん2個の合計数を求めたいとした場合に、
1 + 2
で結果が3となりますが、プログラム上で扱う場合に一度変数という箱に入れることがほとんどです。具体的には
ringo = 1 mikan = 2 ringo + mikan
で結果が3という具合です。ringoという箱に1を入れ、次に、mikanという箱に2を入れ、それぞれの箱の中身を足した結果を求めた形になります。
型について

型のイメージ
こちらは値の種類を指しています。例えば、
- 整数
- 浮動小数点数
- 文字列
等となります。型の種類についてはプログラミング言語によって異なります。例えば、同じ「整数」を扱う場合でも、C言語の場合
- short int
- unsigned int
- (signed) int
- unsigned long int
などがあり、Javaの場合では
- int
- long
などがあります。それぞれ負数(マイナスの値)を入れられるかどうかや、入れる事が可能な桁数に差があります。細かい部分は実際に特定のプログラミング言語を触るようになってから覚えるのでも問題ありませんが、「型」によって、入れられる「値」に差があることは覚えておきましょう。
参考:動的型付け言語と静的型付け言語
プログラミング言語によって、動的型付け言語と静的型付け言語が分かれており、明示的に上記で触れた型を記載する言語と、型を記載せずにいきなり変数を宣言する言語があります。
Java(静的型付け言語)の例
Int count = 0;
Python(動的片付け言語)の例
count = 0
ここで、動的形付け言語なら型なんて気にしなくて良いのでは?という疑問を持つ方も出てくるとは思いますが、実際は動的型付け言語であってもプログラムを書く人は型を意識しなければなりません。何故かと言うと、例えば数字と数字をくっつけたい(“1” と “1”をくっつけて”11”)にしたいと思った場合に、整数を扱う型で計算した場合、1+1で2となってしまいます。逆に数値を計算したい場合に、文字列を扱う型で計算した場合、”1”+”1”で”11”となってしまいます。
他にも不動小数点数を扱いたい場合や、整数のみ扱いたい場合等や、桁数を気にする必要がある場面などでも考慮が必要になってきます。
よくある質問
最後に、「型」に関して、よく初学者から質問されるものについても触れていきましょう。
Q: 整数を入れることができる「int」と「long」で両方とも整数を入れることが出来るのにどう違うの?どうやって使い分けるの?
A: 両方とも整数が入る型ですが、桁数が違います。
Javaでいえばintは-2147483648~2147483647が入り、longは-9223372036854775808~9223372036854775807が入ります。例えば、同じ水を入れるものでも、コップと寸胴鍋とでは全然入れられる量が違いますよね。
用途としてコップに収まる量の水を入れることしかしない前提があるのに、毎回寸胴鍋を使用するのはどうでしょうか?確かに大は小を兼ねるということで、使うことは出来ますが、サイズが大きすぎるので無駄ではないでしょうか。今回の例でいえばコップと寸胴鍋で物理的に無駄に場所を取ることとなっていますが、プログラムに直すと、intで収まるところにlongを使う事でメモリを無駄に使うこととなります。
逆に、今回は前提条件がコップに収まる量の水を入れることしかない、としましたので寸胴鍋を使うことは無駄でしたが、逆にコップで収まらない水を入れる可能性がある場合は、コップ(int)を使っていると溢れてしまうので寸胴鍋(long)を使うことが正解です。
Q:整数を入れることが出来る「int」と不動小数点数を入れることが出来る「float」って同じ数値を入れる型なのに何が違うの?「float」で整数も入れれるなら全部「float」で良いんじゃない?
A:上の例で出したコップと水で言えば、整数が水、不動小数点数が油、intが紙コップ、floatがプラスチックコップといったところでしょうか。
intもfloatも同じ[コップ]ですが、紙コップ(int)に油(不動小数点数)を入れると、外側に染み出してきてしまいます。ですが、プラスチックコップ(float)であれば水であっても油であっても入れることが出来ます。
では常にプラスチックコップ(float)を使えば良いのでは?というところでは、用途に合わせた使い方をしないと、プラスチックコップ(float)だから油を入れる可能性があるのかな?じゃあ水だけじゃなく油を使うことも含めて処理を検討しないといけないなと無駄な事を考える必要が出てきます。
自分一人で行う場合は問題ないかもしれませんが、プログラムは作って終わりではなく、保守(不具合を直したり、追加の機能を入れたり)することが前提となりますし、基本的にずっと自分がそのプログラムを担当する訳ではなく、誰かに引き継いで行くこととなります。
ですので、他の誰かが確認した時に、なんでこうなっているんだろう?とならないように気をつけなければなりません。
Q:数字と数値って何が違うの?同じじゃない?
A:数字・・つまり文字列である数、と数値・・数そのものの値です。
説明が非常に難しいのですが、数字はあくまで文字であり、計算することが出来る数値とは異なります。プログラムで数字の”1”と数字の”2”を足した場合、多くのプログラムでは”12”となります。何故かというと、数値ではないため、1+2 = 3という計算にならず、”あ”+”い” = ”あい” と同じような形で”1”という文字の後ろに”2”という文字をくっつける形と同じになります。
まとめ
入門シリーズ1回目の「変数と型」については、これで終わります。次回は、「制御構文 – if -」と題して条件分岐について触れていく予定です。
それでは、この辺で。寒さに負けないよう楽しいプログラミングライフを!