変数について
C#入門 基本構文第1回「型と変数」。
今回は、『変数』についての解説になります。
もくじ
1.変数とは
2.変数の宣言
3.変数の初期化
4.変数の初期化は必須?
5.変数宣言のいろいろ
6.変数の使い方
7.変数の有効範囲(スコープ)
8.変数名について
9.変数の有効期限
変数とは
『変数』とは、数値や文字といったデータを保持しておくための”入れ物”のこと
コードを書いていると、計算結果や取得した文字列など、データを一時的に保持しておきたい場合がどうしても出てきます。
「頭の中で計算しているときに、途中の計算結果をノートにメモしておく」そんなイメージで、一時的に値を記憶しておくために「変数」が利用されます。もちろん一時的な場合だけでなく、ゲーム起動中ずっと値を保持ておく場合にも「変数」を使います。
もっとかみ砕いて、もっと具体的に説明します。
1 |
5 + 3; |
このようなコードを書いた場合、これは単純に「5+3」の計算が行われるだけなのです。
何言ってるの?と思われるかもしれませんが、
「5+3」の “計算が行われるだけ”のコード” であり、何の意味も持たないコードであると言いたいのです。
“何の意味も持たない” とはどういうことかというと、「5+3」という計算をした以上、
その計算結果である「8」を利用しないと意味がないですよね、ということです。
利用しないのであれば、何のために計算したの?となります。
計算結果を利用するからこそ、計算をする意味があるわけです。
“意味のあるコード“にするためには、
「5+3」で計算した結果を利用するために、値を保持しておかなければなりません。
もうお分かりですね。ここで登場するのが「変数」です。
「変数」という入れ物を用意して、計算結果である「8」を入れて値を保持しておきます。
そうすることで、変数に入れた「8」という値を後から利用することができるようになるわけです。
これが「変数」の使われ方になります。
「変数」というのが、”値を保持しておくための入れ物”だということがわかっていただけたかと思います。
変数の宣言
プログラミングの中で、値を保持したくなったとき、上記で説明したように「変数」に値を入れておくわけですが、その時にまず、「変数を宣言する」必要があります。
「変数を宣言する」とは、値を入れておくための入れ物を用意する、ということです。
変数の宣言は、このように書きます。
“int”が「型」で、”count”が「変数名」になります。
「型」では、その入れ物のデータのタイプを指定してあげます。
今回の場合は、int型を指定したので、この変数には “整数” しか入れることができなくなります。
このように、その変数に入れることのできるデータを指定するのが「型」になります。
「変数名」とは、その変数の名前です。
たくさんの変数を区別するためにつける名前で、
すでに使われている名前以外であれば、好きな名前を付けることができます。
「変数の宣言」とは、型を指定し、名前を決めて、”入れ物”を用意すること
「count」という整数の入れ物が用意できたので、
1 |
count = 7; |
このように、7という整数値を”count”に保存しておくことができるようになりました。
値を代入する(入れる)ときには、「=」を使用します
中学生のときに、変数というものが出てきて、X = 7 という風に Xに値を代入したことがあるかと思いますが、それと同じですね。
countに7という値を代入する場合には count = 7; と記述します。
また、上記コードを見てもらうとわかるのですが、コードの終わりには、「;」を忘れずにつけてください。
「;」は、このコードはここで終わりという印になっています。
コードの終わりには「;(セミコロン)」を付ける
変数の初期化
変数を使う場合には、「変数の宣言」を行った後、最初に初期化を行う必要があります。
変数を宣言して入れ物を用意しましたが、その入れ物に最初の値を入れておいてあげるわけです。
1 2 |
int count; count = 7; |
あるいは
1 |
int count = 7; |
このように宣言と初期化をまとめて行うこともできます。
これで「count」という入れ物(変数)を7という整数で初期化することができました。
整数の入れ物であるint型で変数を宣言したので、整数しか入れることができないのは先ほど説明しましたね。
初心者の方への注意点ですが、
プログラミングのコードというのは、例外を除いて必ず上から下へと実行されていきます。
ですので、
1 2 |
count = 7; int count; |
という順番で記述することはできません。
必ず
1 |
int count; |
と変数を宣言してから、
1 |
count = 7; |
と変数に値を代入するようにしてください。
・コードは上から下へと順に実行される
変数の初期化は必須?
変数の初期化を行わなかったからと言って、エラーになるわけではありません。
ですが、1度も値を代入していない変数を使用するとエラーが起こる可能性があります。
1度も値を代入していない変数には、どのような値が入っているかわかりません。
その変数を使用してエラーが出る、このような不測の事態を発生させないためにも、
変数を宣言した場合には、初期化する癖をつけておくことが大切だと思います。
変数宣言のいろいろ
変数の宣言を行う場合、型が同じであればまとめて宣言することができます。
1 |
int x, y, z; |
この場合、int型で x, y, z の3つの変数を宣言しました。
また、同時に初期化も行うことができます。
1 |
int x = 1, y = 2, z = 3; |
変数の使い方
変数はどのように使うことができるのか。
上記のように整数の入れ物であるint型のcountを用意したのであれば、
そのまま “整数” の代わりとしてcountを使うことができます。
具体例を挙げると、
1 2 3 |
int x = 2 + 3; int y = x + 5; |
このように x と y の変数を宣言した場合、
x には、2 + 3 の結果である 5 で初期化が行われますね。
y はというと、x + 5 となっています。
x というのは、5 が入っているわけですから、 y = 5 + 5; と言い換えることができます。
よって、y は 10 という整数で初期化されたことになります。
このように、”整数” として宣言した変数であれば、”整数” の代わりとしてそのまま計算式の中で利用することができます。
変数の有効範囲(スコープ)
変数には有効範囲(スコープともいわれます)というものがあります。
好きな場所に宣言して、好きな場所で使える、というわけではないのです。
では、変数のスコープについて解説していきたいと思うのですが、
せっかくUnityの講座ですので、Unityのコードで解説していきたいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } } |
これは、UnityでC#のスクリプトを作成したときに、最初から記述されているコードです。
コード中の // はコメントを書きたいときに記述するコードです。
// を記述した行でのみ、// より後ろがコメントであることを示しています。
・コード内でコメントを書きたい場合には、// を記述し、その後ろに書きます
上記のコードですが、初心者の方には何が書かれているかわからないかもしれませんが、
今回注目してもらいたいのは、中括弧{ } です。
これは、C#において一つのブロックを表しています。
上記のコードを中括弧で色分けをするとこのようになります。
「クラス」という大きなブロックの中に、「関数」という小さなブロックが2つ入った構成になっています。
「クラス」や「関数」に関しては、今回は解説いたしませんが、いずれ記事にしたいと思います。
で、肝心の変数の有効範囲である「スコープ」に関してなのですが、
この中括弧自体が「変数のスコープ」を表しているのです。
水色のクラスの中で変数を宣言すれば、水色のクラスの中でのみ変数を使うことができ、
黄色の関数の中で変数を宣言すれば、黄色の関数の中でのみ変数を使うことができます。
もう少し具体的に解説をすると、
水色のクラスの中括弧内で宣言された変数は、水色のクラスの中括弧内でのみ使うことができます。
ですので、黄色の関数内でも変数を使うことができます。
黄色の関数は、水色のクラスの中括弧内にありますからね。
では、黄色の関数の中括弧内で宣言された変数はどうかというと、
この変数は、水色のクラスや別の黄色の関数内では使用することはできません。
どちらも、変数を宣言した関数の中括弧内には含まれませんからね。
というわけで、変数は宣言する場所により、その有効範囲が決められているということがわかっていただけたかと思います。
変数名について
スコープの話が出たので、変数名について少し補足しておきます。
変数名は、「他で使われていない名前であれば、自由に付けることができる」という話をしましたが、
“他で使われていない”ということは、要するに同じ名前の変数はダメということなのですが、当然ですよね。
名前が同じならどの変数のことを指すのかがわからなくなりますから。
ですが、スコープが異なれば同じ名前の変数を宣言することが可能です。
これは、スコープが違えば同じ名前であっても区別することができるからです。
上記の例でいうと、
2つの黄色の関数内でそれぞれ同名の変数を宣言することができます。
また、水色のクラスと黄色の関数で同名の変数を宣言することもできます。
このように、スコープが違っていれば同名の変数を宣言することは可能なのです。
変数の有効期限
では、変数の値はいつまで保持され続けるのでしょうか。
こちらも、有効範囲と同様に変数を宣言する場所により異なってきます。
クラスの中で宣言すれば、クラスが破棄されるまで値は保持され、
関数の中で宣言すれば、関数を抜ける(関数の処理が終わる)まで値は保持されます。
クラスと関数について解説していないので、よくわからないかもしれませんが、
宣言する場所によって、有効期限も異なってくるということを覚えておいてください。