今回は、数字や文字列を使う為の「変数」について説明していきます。
内容を理解するのに多少時間がかかるかもしれませんが、プログラミングを行う上で変数は必ず使う必需品のようなものなので、是非覚えるようにしてください。
変数とは
変数は、一定範囲内であるが、どんな特定値とは限らずに考えた際のその数(を表す記号)です。
正直これだけでは初心者の方は何のこっちゃよく分からないと思います。
数学が苦手だった方はあまり思い出したくないかもしれませんが、中学の頃に因数分解の授業などでxやyが出てきましたよね。あれをイメージしてもらえればと思います。
これから実際に使いながら説明していきますね。
変数の宣言について
変数について先ほど軽く説明しましたが、もう少し具体的に話すと、変数とはデータをしまっておく箱のようなものになります。
例えば、引っ越しするとして荷物を箱に詰めないといけませんが、衣類は衣類用の箱、ゲームはゲーム用の箱とどこに何が入っているのか仕分けしますよね。これと同じようにプログラミングの世界でもどんな種類のものを入れ、何という名前の箱を用意するのか宣言する必要があります。
箱の種類の名前は「型名」と言い、整数型、少数型、文字列型などがあります。また、箱自体の名前を「変数名」と言い、一意に決まる名前を自分で決めて使います。
変数の型について
ここでは頻繁に使われる変数の型について軽く紹介します。
- int(整数)型・・・数値で-2147483648~2147483647まで取り扱える
- float(浮動小数点)型・・・数値で-3402823E+38~3402823E+38まで取り扱える
- char(文字)型・・・テキストで使用されるUnicode記号
- string(文字列)型・・・テキストを扱う
- bool(ブール)型・・・trueまたはfalse
これらの型はスクリプトを作成する際に頻繁に利用することが多いでしょう。
それぞれの型を細かく説明していると日が暮れてしまいますので、ここでは変数の使い方について理解するようにします。
それでは、実際に変数を利用したスクリプトを作成してみたいと思います。
僕がペイントで作成した変数の宣言についての画像です。箱をイメージしてマウスで描いたんですが流石美術2の僕ですね。分かりにくくてごめんなさい!
左の箱ですが、int型で「money」という箱を用意しました。そしてその箱の中に「100」という値を納めました。
上の説明に当てはめて右の箱を説明すると、『string型で「name」という箱を用意し、その中に「dog」という文字列を入れました』といった感じになりますね。
コツが分かってくると面白くなってきますね!
次に上の画像をスクリプトとして作成してみましょう。
出来ました。スクリプトにするとこんな感じでしょうか。
最初なので左のint型の箱のみでスクリプトを作成しましたが、変更したのは3行程度です。文字を記述したのは9~11行目ですね。
まず9行目で「int money;」と変数の宣言をしました。「int」は整数型で「money」は箱の名前でしたので、「int型のmoneyという名前の箱を使います」という意味になります。
10行目で、「100」という値をmoneyの箱に入れました。これまでは「入れました」という言い方をしていましたが、正式には「代入」と言います。
代入するときは、値を入れる変数を左、入れたい値を右にして、間に「=」を記述します。
「=」と聞くと左と右の値が同じであるイコールという意味にとらえがちですがイコールではないので気を付けてください。ちなみに「=」は代入演算子と呼びます。
あとはDebug.Logで箱の中身をコンソールウィンドウに表示するだけです。
変数の宣言方法
型名 変数名;
変数の代入方法
変数名 = 代入する値;
と覚えておきましょう。
変数の初期化について
次に変数の初期化について説明します。
先ほどのスクリプトとはちょっと違いますね。
9行目で変数の宣言と同時に、値の代入を行っています。これを変数の初期化と言います。
今回はString(文字列)型の「name1」という変数を「dog」という値で初期化しました。そして、String型は文字列を表すので「”」(ダブルクォーテーション)で文字を括る必要があります。
このように、1行で変数の宣言と代入を一度に行えるわけですね。
続いて10行目で新たに「name2」というString型の箱を宣言しています。そして次の行で「name2」に「name1」の値を代入しました。このように同じ型の変数同士で代入することができるんです。
この時に、「name1」の中身が空になってしまうのではないかと思われがちですが、代入は値のコピーを行うので、元の「name1」の中身が空になることはありません。
float型とdouble型の注意点
浮動小数点型を扱う際は、少し注意しないといけない点があります。
9行目にfloat型でxという箱を用意し、「180.7f」という値を代入しています。
int型では後ろに「f」なんてくっついていませんでしたよね?浮動小数点型の値を扱う際にこの「f」があるかないかが大切です。
まず、画面のように小数の後ろに「f」をつけることでfloat(浮動小数点)型として扱われます。しかし、この「f」をつけ忘れてしまった場合、float型の変数にdouble型の値を代入するという風に解釈をされてしまいます。
こうなってしまうと「変数の型(float)と代入する値の型(double)が違う」ということでエラーになってしまうわけです。
ですから、float型に少数を代入する際は、必ず後ろに「f」を付けるようにしましょう。
変数と計算について
ある程度、変数について分かってきたところで簡単な計算をしてみましょう。
計算する場合は、加算は「+」、減算は「-」、乗算は「*」、除算は「/」を使います。
今回は、誰しもが通る初めての計算「1+1」を解いてもらいました。
9行目で「answer」というint型の変数を宣言し、10行目で「1+1」を計算し、その結果をanswerに代入しています。
あとはDebug.Logで出力すれば「2」と答えを表示してくれます。
コツが分かれば引き算や割り算なども、どうやって記述すれば良いのか分かってくると思います。その他の四則演算も出来るか確認するといいと思います。
変数同士の演算
先ほど変数同士で値を代入しましたが、演算することも出来ます。
こんな感じですね。
9行目と10行目で、それぞれ変数を初期化しています。10と20ですね。
続いて11行目で、「hit1」と「hit2」を足して、int型の「answer」に代入しています、
このように、数値じゃなくても変数に入っている値で計算することが出来ます。
ちなみに、11行目のように変数の初期化と演算したものを代入する記述を1行にまとめることも出来ます。
演算におけるちょっと便利な書き方①「+=」演算子
箱の中身に数字を加えたい場合など、普通の演算以外で便利な記述方法があります。
int answer = 5;
answer = answer + 3;
このように記述することで、初めに「answer」に10入っていたことになるので2行目で「10+3」の計算結果が再び「answer」に代入されます。
しかし、この記述以外で更に簡易的な記述方法として「+=」演算子が用意されています。
9行目で変数「answer」を「5」で初期化し、10行目で「+=」演算子を使ってanswerの中身に「3」を加算しています。
結果はご覧のように「8」になりました。
このように「変数名 += 増やしたい値」と記述することで、増やしたい数を指定することが出来ます。
演算におけるちょっと便利な書き方②「インクリメント演算子」
次は変数の値を「1」だけ増やすときに使う「インクリメント演算子」について紹介します。
10行目の「answer++;」がインクリメント演算子の部分ですが、この記述によりanswerの中身を「1」だけ増やします。この結果answerの中身は「6」になります。
このようにインクリメント演算子は、「変数名++」及び「++変数名」と記述します。「++」を前につけるか後ろにつけるかの違いは、今後出てくる制御文の時に効力を発揮するのでその時に説明したいと思います。
なお、「1」だけ減らしたい場合は「変数名–」と記述します。これをデクリメント演算子と言います。
インクリメントなどは、通常の計算ではあまり使いませんが、今後使う制御文において非常によく使うことになるので、積極的に使うようにしましょう。
文字列同士の連結及び文字列と数値の連結
これまでは、数値同士の演算でしたが、文字列でも同じようなことが出来ます。
9行目と10行目で初期化した文字列を、11行目で「+」演算子を使い連結しました。
連結した文字列を「coment」に代入し、12行目で出力します。
するとこのように「HelloWorld」と連結されて表示されます。
続いて、文字列を数値を連結してみます。
これまでは、数値なら数値同士、文字列なら文字列同士と同じもの同士で連結してきましたが、数値と文字列も連結することが出来るんです。
大切なのは、数値と文字列を連結した場合、数値は文字列として扱われる点です。
9行目で初期化したstring型の「test」と10行目で初期化したint型の「num」を11行目で連結して「coment」に代入しました。
このような場合には、「num」が文字列として扱われるので、「coment」の出力結果は「level100」という文字列になります。「level」という文字列が入っているので分かるとは思いますがint型ではないので間違えないようにしましょう。