# 変数と型

## 練習課題

[記入できるファイルをダウンロード](https://class.illogic.games/attachments/5)

### 変数の宣言と代入

ゲームを作っている間に、ゲームに関するいろんなデータを管理しなければならない。以下のデータについて考え、最も適する「データ型」を選択してください。

<table class="align-left" id="bkmrk-%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B%E4%BE%8B%E3%83%97%E3%83%AC%E3%83%BC%E3%83%A4%E3%83%BC%E3%81%AE%E7%82%B9%E6%95%B0%E6%95%B4%E6%95%B0%E5%9E%8B%EF%BC%88int" style="width: 98.0952%;"><colgroup><col style="width: 36.938%;"></col><col style="width: 26.4895%;"></col><col style="width: 36.5725%;"></col></colgroup><thead><tr><td class="align-center">**データ**</td><td class="align-center">**型**</td><td class="align-center">**例**</td></tr></thead><tbody><tr><td>プレーヤーの点数</td><td class="align-left">整数型（int)</td><td class="align-left">```c#
int points = 100;
```

</td></tr><tr><td>プレーヤーの名前</td><td><details><summary>答え</summary>

文字列（string）

</details></td><td class="align-left"><details><summary>答え</summary>

```c#
string playerName;
```

</details></td></tr><tr><td class="align-left">現在持っているアイテムの数</td><td><details><summary>答え</summary>

整数型（int)

</details></td><td><details><summary>答え</summary>

```c#
int itemCount = 5;
```

</details></td></tr><tr><td class="align-left">車が走った距離</td><td><details><summary>答え</summary>

小数型（float）

</details></td><td><details><summary>答え</summary>

```c#
float distance = 25.12f;
```

</details></td></tr><tr><td class="align-left">ゲームの初期化が終わった？</td><td><details><summary>答え</summary>

ブール型（bool）

</details></td><td><details><summary>答え</summary>

```c#
bool isStarted = false;
```

</details></td></tr><tr><td class="align-left">ステージのタイトル</td><td><details><summary>答え</summary>

文字列（string）

</details></td><td><details><summary>答え</summary>

```c#
string stageName = "ステージ１"
```

</details></td></tr><tr><td>キャラクターのセリフ</td><td><details><summary>答え</summary>

文字列（string）

</details></td><td><details><summary>答え</summary>

```c#
string dialogue;
```

</details></td></tr><tr><td>ゲーム終了かどうか</td><td><details><summary>答え</summary>

ブール型（bool)

</details></td><td><details><summary>答え</summary>

```c#
bool isGameOver = true;
```

</details></td></tr><tr><td>残りの体力</td><td><details><summary>答え</summary>

整数型（int）

</details></td><td><details><summary>答え</summary>

```c#
int playerHP = 100;
```

</details></td></tr><tr><td>アイテムのコスト</td><td><details><summary>答え</summary>

整数型（int)

</details></td><td><details><summary>答え</summary>

```c#
int itemCost;
```

</details></td></tr><tr><td>レースコースの名称</td><td><details><summary>答え</summary>

文字列（string）

</details></td><td><details><summary>答え</summary>

```c#
string courseName = "レインボーコース"
```

</details></td></tr><tr><td>ステージの残り時間</td><td><details><summary>答え</summary>

小数型（float）

</details></td><td><details><summary>答え</summary>

```c#
float timeRemaining = 60.0f;
```

</details></td></tr></tbody></table>

### C#を読みましょう

以下の表は、C#で書いた命令とその日本語の意味が書いてある。空枠を完成してください。

