プログラムを作っていく上で、一時的にデータを記録したい場合、変数というものを使うと楽にできます。
変数とは
変数とは、パソコンの主記憶装置(RAMメモリ)に記録されるデータのことです。プログラムが終了すると消滅するため、ずっと記録し続けるということはできません。あくまで一時的に、です。
変数は使う前に必ず宣言する必要があります。宣言の仕方はこのような感じでします。
[型名] [変数名];
Dim [変数名] As [型名]
例えば、文字列型(string)で、strという変数を宣言する場合はこのような感じになります。
string str;
Dim str As String
そして、宣言と同時にデータを入れることもできます。
string str = "Hello World!";
Dim str As String = "Hello World!"
変数の型について
変数の型はさまざまあります。
重要なもの
一番重要なものだけ抜粋するとこのようなものがあります。
正式名 | 短縮形 | 形式 | サイズ | 扱える範囲 | タイプ |
Int32 | int | 整数 | 固定 | -2147483648~2147483647 | 値型 |
Single | float | 小数(浮動小数点数) | 固定 | -3.40282347E+38~3.40282347E+38 | 値型 |
String | string | 文字列 | 可変 | いくらでも | 値型 |
Boolean | bool | 理論値 | 固定 | true/falseのみ | 値型 |
まずは最低限、この4つを覚えましょう。
整数型
整数型だけでもたくさんあります。一番使われるものはintとlong
正式名 | 短縮形 | 形式 | サイズ | 扱える範囲 | タイプ |
Byte | byte | 整数型 | 1バイト | 0~255 | 値型 |
Int16 | short | 符号付整数型 | 2バイト | -32768~32767 | 値型 |
Int32 | int | 符号付整数型 | 4バイト | -2147483648~2147483647 | 値型 |
Int64 | long | 符号付整数型 | 8バイト | -9223372036854775808~9223372036854775807 | 値型 |
UInt16 | ushort | 整数型 | 2バイト | 0~65535 | 値型 |
UInt32 | uint | 整数型 | 4バイト | 0~4294967295 | 値型 |
UInt64 | ulong | 整数型 | 8バイト | 0~18446744073709551615 | 値型 |
小数(浮動小数点数)
浮動小数点数でよく使われるものはfloatですが、最近のCPUはdoubleに合わせて作っているものも出てきているため、floatでサイズが小さいほうが高速だとは限りません。
まあそのときに応じて使い分けるのがベストでしょう。いっそdoubleで統一するのもありかもしれませんね。
正式名 | 短縮形 | 形式 | サイズ | 扱える範囲 | タイプ |
Signle | float | 浮動小数点数 | 4バイト | -3.40282347E+38~3.40282347E+38 | 値型 |
Double | double | 浮動小数点数 | 8バイト | ~-1.7976931348623157E+308~1.7976931348623157E+308 | 値型 |
数値型
整数型・浮動小数点数型のほかに、数値型といわれる型もあります。こちらはあまり使い道はないですが、オーバーフローしづらいのが特徴です。
正式名 | 短縮形 | 形式 | サイズ | 扱える範囲 | タイプ |
Decimal | decimal | 数値型 | 16バイト | -79228162514264337593543950335~79228162514264337593543950335 | 値型 |
数値型はこの1つだけです。このdecimalは整数だけではなく、小数も扱うことができます。
ただ数値にしてもサイズがやけにでかいので、あまり使われることはありません。
文字関係
まず、コンピューターの世界での文字と文字列は別物です。文字がたくさん並んだものが文字列です。この二つは間違えないようにしましょう。
正式名 | 短縮形 | 形式 | サイズ | 扱える範囲 | タイプ |
Char | char | 文字 | 2バイト | — | 値型 |
String | string | 文字列 | 可変 | — | 値型と参照型のハイブリッド |
論理型
コンピュータhあ0と1の世界だ!なんてよく聞きます。プログラミングをしていく中でも、0と1、つまりtrueかfalseを使っていきます。
正式名 | 短縮形 | 形式 | サイズ | 扱える範囲 | タイプ |
Boolean | bool | 理論値 | 1バイト | trueかfalse | 値型 |
クラスや構造体
stringやintのように、あらかじめ作られた型のほかに、自分でクラスを作り、変数として初期化することもできます。
例えば
public class A { public int Value = 0; }
というクラスを作ります。このクラスのインスタンスを保存する変数は
A var1 = new A();
みたいに作ることができます。
正式名 | 短縮系 | 形式 | サイズ | 扱える範囲 | タイプ |
構造体 | struct | 構造体 | ものによる | — | 値型 |
クラス | class | クラス | ものによる | — | 参照型 |
ちなみに…
ここで紹介した型(Aクラスを除く)はすべて値型です。Aクラスはクラスなので参照型。
値型と参照型については参考をご参照ください。
nullについて
データが存在しない場合、nullというものが使われます。
intやfloat、boolなど値型と呼ばれる型はnullを使うことができませんが、stringのような参照型の特徴を持ったオブジェクトに対してはnullというものがあります。
nullは別に何かしらの型のオブジェクトというものではなく、オブジェクトが存在しないという意味があります。
例を見てみましょう。
public class A { public int Value = 0; } public void Main() { A data = null; // data => null // data.Valueは、そもそもdataにデータが含まれていない(nullである)ので呼び出せない // NullReferenceExceptionが投げられる }
new A();とすることでいつもは変数にデータを入れてきましたが、その場でnewしたくない場合、ただ宣言だけしておきたい場合はnullを入れておくといいでしょう。
参考
クラスと構造体の違い(参照型と値型の違い)
http://yryr.me/programming/csharp/beginner/object-model/dotnet-refarence-value-type-variable.html