こんにちは。明月です。
この投稿はC#の制御文に関する説明です。
プログラムで制御文というのはプログラムの処理順番を制御するか繰り返して実行することの制御回数を決定することの意味です。
改めて簡単に説明すると、プログラムのコードは基本的にソースの上の行から下の行の向きで処理します。単純に上から下の行に処理の流れの中で繰り返して処理する内容があることもあるし、処理を飛び越える部分、省略しなければならない処理がある可能性があります。
この繰り返し、飛び越える、省略する処理を制御文といいます。
制御文は選択文、繰り返し文、分岐文があります。
選択分は条件により真偽の可否により処理する制御文です。種類はif~else文、switch~case文があります。
繰り返し文は一定な条件が満たす時まで同じ処理を繰り返して処理する制御文です。種類はfor文、while文、do~while文、foreach文があります。
分岐文は流れの処理順番を変わることにする制御文です。break文、continue文です。
if~else
- if~else文は真偽の可否により処理する制御文です
① if(条件) => 条件が真(true)なら「処理スタック」を実行する。
処理スタック;
② if(条件) => 条件が真(true)なら「処理スタック1」を実行する。
処理スタック1;
else => 偽(false)なら「処理スタック2」を実行する。
処理スタック2;
③ if(条件1) => 条件1が真(true)なら「処理スタック1」を実行する。
処理スタック1;
else if(条件2) => 条件1が偽(false)かつ条件2が真(true)なら「処理スタック2」を実行する。
処理スタック2;
else => 条件1と条件2が偽(false)なら「処理スタック3」を実行する。
処理スタック3;
if文の条件が真(true)なら該当なスタックが実行する構造です。最後にelseがあればすべての条件が偽(false)なら実行する流れです。
using System;
namespace Example
{
class Program
{
// 実行関数
static void Main(string[] args)
{
// ブール値を設定 = true
bool a = true;
// 変数aがtrueなら
if (a)
{
// コンソールに出力
Console.WriteLine("first condition = true");
}
// ブール値を設定 = false
a = false;
// 変数aがtrueなら
if (a)
{
// コンソールに出力
Console.WriteLine("second condition = true");
}
else
{
// コンソールに出力
Console.WriteLine("second condition = false");
}
// 変数bに値の2を設定
int b = 2;
// 変数bが1なら
if (b == 1)
{
// コンソールに出力
Console.WriteLine("third condition b = 1");
}
// 変数bが2なら
else if (b == 2)
{
// コンソールに出力
Console.WriteLine("third condition b = 2");
}
// 変数bが1あるいは2ではなければ。
else
{
// コンソールに出力
Console.WriteLine("third condition = false");
}
// 任意のキーを押してください
Console.WriteLine("Press any key...");
Console.Read();
}
}
}
上の例を説明すれば始めの条件でaの変数の値を確認します。
aのブール値がtrueならif(a)のスタック領域が実行されます。aという変数にtrueの値を格納しましたので、コンソールに「first condition = true」というメッセージが出力しました。
二つ目の条件式はif~elseの条件式です。変数aがtrueならif(a)のスタック領域を実行するしfalseならelseのスタック領域を実行します。
二つ目の条件式前に私がaの変数の値をfalseを格納しましたので、コンソールに「second condition = false」というメッセージが出力しました。
三つ目の条件式は変数bの値を関係演算子でtrue、falseの値を計算します。
bの値を2で設定しましたので、if(b==2)の条件が真(true)になるので、コンソールに「third condition b = 2」というメッセージが出力しました。
switch~case
- switch~caseは選択文ですが、if~else if~elseと似ている処理をします。
switch(条件)
{
case 値1:
処理 1;
break;
case 値2:
処理 2;
break;
case 値3:
処理 3;
break;
...
default:
処理;
break;
}
switch~caseで重要なポイントはbreakです。switchの条件変数に合っている値を探してcaseのスタック領域を実行しますが、breakがキーワードがなければC#ではエラーが発生します。
using System;
namespace Example
{
class Program
{
// 実行関数
static void Main(string[] args)
{
// 変数のdataに10を格納
int data = 10;
// dataの条件変数
switch (data)
{
// dataが10の場合
case 10:
// コンソールに出力
Console.WriteLine("data = 10");
// switchを抜け出す。
break;
// dataが20の場合
case 20:
// コンソールに出力
Console.WriteLine("data = 20");
// switchを抜け出す。
break;
// caseで合うデータが無い場合
default:
// コンソールに出力
Console.WriteLine("default");
// switchを抜け出す。
break;
}
// 任意のキーを押してください
Console.WriteLine("Press any key...");
Console.Read();
}
}
}
上の例はdata変数に10の値を格納しました。
なのでswitch~caseでcaseの10の場合の領域を探して実行します。
for
- for文は初期値を設定して終了条件が偽(false)になるまで増加値を変更しながら繰り返してスタック領域を実行する制御文です。
for (初期値; 終了条件; 増加値)
{
処理;
}
using System;
namespace Example
{
class Program
{
// 実行関数
static void Main(string[] args)
{
// iの値が0から9になるまで出力を繰り返し
for (int i = 0; i < 10; i++)
{
// コンソールに出力
Console.WriteLine(i);
}
// 任意のキーを押してください
Console.WriteLine("Press any key...");
Console.Read();
}
}
}
上の例はforでiの値を0に設定します。iの値は10より未満なので条件は真(true)になります。
スタック処理領域を実行して増加値でiの値を1を増加します。つまりiの値は1になります。
またiの値が10より未満なので条件は真(true)になります。
また、スタック処理領域を実行します。iが10になるまで繰り返して実行します。
while
- while文はforと同じ繰り返し文ですが、差異は初期化設定と増加値設定がありません。
while(条件)
{
処理;
}
using System;
namespace Example
{
class Program
{
// 実行関数
static void Main(string[] args)
{
// 条件変数
int i = 0;
// 合算変数
int sum = 0;
// sumの値が100を超えるまで実行する。
while (sum < 100)
{
// 条件変数1を増加
i++;
// 合算変数に条件変数の値を足す。
sum += i;
// コンソールに出力
Console.WriteLine(sum);
}
// 任意のキーを押してください
Console.WriteLine("Press any key...");
Console.Read();
}
}
}
上の例は条件式でiの値を確認することではなく、合算変数が100を超えるまで繰り返します。
つまり、iの値を1から14まで足すと105で100の値を超えるので終了します。
do~while
- do~whileはwhile文と似ていますが、forとwhileの場合はスタック処理を実行する前に条件を確認して実行します。
でも、do~whileはまずスタック処理を実行した後、繰り返すかの可否を確認します。
do
{
処理;
} while(条件);
using System;
namespace Example
{
class Program
{
// 実行関数
static void Main(string[] args)
{
// 条件変数
int i = 10;
// 合算変数
int sum = 0;
// 条件に満たさなくても一応、処理を一回実行する。
do
{
// 合算変数に条件変数の値を足す。
sum += i;
// コンソールに出力
Console.WriteLine(sum);
// 条件変数1を増加
i++;
// sumの値が5を超えるまで実行する。
} while (sum < 5);
// 任意のキーを押してください
Console.WriteLine("Press any key...");
Console.Read();
}
}
}
上の例はiの値が10で設定してdo~whileの条件式で初めから条件が偽(false)です。
でも、条件が合わなくてもdo~whileの処理式を一回実行してコンソールに出力しました。
foreach
- foreachはiteratorパターンと関係がある繰り返し文です。
配列やコレクションのオブジェクト(ノード)を取得して個数程に繰り返し実行する制御です。
※この部分は配列とリストと関係がある部分なので、配列とリストを説明する時に詳しく説明します。
foreach(データタイプ 任意変数 in 配列)
{
処理;
}
using System;
namespace Example
{
class Program
{
// 実行関数
static void Main(string[] args)
{
// 配列変数宣言
int[] a = new int[5] { 1, 2, 3, 4, 5 };
// a配列あkら順番で取得してbの変数に格納する。
foreach (int b in a)
{
// コンソールに出力
Console.WriteLine(b);
}
// 任意のキーを押してください
Console.WriteLine("Press any key");
Console.ReadLine();
}
}
}
a変数にintタイプのデータを5個を格納しました。
foreachにより5回に繰り返してデータを出力することを確認できます。
break
- breakは基本的に繰り返し文を抜け出す時に使うキーワードです。switch~case文でも使います。
using System;
namespace Example
{
class Program
{
// 実行関数
static void Main(string[] args)
{
// 0から9まで繰り返し
for (int i = 0; i < 10; i++)
{
// 条件文のiが3の場合
if (i == 3)
{
// forの繰り返しを抜け出す。
break;
}
// コンソールに出力
Console.WriteLine(i);
}
// 任意のキーを押してください
Console.WriteLine("Press any key...");
Console.ReadLine();
}
}
}
上の例は初期値が0から10になると終了する繰り返し文、for文です。
でも、実行スタック領域で、if条件文があり、iが3の場合にbreakを実行して繰り返し文を抜け出します。
つまり、結果は2まで出力します。
continue
continue文はbreak文と似てます。breakは繰り返し文を抜け出しますが、continueは抜け出すことではなく、実行スタックを止まり、条件式に戻る機能です。
using System;
namespace Example
{
class Program
{
// 実行関数
static void Main(string[] args)
{
// 0から9まで繰り返し
for (int i = 0; i < 10; i++)
{
// iが偶数の場合、
if (i % 2 == 0)
{
// 繰り返し文の条件式に戻る(増加値を実行)
continue;
}
// コンソールに出力
Console.WriteLine(i);
}
// 任意のキーを押してください
Console.WriteLine("Press any key...");
Console.ReadLine();
}
}
}
上の例をみれば、iの値が偶数の場合はコンソール出力せずに、繰り返しが実行します。
ここまでC#の制御文に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
- [C#] 15. インタフェース(interface)2019/07/10 00:06:17
- [C#] 14. 抽象クラス(abstract)と抽象メソッド(abstract)、そして仮想関数(virtual)2019/07/08 23:04:09
- [C#] 13. クラスの継承と再定義(override)する方法、overrideとnewの差異2019/07/08 22:55:00
- [C#] 12. Staticとアクセス修飾子、そしてカプセル化2019/07/07 23:12:30
- [C#] 11. インスタンスう生成(new)とメモリ割り当て(StackメモリとHeapメモリ)そしてヌル(null)2019/07/07 22:54:13
- [C#] 10. クラスを作成する方法(コンストラクタ、デストラクタ)2019/07/06 00:53:17
- [C#] 9. 関数(Method)とオーバーロード、再帰呼び出し2019/07/06 00:38:29
- [C#] 8. 配列とリスト2019/07/05 00:12:42
- [C#] 7. 制御文2019/07/05 00:05:30
- [C#] 6. 演算子2019/07/04 00:09:43
- [C#] 5. データタイプ変換(キャスト:Cast)とコメント(Comment)2019/07/04 00:01:12
- [C#] 4. データタイプとリテラル(literal)、 Nullable2019/07/02 23:58:43
- [C#] 3. プログラミングの始めと変数と定数を使う方法2019/07/02 23:46:49
- [C#] 2. Visual Studioをインストールする方法2019/07/01 23:58:20
- [C#] 1. C#とは?2019/07/01 23:32:22
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07