Skip to content

CS_basic_grammar1

ayutaku edited this page Aug 6, 2021 · 31 revisions

基本文法1

アプリを作り始める前に、まずは一緒にC#の基本文法を学んでいきましょう!!
各項目ごとに練習問題も用意しています。実際に手を動かしながら覚えていきましょう。

目次

Debug.Log()という命令を用いると、実行結果をConsoleウィンドウに出力(画面に表示)することができます。様々な命令を用いることでプログラムを組むことができます。

まずは、以下のコードでHello World!という文字列を出力してみよう。(復習)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sample : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        // プログラム1-1
        Debug.Log("Hello World!");
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

ここからより詳しい解説をします。

Debug.Log("Hello World!");

先程出力した「Hello World!」は文字列と呼ばれます。文字列は""(ダブルクォーテーション)で囲まなければエラーとなります。また、C#では文末に;(セミコロン)を付ける必要があります。

それでは以下の練習問題を解いてみましょう!

練習問題1-1. 上のプログラム1-1を書き換えて、Hello Rikoten!と出力してみよう。

これ以降のプログラムで特に指示がない場合はStart()の{}の中にコードを書くようにしてください。

プログラム中に///*  */を書くと、その行は「コメント」になりプログラムとして認識されなくなる。これを「コメントアウト」という。
1行だけのコメントは//を左に書き、複数行のコメントは/*  */で囲む。
コメントを書くと、思考が整理されたり、自分で書いたコードの意味を後で思い出す際に役立つ。
さらにチーム開発では、書いたプログラムの意味や意図を他のメンバーに伝えるためにも重要なので、コメントはなるべく書くようにしよう。

// プログラム1-2
// 一行のコメント
/* 複数行のコメント
   複数行のコメント
   複数行のコメント */

練習問題1-2. 好きな文章を書いてコメントアウトしてみよう。
練習問題1-3. プログラム1-1のDebug.Log()をコメントアウトしてみよう。次に、プログラムを実行しても文字列が出力されないことを確認しよう。

以下の演算子を用いると、プログラム上で計算をすることができる。

演算子 意味
+ 足し算
- 引き算
* 掛け算
/ 割り算
% 割り算のあまり

実際に以下のコードを実行してみよう

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sample : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log(10+2);//12が出力される
        Debug.Log(10-2);//8が出力される
        Debug.Log(10*2);//20が出力される
        Debug.Log(10/2);//5が出力される
        Debug.Log(10%3);//「10÷3 = 3あまり1」なので、あまりの1が出力される

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

""で囲まれた値を文字列という。+演算子で文字列の結合が可能。

// プログラム1-4
Debug.Log("Hello " + "World!");  //Hello World!と出力される

 数値と文字列は異なります。例えば、10と"10"では前者は数値、後者は文字列として扱われます。以下のプログラムをStart()の中に書いて実行結果を確認しましょう。

Debug.Log(10+2);  //12と出力される
Debug.Log("10+2");  //10+2と出力される

練習問題1-4. 「2020を17で割ったあまり」と 3 * 7 * 7 * 11 * 13 * 37の計算結果をそれぞれ出力しよう。
練習問題1-5. 2つの文字列"矢口"と"くん"を+演算子で結合し、出力しよう。
練習問題1-6. 以下のコードの実行結果はどうなるか予測してみましょう。また実際に実行してみるとどうなるか確認しましょう。

Debug.Log(4+3);
Debug.Log("4"+"3"); 
Debug.Log("4+3");

今まで数値や文字列と呼んできた値の種類はデータ型と呼ばれます。まずは、int型string型を覚えましょう!

データ型 意味 具体例
int型 整数(英語でinteger) 5
string型 文字列 "矢口くん"

変数を定義するということは以下の図のように、箱を用意するイメージだと考えてください。それぞれの箱には変数名(例えばnumber,nameなど)がついていて、その箱の中に値(例えば5,"矢口くん"など)が入っているイメージです。これらの値を書き換えたり、取り出したりしてプログラムを書いていきます。

02_01_型

ここからは実際のコードで解説します。まず、変数を定義します。これは箱を用意するイメージでした。以下のように「データ型 変数名」と書きます。

int number;
string name;

続いて値を代入します。これは箱の中に値を入れるイメージです。「変数名 = 値」とすることで値を代入できます。ここで注意することはプログラミングの「=」は数学の「=」とは異なるということです。プログラミングの「=」は等しいという意味ではなく、値を代入するという意味になります。

