ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

変数について

みなさんこんばんは。

早朝ランニングを日課にしているのですがサボるとその日一日中体がだるくなるようになってしまったのにここ二日サボってしまっているブルーノです。暖かくなって日も早く登るようになったのでランニングには最適な季節ですね。

今回は変数についてのまとめを上げていきたいと思います。

 

変数とは?

前回の後半で少し取り上げた変数ですが、変数とは、データを格納しておく入れ物のようなもののことを言います。あまり名前からは想像しにくいですね。

宣言(declaration)

f:id:covory10101101276:20170502211413j:plain

前回実はこの宣言というあまり馴染みのないワードに青色を付けておいたのですが、プログラミングにおいてこの宣言という行為は必要不可欠になって来るようです。

変数を用意するためやメソッドを使う場合など新しく何かを使用する際は宣言をしないといけません。なんか慣れるまでは少し違和感がありますね。大げさな気がするからかな?

宣言の仕方

データ型 変数名;

ex) int x; 

変数名は前回でも触れたとおり数字が頭に来なければ好きな名前を付けられます。データ型というのはその変数が格納できるデータの種類のことです。整数を格納したければ int 型や ushort 型、文字を格納したければ char 型や string 型など。これらの種類はこれから先少しずつ使いながら覚えていきたいです。さて、今あげたこれらのデータ型はC#言語に最初からあるデータ型で、それらのことを組み込み型というそうです。これに対して、型を自分で自由に定義することもできるそうで、それをユーザー定義型というそうです。入れられるデータの型を自分で自由に定義できる?そんなことができるのかー。

前回使った変数はどれもMainメソッドの中で使いましたが、メソッドの中で宣言された変数のことはローカル変数と言います。変数に初めて値を代入することを初期化と言い、その値は初期値と呼ばれます。ローカル変数についてですが、ローカルな変数というだけあって、どこからでも見えるわけではなく、その変数が宣言されたブロックもしくはその内側のブロックでしか見えません。ブロックとは、{ から } で囲まれてる範囲のことを言います。

const

変数とはデータの入れ物なので自由に入れ替えたり上書きできるようになっているのですがうっかり変更したくないデータの場合はこの const キーワードを使って定数にすることができます(読みはコンストでいいのかな?)。コンストは宣言と同時に初期化しなくてはなりません。

値型と参照型

変数には大きく2種類あり、値型と参照型があります。先ほど変数はデータの入れ物と説明しましたが、値型についてはそのイメージでよいそうです。しかし、参照型は直接入るわけではなく、メモリのどこかに保存されたデータのアドレスが入っているだけで、それを参照することによってデータを引き出すことができます。箱の中にお菓子は入っておらず、お菓子のしまい場所が書いてあるイメージですかね。

値型の中でもかなり重要なものの一つに、論理型(bool型)というのがあるんですが、少し後にこの論理型は多用されるのでメモしておきます。

と言ってもこの論理型は難しくはなく、true(真)と false(偽)しかありません。なんか急に中二チックになりましたが、簡単に言えば ON か OFF かってことらしいです。昔弟に借りてやっていたDSソフトのメイドイン俺というゲームの中にこんな感じの要素があった気がします。

暗黙の型指定

なんかかっこいい響きの言葉ですね。私は好きです。変数を宣言する際に var キーワードを用いることで、暗黙の型指定ができます。例えば、

var x = 10;

と宣言すると、

int x = 10;

 というように、値に応じたデータ型に勝手に変換してくれるのです。便利ですね。でもまだ私は知識が足りないのであまりこれは使わず、手動でデータ型を指定していきたいです。

オブジェクト型

C#の特別な型にオブジェクト型というのがあります。先ほど値型と参照型の違いについて書きましたが、このオブジェクト型は値型でありながら参照型のような仕組みでどんな型でも格納できます。オブジェクト型は値を入れるのがメモリ内のどこかではなく、マネージドヒープ領域という特別なエリアにデータを保存しておき、オブジェクト型の変数にはそのアドレス、ありかが入れられます。名前がかっこよかったので色を変えておきました。

この様々な値型をオブジェクト型変数に代入することをボックス化と言います。オブジェクト型変数に格納したデータを値型変数に代入するには型キャストというのを使います。この際のオブジェクト型変数→値型に代入することをボックス化解除と言います。

ボックス化    値型変数 → オブジェクト型変数

ボックス化解除  オブジェクト型変数 → 値型変数

型キャスト

f:id:covory10101101276:20170503001335j:plain

これしか思いつきませんでした(イメージ図です)。

オブジェクト型は全ての型を入れられる万能な大きな入れ物なのでそのまま突っ込めば良いですが、値型はそれぞれ入れられるものが細かく決まっており、そのまま突っ込むことができません。今回のオブジェクト型から値型への代入は、その中身はこの値型へ入れられますということを明示することで初めて変換することができます。この明示する行為を型キャストと言います

型キャストの仕方

object x;

int y;

int z = 100;

x = z;         //ボックス化

y = (int)x;   //ボックス化解除(型キャスト)

 下から2番目の行でオブジェクト型変数 x に int 型変数 y を代入(ボックス化)し、最後の行で別の int 型変数 y にオブジェクト型変数 x を型キャスト(ボックス化解除)しています。言葉で表すと少し長いですが、こうやってプログラミングするとその行為はスッキリしますね。

 

いかがでしたでしょうか。ひとまず今回はベースのベース部分であるこの程度にまとめておきます。変数というのはこれから先絶対に使って行かなければならない要素なので慎重に理解していきたいと思います。途中の画像は完全に趣味なのですが、イメージ図として捉えておいてください。もっとペース上げないとこれはダメですね。次からは頑張ります。