目次
例を交えてC#の基本的な文法をまとめたので、時間の無い方にもご活用いただけると思います。
ぜひご活用ください。
OS:Windows11 Home/WSL2/Ubuntu 20.04.6
SDK:8.0.101
ランタイム:8.0.1
■1行コメント
1行コメントには「//」を使います。
// この行はコメントです。
■複数行のコメント
複数行のコメントは「/* */」で囲みます。
/*
複数行のコメント
この行もコメントです!
*/
■変数の定義
データ型 変数名 = 値;
例)string hello = "Hello World";
■変数の呼出
呼び出しは変数名だけで呼び出せます。
コンソールに出力するメソッドであるConsole.WriteLine()を使って変数を出力する例が以下です。
例)Console.WriteLine(hello);
出力:Hello World
■データ型
よく使うデータ型を以下にまとめます。
型 | 内容 |
bool | trueまたはfalse |
int | 整数 |
float | 小数 |
char | シングルクオーテーションで囲まれた1文字 |
string | ダブルクオーテーションで囲まれた文字列 |
また、以下のリンクから組み込み型のデータ型一覧を確認できます。
組み込み型のデータ型一覧:
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/built-in-types
「+」で文字列を連結することができます
例)string name = "Taro"
Console.WriteLine("Hello " + name + "Yamada");
出力:Hello TaroYamada
また、「+=」を使うと変数に文字列を追加することもできます。
例)string name = "Taro";
name += "Yamada";
※上の例ではnameに「TaroYamada」が格納されます。
「$”{変数}”」のようにすると変数展開できます。
例)string name = "Taro";
Console.WriteLine($"{name}Yamada");
出力:TaroYamada
配列は以下のように定義します。
■定義
データ型[] 配列名 = new データ型[要素数];
例)string[] names = new string[3];
※[]内は要素数のため、上のように書いた場合インデックス番号の範囲は0~2(=要素数3)です。
配列定義の際に初期値を設定する場合はこのように書きます。
データ型[] 配列名 = new データ型[]{初期値1, 初期値2};
例)string[] a = new string[]{"taro", "taku"};
■要素の取得
例)names[0] = "taro";
names[1] = "taku";
Microsoft公式の解説ページのリンクを以下に記載します。
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/arrays
■四角形配列
多次元配列の定義方法には「四角形配列」と「ジャグ配列」2つがあります。
2次元配列の定義と要素の取得の例
//定義
データ型[,] 配列名 = new データ型[要素数, 要素数];
例)int[,] numbers = new int[2,3]
//要素の取得
例)numbers[1,2] = 3;
3次元配列の定義の例
//定義
データ型[,,] 配列名 = new データ型[要素数, 要素数, 要素数];
例)int[,,] numbers = new int[2,3,2]
//要素の取得
例)numbers[1,2,1] = 3;
初期値を設定する場合は以下のように書きます。
//2次元配列
int[,] numbers = new int[,]{
{1, 2},
{3, 4}
};
//3次元配列
int[,,] numbers = new int[,,]{
{
{1, 2},
{3, 4},
},
{
{5, 6},
{7, 8},
}
};
■ジャグ配列
ジャグ配列は説明を簡略化するため、例のみ記載します。
2次元配列の定義と要素の取得の例
//定義方法①
例)int[][] numbers = new int[2][];
numbers[0] = [1, 2]; //初期化:配列を代入する
numbers[1] = [3, 4];
//定義方法②
例)int[][] numbers = [
[1, 2], //初期化:配列を代入する
[3, 4]
];
//要素の取得
例)numbers[0][1] = 20;
※ジャグ配列は使用前に必ず初期化する必要があります。
配列の定義直後に初期化しておいた方が良いです。
3次元配列の定義の例
//定義方法①
例)int[][][] numbers = new int[2][][];
numbers[0] = [ [1,2], [3,4] ]; //初期化:配列を代入する
numbers[1] = [ [5,6], [7,8] ];
//定義方法②
例)int[][][] numbers = [
[ [1,2], [3,4] ], //初期化:配列を代入する
[ [5,6], [7,8] ]
];
//要素の取得
例)numbers[0][0][1] = 20;
C#には配列と似たようなものでコレクションというものがあります。
※違いは私もわかりません。。
C#では配列より、コレクションが多用されます。
Microsoft公式の解説ページのリンクを張っておきます。
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/collections
コレクションは以下のように使います。
//定義
List<データ型> コレクション名 = [値1, 値2, 値3];
例)List<int> numbers = [1, 2, 3];
//要素の取得
numbers[0] = 10;
C#ではDictionaryクラスで連想配列を扱えます。
Dictionaryは以下のように使います。
■定義
Dictionary<データ型1, データ型2> 連想配列名 = new Dictionary<データ型1, データ型2>(){
{キー1, 値1},
{キー2, 値2}
};
例)Dictionary<string,int> employee = new Dictionary<string, int>(){
{"taro", 26},
{"taku", 32}
};
■キーで要素を取得(値の再代入)
連想配列名.[キー] = 値;
例)employee["taro"] = 21;
■要素を追加
連想配列名.Add(キー, 値);
例)employee.Add("hanako", 28);
■要素を削除
連想配列名.Remove(キー);
例)employee.Remove("taro");
■要素の存在確認
連想配列名.ContainsKey(キー);
例)Console.WriteLine(employee.ContainsKey("taro"));
演算 | 内容 |
int a = 6 + 3; | 足し算 |
int a = 6 – 3; | 引き算 |
int a = 6 * 3; | 掛け算 |
int a = 6 / 3; | 割り算 |
int a = 6 % 3; | 割り算の余り。 |
複合代入演算子を使うと以下のように記述を簡略化できます。
通常 :num = num + 1;
複合演算子:num += 1;
演算 | 内容 |
num += 1; | 変数numに1を足す |
num -= 1; | 変数numから1を引く |
■一覧
記述例 | 内容 |
++i | 前置インクリメント。 |
i++ | 後置インクリメント。 |
–i | 前置デクリメント。 |
i– | 後置デクリメント。 |
■インクリメント/デクリメントとは
インクリメント/デクリメントを使うと、以下2つの処理を1行で書くことができます。
・変数に1を足す/引く
・代入する(などなど…)
具体的にはこんな感じです。
int i = 1;
num = ++i; //「numへのiの代入 & i + 1」を1行でやっている!
Console.WriteLine(num);
出力:2
■前置/後置とは
インクリメントには「前置インクリメント」と「後置インクリメント」の2種類があります。
デクリメントにも同様に「前置デクリメント」と「後置デクリメント」が有りますが、前置・後置の考え方は同じなのでインクリメントでご説明します。
以下は前置・後置の違いです。
前置インクリメント:行の処理の最初に1を足す
例)int i = 0;
num = ++i;
⇒①iに1を足す。 //最初に足す
②num に i を代入する
結果:numには 1 が代入される
後置インクリメント:行の処理の最後に1を足す。
例)int i = 0;
num = i++;
⇒①numに i を代入する
②i に1を足す。 //最後に足す
結果:numには0が代入されている。
記号 | trueになる条件 |
== | 左辺と右辺の値が等しい |
!= | 左辺と右辺の値が異なる |
> | 左辺が右辺より大きい |
>= | 左辺が右辺以上 |
< | 左辺が右辺より小さい |
<= | 左辺が右辺以下 |
■if
if(条件1){
//条件1がtrueの時の処理
}else if(条件2){
//条件1がfalse、条件2がtrueの時の処理
}else{
//条件1,条件2がfalseの時の処理
}
例)
int score = 80;
if(score == 100){
Console.WriteLine("満点です!");
}else if(score >= 60){
Console.WriteLine("合格です");
}else{
Console.WriteLine("不合格です");
}
■switch
switch(変数){
case 値1
//変数の値が値1だった時の処理
break;
case 値2:
//変数の値が値2だった時の処理
break;
default:
//変数の値が値1,値2どちらでもないときの処理
break;
}
例)
string light = "red";
switch(light){
case "blue":
Console.WriteLine("青です");
break;
case "yellow":
Console.WriteLine("黄色です");
break;
case "red":
Console.WriteLine("赤です");
break;
default:
Console.WriteLine("信号ではありません");
break;
}
■while
条件がtrueの間処理を繰り返します。
while(条件){
//繰り返す処理
}
例)
int i = 0;
while(i <= 3){
Console.WriteLine(i);
++i;
}
■for
指定回数ループするさせることができます。
for(初期化式; 条件式; 変数の更新){
//繰り返す処理
}
例)
for(int i = 0; i <= 10; i++){
Console.WriteLine(i);
}
■foreach
配列の各要素についてループ処理をすることができます。
foreach(配列のデータ型 要素を格納する変数名 in 配列名){
//処理
}
例)
int[] numbers = {1, 2, 3};
foreach(int number in numbers){
Console.WriteLine(number);
}
ループ処理の中で、特定の条件の時だけ次のループへ移ったり、ループを抜ける方法です。
■次のループへ:continue
次のループへ移動したいなら「continue;」を使います。
例)
int[] numbers = {1, 2, 3};
foreach(int number in numbers){
if(number == 2){ continue; } //number=2なら次のループへ移動
Console.WriteLine(number);
}
■ループを抜ける:break
ループを抜けるなら「break;」を使います。
例)
int[] numbers = {1, 2, 3};
foreach(int number in numbers){
if(number == 2){ break; } //nuber=2ならループを抜ける
Console.WriteLine(number);
}
try{
//例外が起きそうな処理
}catch(Exception e){
//例外が起きた際の処理
//e:エラーメッセージが格納される変数(変数名は任意)
}finally{
//例外が起きても起きなくても実行する処理
}
「try{}」の中で以下のように書くと、意図的に例外を発生させることができます。
throw new Exception(エラーメッセージ);
プログラミングでは、「値を保存したいなら変数」、「処理を保存したいなら関数」を使います。
しかし、規模が大きくなってくると変数、関数が多くなり整理する必要が出てきます。
この「変数、関数が多くなり整理」できるのがクラスです。
役割ごとに変数、関数をクラスとまとめることでグループ化ができます。
詳細については文章量が多くなるので別記事でまとめています。
以下リンク先をご参照ください。
https://tekutekku.com/csharp_basic_class/
C#の基礎については以上です。