<table class="align-left" id="bkmrk-c%23%E6%97%A5%E6%9C%AC%E8%AA%9Eint-counter%3B%E4%BD%95%E3%81%8B%E6%95%B0"><colgroup><col style="width: 260px;"></col><col style="width: 649px;"></col></colgroup><thead><tr><td class="align-center">**C#**</td><td class="align-center">**日本語**</td></tr></thead><tbody><tr><td>```c#
int counter;
```

</td><td>何か数える「カウンター」整数型変数を宣言</td></tr><tr><td>```c#
float height = 1.70f;
```

</td><td><details><summary>答え</summary>

「高さ」を表す小数型変数を宣言し、1.70メートルを代入

</details></td></tr><tr><td>```c#
float distance = 100;
```

</td><td><details><summary>答え</summary>

「距離」を表す小数型の変数を宣言し、100メートルで初期する

</details></td></tr><tr><td><details><summary>答え</summary>

```c#
string saveFileName = "save0001.dat"
```

</details></td><td>「セーブファイル名」専用の変数を宣言し、 「save0001.dat」を代入

</td></tr><tr><td>```c#
bool isTimeOut = false;
```

</td><td><details><summary>答え</summary>

 時間切れ（タイムアウト）を表すブール型の変数を宣言し、「いいえ」（false）で始まる。

</details></td></tr><tr><td><details><summary>答え</summary>

```c#
 int coinCount;
```

</details></td><td>ステージの中に残っている「コイン」の数の変数を宣言</td></tr><tr><td><details><summary>答え</summary>

```c#
 bool hasKeycard = false;
```

</details></td><td>プレーヤーがドアを開くための「キーカード」を拾ったかを表す変数を宣言し、「いいえ（偽）」で始まる。</td></tr><tr><td>```c#
string bossName = "";
```

</td><td><details><summary>答え</summary>

 ボスの名前を保存するための文字列型変数を宣言し、中身は空。

</details></td></tr><tr><td><details><summary>答え</summary>

```c#
int a = 10;
int b = 5;
float c = a / b;
```

</details></td><td class="align-left">整数型の変数「a」を宣言し、「10」を代入する。 整数型の変数「b」を宣言し、「5」を代入する。

小数型の変数「c」を宣言し、「ａ割るｂ」を代入する。

</td></tr><tr><td>```c#
string firstName = "太郎";
string lastName = "大原";
string fullName = lastName + " " + firstName;
```

</td><td class="align-left"><details><summary>答え</summary>

下の名前（firstName）と苗字（lastName）の文字列型変数を作成し、「太郎」と「大原」を代入する。

最後、フルネームの変数を作成し、名前と苗字を連結し、代入する。

つまり、「fullName」の中には「大原 太郎」が入っている

</details></td></tr></tbody></table>

### 初期化の値で型を決める：暗黙的な型指定「var」

今まで、変数を宣言するときに、どのデータを入れるべきかを「型」で指定しなければならない。ただ、宣言の時に一緒に何かの「値」を代入する場合、その「値」から直接に「型」を判断し、自動的に変数の「型」を指定することもできる。

この場合は、変数を「var」で宣言してください。

例：

```c#
var counter = 0;        // 0 は整数なので、counterはintになる
var height = 1.70f;     // 1.70fは実数（小数）なので、heightはfloatになる
var name = "Player 1";  // "Player 1"は文字列なので、nameはstringになる
var isGameOver = false; // falseは「偽」なので、isGameOverはboolになる
```

「var」を使うことにより、代入する数値に合わせて、型を決める

---

**Q.**<span style="white-space: pre-wrap;"> いつ「var」を使うか？</span>  
**A.**<span style="white-space: pre-wrap;"> 自由に使えるが、普通に「一時的に使い捨てる変数」を使うケースが多い。</span>

**Q.**<span style="white-space: pre-wrap;"> 使えない時もある？</span>  
**A.**<span style="white-space: pre-wrap;"> 以下の場合は「var」を使えない</span>

- 宣言のみの時（代入なし）

```c#
var number = 10;  // OK!
var number;       // NG
```

- メソッドの「引数」と「戻り値」（※メソッドについてはまた後で）
- クラスの「メンバー変数」（※クラスとメンバー変数についてはまた後で）