時間が経つのが早いと思ってしまいます。el(える)です。
今回は、C#の文法(変数)をお勉強していきたいと思います。
目次
変数
変数とは プログラム中で使う値を保持しておいて、必要な時に取り出せる入れ物です。
RPGなどでは名前や金額を使ったりします。
こんな時に値を保持しておくため、変数が使われます。
今回はプレイヤの名前と金額を変数に入れ、コンソールに表示させてみます。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int money; string name; money = 1000; name = "える"; Console.WriteLine(money); Console.WriteLine(name); } } }
これを保存して、デバックなしで開始をすれば、
この通り、変数からの値取り出しができました。
変数を使うためには、
箱の名前(変数名)
箱に入れる値の種類(型名)
この2つを決めなければいけません。
このプログラムでは、int型のmoney、string型のnameです。
型名(int)変数名(money) 型名(string)変数名(name)ということです。
変数名のルール
変数名の付け方にも最低限のルールが存在します。
- 変数名に使用できるのは英数字と「_」
- 変数名の1文字目に数字は使用できない。
- C#で使用する予約語は使用できない。
変数名をつけるときは、ルールの範囲内で 変数に入れた値の役割が分かる名前 をつけましょう。
C#で使用する主な予約後(文法上の役目を既に持っている単語)
bool | break | byte | case | catch |
default | do | double | else | enum |
if | int | interface | long | new |
short | static | string | switch | this |
変数名は単語の区切りを大文字にする書き方(playerPositionなど)が一般的です。
大文字の部分がラクダのコブにみえることから「キャメル記法」と呼ばれているようです。
型名の種類
変数に入れる方の種類を型(データ型)と呼びます。
型の中でもよく使われるもの
型名 | 意味 | 値 | デフォルト値 |
bool | 真偽値 | trueまたはfalse | false |
byte | 8ビット符号なし整数 | 0~255 | 0 |
char | 文字 | 単一Unicode文字 | ‘\0’ |
string | 文字列 | 文字の羅列 | null |
double | 倍精度浮動小数点型 | ±5.0~10-324~ ±1.7 × 10308 | 0.0 |
float | 単精度浮動小数点型 | ±1.5 × 10-45~ ±3.4 × 1038 | 0.0f |
int | 整数型 | -2,147,483,648 ~ 2,147,483,647 | 0 |
今回、「int money」とすることで、int型(整数型)の値をいれるmoneyという変数の箱を作っています。
また、「string name」とすることで、string型(文字列型)の値を入れるnameという変数の箱も作りました。
変数を作ることを「変数を宣言する」といいます。
プログラムの「money = 1000;」は、宣言したmoney変数に1000という整数をいれています。
「name = “える”;」はname変数にえるという文字列をいれています。
変数に値をいれることを代入といいます。
書式
変数名 = 値;
=は右辺の値を左辺の変数に代入する記号です。
右辺、左辺が等しいという意味ではないので気をつけましょう。
プログラムは文字と文字列を区別します。
文字とは1文字の英数字や漢字、改行文字などをいいます。
文字は「’」シングルクォーテーションで前後を括り、char型に代入します。
文字列は「”」ダブルクォーテーションで括って、string型に代入します。
計算してみよう
プログラムで計算をしてコンソールへ表示してみましょう。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int answer; answer = 2 + 3; Console.WriteLine(answer); answer = 12 - 20; Console.WriteLine(answer); answer = 2 * 6; Console.WriteLine(answer); answer = 18 / 3; Console.WriteLine(answer); answer = 21 % 5; Console.WriteLine(answer); } } }
これをデバックなしで開始をすると、
という結果がでました。
このように、 変数には計算結果も保持しておくことができます。
まずは 2 + 3 で加算をしてコンソールに表示しました。
次にanswerへ減算結果を代入しています。
このように使いまわしをすると
もともと変数に入っていた値を上書きして減算結果が代入されます。
プログラムで使える算術演算子
算術演算子 | 意味 |
+ | 加算 |
ー | 減算 |
* | 乗算 |
/ | 除算 |
% | 剰余 |
所持金とバイト代の合計の計算をしよう
コンソールに働いた時間分のバイト代を足した金額を表示してみましょう。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int money = 10000; int salary = 1000; int hour = 8; int sum = money + salary * hour; Console.WriteLine(sum); } } }
変数の宣言と同時に10000という値を代入しています。
このことを変数の初期化といいます。
書式
型名 変数名 = 初期値;
所持金の合計は、現在の所持金+時給×働いた時間で求められるので、
money + salary * hourで合計をsumに代入しています。
int型やfloat型の変数でも数値と同じように計算することができます。
計算の順序は数学と同じで、 乗算、除算が加算、減算よりも先に計算されます 。
式を()で括ると ()内の計算が優先されます 。
money + (salary + 100) * hourとするとsalary + 100が先に計算されます。
テストの平均値を求めよう
テストの平均値を求めてみましょう。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int math = 75; int english = 65; int history = 90; float average = (math + english + history) / 3.0f; Console.WriteLine("平均値は" + average + "点"); } } }
これをデバックなしで開始をすると、
という風に求められました。
fload型の値には末尾に「f」をつけてください。
整数同士の割り算には注意が必要です。
int型同士の割り算の結果は必ず整数になります。
つまり、3.0fではなく3で割ると小数点は切り捨てとなり、結果は変わります。
小数点以下の計算結果も必要な場合は小数点を含む値で計算してください。
平均値は○○点と表示するように 文字列と変数を+で連結しています。
+演算子は数値同士の足し算だけではなく、
文字列と変数の値を連結したり、文字列同士を連結したりできます。
キャスト
int型の値はfloat型の変数に入れることができます。
この場合は、コンパイラが自動的に変数aをint型からfloat型に変換しています。
int a = 5;
float b;
b = a;
これを暗黙のキャストといいます。
float型をint型に代入することはできません。
float a = 12.3f;
int b;
b = a ;
代入後に小数点以下の情報が切り捨てられてしまうためです。
代入後に情報が失われることが分かっていても代入したい場合は、
プログラマが明示的に型変換を書く必要があります。
float a = 12.3f;
int b;
b =(int)a ;
これを明示的なキャストといい、変数の前に「変換後の型名」と記述します。
string型からint型などキャストできない場合もあります。
変数に一定値を加える
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int num = 1; num = num + 2; Console.WriteLine(num); } } }
このプログラムはnumを1で初期化しています。
そのあとで、再度numに2を足した値を代入しています。
加算した後に再度自分自身の変数に代入することができます。
簡単な書き方があるので書き換えてみましょう。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int num = 1; num += 2; Console.WriteLine(num); } } }
+=演算子を使い、変数の値を増やしました。
書式
変数名 += 加算する値;
プログラムでは1で初期化したnum変数に2を足しています。
その他にも、-=、*=、/=演算子が用意されており、それぞれに対応しています。
変数の値を1だけ増やす
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int num = 1; num++; Console.WriteLine(num); } } }
今回のプログラムでは num変数に1だけ足すため、++演算子(インクリメント演算子)を使いました。
変数名に続けて++と書くことで、変数の中身を1だけ増やします。
書式
変数名++
1増やすことの逆のデクリメント演算子もあります。
変数名に続けてーーと書くことで変数の中身を1減らします。
書式
変数名ーー
終わりに
変数の部分は足し算なども入り結構な量になりました。
まぁ、初心者ならこのくらいなら知っていて当然ですね。
超初心者でもこれなら覚えられるのではないでしょうか。
いやしかし、勉強しながら書きながらだと時間が経つのが早い。。。
しかも、休憩中にはUnityの本読んだりしてるし・・・
早く自分で簡単なゲーム作れるようになりたいなぁと思ってしまいます。
みなさんはどうやって勉強しているんでしょう。
いい勉強法があればぜひとも教えてくださいませ。
それではまた次回。