int number;
number = 5;
string name;
name = "矢口くん";

ではこの値を出力しましょう。変数をDebug.Log();に入れることで中に入っている値を出力することができます。

int number;
number = 5;
Debug.Log(number);//5が出力される
string name;
name = "矢口くん";
Debug.Log(name);//矢口くんが出力される

なお、宣言した型と違う型を代入することはできません。例えば、int型で宣言した変数に文字列を代入することはできません。

代入不可

練習問題1-6. int型で変数ageを宣言し、自分の年齢を代入し、出力させよう。また、string型で変数nameを宣言し、自分の名前を代入し、出力させよう。

変数は宣言と同時に値を代入することができます。(変数の初期化)

int number = 5;
string neme = "矢口くん"

また以下のように変数同士でも計算や結合ができます。

int number = 5;
Debug.Log(number + 3);//8が出力される

int number2 = 9;
Debug.Log(number + number2);//14が出力される
string feeling = "好き";
Debug.Log("C#" + feeling);//C#好きが出力される
string name = "矢口くん";
Debug.Log(name + feeling);//矢口くん好きが出力される

また、変数は中に入っている値を変更することができます。

02_03上書きpng
string feeling = "好き";
Debug.Log(feeling);//好きが出力される

feeling = "大好き!";//変更してもエラーはでない。一度宣言しているのでstring feelingとしないでfeelingのみを書く。
Debug.Log(feeling);//大好き!が出力される

練習問題1-7. int型変数yearを定義し、値として今の西暦で初期化して、出力しよう。その後、値を1年後に上書きして出力しよう。
練習問題1-8. string型変数projectを定義し、値として"Science cafe"で初期化して、出力しよう。その後、値を"ワセリコセミナー"に上書きして出力しよう。

プログラミングでは以下のような書き方をすることができます。

int number = 5;
Debug.Log(number);//5が出力される

number = number + 7;//自己代入
Debug.Log(number);//12が出力される

上の例では変数numberの値である「5」に7を足した12という値をnumberという箱の中に入れるイメージです。数学の「=」とは異なり、プログラミングの「=」は代入の意味なのでこのような書き方をすることができます。

さらにこれらを省略し以下のように書くこともできます。

もとの式 省略
x = x + 5 x += 5
x = x - 5 x -= 5
x = x * 5 x *= 5
x = x / 5 x /= 5
x = x % 5 x %= 5

さらに特別な形として、1を足す時と1を引く時は以下のように書くこともできます。

もとの式 省略
x = x + 1 x++
x = x - 1 x--

練習問題1-9. int型変数yearを定義し、値として今の西暦で初期化して、出力しよう。その後、値を1年後に上書きして出力しよう。(省略した形でプログラミングを書こう)

変数にはint型、string型の他にも以下のような型があり、代入するデータによって決まった型を用いる必要がある(下表参照)。

データ
int 整数 10, 9999
float 単精度浮動小数点 2.5f, 3.14f (数字の後ろにfを付ける)
string 文字列 "こんにちは", "1月1日"
bool 真偽 true, falseのみ

Tips

慣習的に、bool型変数はisXXX(XXXは名詞や形容詞)と命名されることが多い。

また、C#では、int型+float型、int型+string型など、型の異なる値同士の計算をすることも可能である。

int x = 5;
float y = 2.5f;
Debug.Log(x+y);//7.5が出力。float型として計算される
int year = 3;
string era = "令和";//eraは日本語で元号
Debug.Log("今は" + era + year + "年です!" );//今は令和3年です!が出力される(2021年現在)。int型はstring型として処理される

では以下の計算はどうなるでしょうか?

int x = 5;
int y = 2;
Debug.Log(x/y);

5÷2をしているのなら、2.5となるところが、実際には2と出力されます。なぜならint型とint型の計算であるため結果もint型になるからです。2.5と出力させるには以下のように強制型変換します。

int x = 5;
int y = 2;
Debug.Log((float)x/y);//2.5が出力

練習問題1-10. bool型の変数isMacを定義し、値としてtrueを代入しよう。次に、Bool型の変数isWindowsを定義し、値としてfalseを代入しよう。(windowsユーザーは逆)

(ここではvar型については割愛します)

Clone this wiki locally