C_Sharp-制御構文
C#の条件分岐処理
ifステートメント
C#におけるif文(条件分岐)は、以下の形式となります。(C/C++と同様の記述方法です)
class Program
{
static void Main()
{
int a = 10;
int b = 15;
if(a == b){
System.Console.WriteLine("a == b");
}else if(a > b){
System.Console.WriteLine("a > b");
}else{
System.Console.WriteLine("a < b");
}
}
}
C#のswitchステートメント
C#ではswitch文におけるフォールスルー(caseラベルを超えて実行すること)を原則禁止しています。
caseブロックにおいてbreak文を付け忘れた場合には、コンパイルエラーとなります。
明示的にフォールスルーを行う場合には、ラベルのみを記述します。
また、case文中でgoto文を用いることが可能であり、強制的にフォールスルーを行うことは可能です。しかし、可読性の観点からあまり推奨されません。
class Program
{
static void Main()
{
System.Console.Write("> input number(0, 1, 2, 3) : ");
int num = int.Parse(System.Console.ReadLine());
switch(num){
case 0:
System.Console.WriteLine("zero.");
break;
case 1: // ラベルのみであればフォールスルーします。
case 2:
System.Console.WriteLine("1 or 2.");
break;
case 3:
System.Console.Write("3 or ");
goto case 2; // ラベルへgotoします。
default:
break;
}
}
}
文字列のswitch文
C#ではswitchの条件として文字列を扱うことが可能です。
条件にnullを指定することも可能です。
class Program
{
static void Main()
{
System.Console.Write("> ");
var msg = System.Console.ReadLine();
switch(msg){
case "":
System.Console.WriteLine("no message");
break;
case null:
System.Console.WriteLine("message is null");
break;
default:
System.Console.WriteLine(msg);
break;
}
}
}
C#の反復処理
C#のforステートメント
c++などと同様に、for文でのみ一時的に利用する変数をfor文のループ開始時に定義することが可能です。
class Program
{
static void Main()
{
for(int cnt = 0; cnt < 10; cnt++){
System.Console.WriteLine("count = {0}", cnt);
}
}
}
C#のwhileステートメント
継続条件を満たす限り繰り返し処理を行います。(C/C++と同様の記述方法です)
class Program
{
static void Main()
{
int cnt = 0;
while(cnt < 10){
System.Console.WriteLine("count = {0}", cnt);
cnt++;
}
}
}
C#のdo whileステートメント
do-while文は最低1回はブロック内の命令が実行される反復処理です。(C/C++と同様の記述方法です)
class Program
{
static void Main()
{
int cnt = 0;
do{
System.Console.WriteLine("count = {0}", cnt);
cnt++;
}while(cnt < 10);
}
}
C#のforeachステートメント
foreachは配列やコレクションの要素を列挙するための制御構文です。
イテレータ(デザインパターン)を言語に組み込んだものです。
class Program
{
static void Main()
{
int[] nums = new int[] { 1, 2, 3, 4, 5 };
foreach(int num in nums){
System.Console.WriteLine(num);
}
}
}
breakとcontinue
繰り返し文の途中で抜けるにはbreak文を使用します。
後続処理をスキップし、次の繰り返しに進むにはcontinue文を使用します。
ジャンプ処理
C#のgotoステートメント
C#におけるgoto文は移動可能なジャンプ先に制限があります。
ブロック内からブロック外にジャンプすることは可能ですが、ブロック外からブロック内にジャンプすることはできません。
つまり、C/C++のように関数内で自由にジャンプすることはできません。
class Program
{
static void Main()
{
//goto LABEL_A; // ブロック内へのジャンプはエラーとなる
{
LABEL_A:
System.Console.WriteLine("LABEL A");
goto LABEL_B; // ブロック外へのジャンプは可能です。
System.Console.WriteLine("----"); // ここは通らない。
}
LABEL_B:
System.Console.WriteLine("LABEL B");
}
}