こんばんにちは、ユウです。
今日はバレンタインということで皆さんはチョコをあげたり、もらったりしましたか?
私は非リアなので、何もない日常を過ごしています(笑)
この時期になると毎回「リア充”○○”!」とか思ったりもしますよね。
今回C#を紹介するにあたって、発行元:SB クリエイティブ株式会社 著者:粂井 康孝(くめい やすたか)さんの「猫でもわかるC#プログラミング」を参考に紹介しています。
本記事での学習
☑変数とデータ型の基礎の基礎を身に着けることができる!
以前の記事では、データの出力についてひと段落つきました。
次にやることは、変数とデータ型です。
データの出力を学んでいる際にも「x」や「int」なんかが出てきたかと思いますがそれらです。
これは覚えておかないと、コンパイルエラーが発生したりして事故るのできちんと覚えておくようにしましょう!
今回はかなり文字だらけとなってしまいますが、根気よく読んでみてください。
それではさっそく始めていきましょう。
変数の初期化
変数(variable)とは、データを格納する記憶の場所です。
よく言われるイメージとしては箱ですね。
この箱には整理しやすいように、名前をつけておきます。これが変数名です。
箱にはデータを入れたり、入れたものを覗くことが出来たりします。
他にも、箱に入れたデータを別のものに変更したり、別の箱に移すことができます。
箱の中に入っているデータを別の物に移した場合、元の箱には何が残るでしょうか?
ここには、同じものが残ります。ですので、移すときは別の箱にコピーしていると考えれば良いです。
この箱には、入れられる種類のデータが決まっています。
このデータの種類をデータ型(data type)といい、変数を使う際にはどのような変数を用意するのか以下のように宣言しないとなりません。
データ型 変数名;
おや?これ前やったぞ…と思う方がいるかもしれませんね。
そのような方は、きちんと勉強できているので素晴らしいです。
思い出せなかった場合は、もう一度以前の記事を参考にしてみてください。
それでは、データの種類であるint型やstring型とは一体何なのでしょうか?
これらは、あらかじめC#が用意してくれている物で組み込み型(built-in data type)といいます。
これに対して、C#が用意せずにユーザーが自由に定義した型をユーザ定義型(user-defined data type )といいます。
今まで使用してきた変数はすべてMainメソッドの中で宣言していました。これらのようにメソッド内で使用する変数をローカル変数(local variable)といいます。
ローカル変数には宣言した際に何が入っているでしょうか?ローカル変数は宣言しただけではその中身は不明のままです。
これをエンジニアたちは「ゴミが入っている」といいます。
ですので、変数を使用する際には値を代入しなければなりません。
この時初めて値を代入することを変数の初期化(initialization)といいこの時の値を初期値(initial value)といいます。
変数は初期化して初めて参照することが可能となります。(参照可能ということは、変数が使えるということです)
定数
変数にconstキーワードを付けて定数(constant)にすることもできます。
定数とは変数と違い、変えることができない値です。
const int x = 10;
というように宣言します。
しかし、以下の宣言ではエラーが発生します。
const int x;
x = 10;
これでエラーが発生する原因は簡単に説明できます。
せっかく定数に設定したxを変数のように値を変えているからです。
値型と参照型
■値型・・・データを直接アクセスする
■参照型・・・データを間接的にアクセスする
int x;
x = 10;
のようにすると、メモリ内のどこかにxのための領域が確保されます。
そして、確保した領域に10という値が格納されます。
このように、変数自体が値を保持するものを値型(value type)といいます。
これに対し、string型は参照型ですが、これらは変数自体に直接データが保持されているわけではなく、
string str;
str = “abc”;
とすると、「abc 」という文字列がメモリ内のどこかに作成されます。そして、そのメモリのアドレスが変数strに保持されます。
メモリへのアドレスを「参照」などと表現されることからこれらのデータ型(reference type)を参照型といいます。
データ型
上の表を見てわかるように、値型は数値型、(Unicode)文字型、論理型に分類されます。
数値型は整数型と実数型に、実数型は浮動小数点型と10進数データ型に分類されます。
また、C#の大きな特徴として.NET型というものが存在します。
C#の中ではこのデータ型と.NET型どちらを使用しても構いません。
.NET型
C#の値型 | .NET型 |
sbyte | System.SByte |
short | System.Int16 |
int | System.Int32 |
long | System.Int64 |
byte | System.Byte |
ushort | System.Unit16 |
uint | System.Unit32 |
ulong | System.Unit64 |
float | System.Single |
double | System.Double |
decimal | System.Decimal |
char | System.Char |
bool | System.Boolean |
.NET型には前に「System」とついていますが、これはSystem名前空間で定義されているという意味です。
あなたに、今まで書いてもらったプログラムには一番最初に
using System;
と書いてもらっていたかと思います。
このように書いておくことで、System.SByteを単にSByteと書くことができます。
なぜこのようにして普通のデータ型と.NET型が分かれて存在しているのでしょうか?
C#ができるまでのプログラミングでは言語が異なるだけでデータ型も異なり様々な問題が生じました。
そこで登場したのが.NET型です。この型は.NETに対応した各種の言語に対応することができます。
上の表の.NET型を見てみると、int型ところがInt32となっています。
注目してほしいのはこの「32」という数字です。
この意味は「int型は32ビット」ということを明確に示しています。
C/C++言語のint型は、ハードウェアやシステムの進歩に柔軟に対応できるようにあえてint型のビット数を決めてきませんでした。
しかし、16ビットだったデータが他の環境に移すと32ビットになってしまうということはありえません。
このような不便を解消するために.NET型が存在します。
最後に
今回は変数について基礎的なことを説明してきました。
以前紹介した変数の出力を合わせることによって、だんだんとプログラミングっぽくなっていきます。と
今回は文字ばかりなってつまらなかったかもしれません、理論の概要ですのでしょうがないとは思うのですが申し訳ありません。
今回はこれで以上となります。
最後まで読んでいただき、ありがとうございました。