C#のstatement(ステートメント)とは?意味・種類・式との違いを初心者向けに徹底解説
はじめに
C#を学び始めると、文法の説明で「statement(ステートメント)」という言葉がよく出てきます。日本語では「文」と訳されることが多く、if文、for文、return文、using文などもstatementの一種です。
ただ、初心者にとっては「statementとは何か」「expression(式)と何が違うのか」「なぜセミコロンが必要なものと不要なものがあるのか」が分かりにくいポイントです。
C#におけるstatementは、簡単に言えば「プログラムの中で何らかの処理を実行する単位」です。変数を宣言する、値を代入する、条件によって処理を分ける、繰り返し処理を行う、メソッドから値を返すといった操作は、すべてstatementとして書かれます。
この記事では、C#のstatementの意味、種類、expressionとの違い、よく使う構文、初心者がつまずきやすいポイントをコード例つきでわかりやすく解説します。
1. C#のstatement(ステートメント)とは?
1-1. statementの意味と日本語での「文」の考え方
statementは、日本語では「文」と訳されます。英語のstatementには「述べること」「表明」「命令文」といった意味がありますが、プログラミングでは「コンピューターに実行させる処理を表した文」と考えると理解しやすいです。
たとえば、次のコードはC#のstatementです。
C#int age = 20;
Console.WriteLine(age);
1行目は変数ageを宣言して値を代入するstatementです。2行目はConsole.WriteLineメソッドを呼び出して、画面に値を表示するstatementです。
C#のプログラムは、このようなstatementを組み合わせて作られます。文章が単語や文で構成されるように、C#の処理もstatementという単位で構成されていると考えるとよいでしょう。
1-2. C#におけるstatementの役割
C#におけるstatementの役割は、プログラムの流れを作ることです。変数を用意する、条件を判定する、ループを回す、例外を処理する、処理を終了するなど、プログラムが実際に動くための指示をstatementとして記述します。
たとえば、次のコードを見てください。
C#int score = 80;
if (score >= 60)
{
Console.WriteLine("合格です");
}
この中には、複数のstatementが含まれています。int score = 80;は変数を宣言するstatement、ifは条件分岐を行うstatement、Console.WriteLine("合格です");はメソッドを呼び出すstatementです。
C#では、さまざまな種類のstatementが用意されており、公式ドキュメントでも宣言、式、選択、反復、ジャンプ、例外処理などの種類が整理されています。Microsoft Learn
1-3. statementは「処理の単位」として使われる
statementは「処理の単位」です。C#のコードを読むときは、「このstatementは何をしているのか」を1つずつ確認すると、プログラム全体の流れを理解しやすくなります。
たとえば、次のコードは3つのstatementで構成されています。
C#int price = 1000;
int tax = 100;
int total = price + tax;
1つ目のstatementで価格を用意し、2つ目のstatementで税額を用意し、3つ目のstatementで合計金額を計算しています。
このように、statementはプログラムの動作を順番に組み立てるための基本単位です。初心者のうちは、コードを「行」として見るのではなく、「どのstatementが、どんな処理をしているのか」と考えると理解しやすくなります。
1-4. 初心者が混同しやすいstatement・式・命令の違い
C#では、statementとexpression(式)を区別することが大切です。
expressionは、計算や評価によって値を生み出すものです。たとえば、1 + 2、age >= 20、name、GetPrice()などはexpressionです。
一方、statementは処理を実行するための文です。たとえば、int age = 20;、Console.WriteLine("Hello");、return value;などはstatementです。
「命令」という言葉は、初心者向けの説明でstatementに近い意味で使われることがあります。ただし、C#の文法用語としては「statement」や「expression」のほうが正確です。
たとえば、次の1 + 2はexpressionですが、それだけでは通常のstatementとしては書けません。
C#1 + 2; // エラーになる
一方、代入やメソッド呼び出しは、expressionでありながらstatementとして書けます。
C#x = 10;
Console.WriteLine(x);
この違いを理解すると、C#のエラー原因を見つけやすくなります。
2. C#のstatementを理解するための基本構文
2-1. セミコロンで終わるstatement
C#では、多くのstatementがセミコロン;で終わります。代表的なのは、変数宣言、代入、メソッド呼び出し、returnなどです。
C#int count = 10;
count = count + 1;
Console.WriteLine(count);
return;
セミコロンは、statementの終わりを示す記号です。日本語の句点「。」に近い役割だと考えるとわかりやすいでしょう。
たとえば、次のようにセミコロンを忘れると、コンパイルエラーになります。
C#int count = 10
Console.WriteLine(count);
C#コンパイラは、int count = 10のstatementがどこで終わるのか判断できないため、エラーを出します。
2-2. 波括弧{}で囲むブロックstatement
C#では、複数のstatementを{}で囲んだものをブロックとして扱います。ブロックは、複数のstatementを1つのまとまりとして扱うために使われます。
C#{
int x = 10;
int y = 20;
Console.WriteLine(x + y);
}
ブロックは、if文、for文、while文、try-catch文、メソッド本体などでよく使われます。
C#if (score >= 60)
{
Console.WriteLine("合格です");
Console.WriteLine("おめでとうございます");
}
この例では、score >= 60がtrueの場合、ブロック内の2つのstatementが順番に実行されます。
2-3. 複数のstatementを順番に実行する流れ
C#のstatementは、基本的に上から下へ順番に実行されます。
C#Console.WriteLine("開始");
int number = 5;
Console.WriteLine(number);
Console.WriteLine("終了");
このコードは、次の順番で実行されます。
開始
5
終了
ただし、if、for、while、return、break、continue、throwなどのstatementを使うと、実行の流れが変わります。
C#Console.WriteLine("開始");
if (isError)
{
Console.WriteLine("エラーが発生しました");
return;
}
Console.WriteLine("正常終了");
isErrorがtrueの場合、returnによってメソッドの処理が終了するため、最後のConsole.WriteLine("正常終了");は実行されません。
2-4. statementを書ける場所と書けない場所
statementは、どこにでも自由に書けるわけではありません。基本的には、メソッド、コンストラクター、プロパティのアクセサ、ラムダ式のブロックなど、処理を書く場所に記述します。
たとえば、次のようにクラスの直下に代入statementを書くことはできません。
C#class Sample
{
int x;
x = 10; // エラー
}
クラスの直下には、フィールド、メソッド、プロパティなどのメンバーを宣言できますが、通常の代入statementはメソッドなどの内部に書く必要があります。
正しくは次のようにします。
C#class Sample
{
int x;
void SetValue()
{
x = 10;
}
}
C#では「この場所にはstatementを書けるのか」「ここは宣言を書く場所なのか」を意識することが重要です。
3. C#のstatementとexpression(式)の違い
3-1. expressionは値を返すもの
expressionは、評価されると値になるものです。C#のもっとも単純なexpressionには、数値リテラルや変数名などがあり、それらを演算子で組み合わせて複雑なexpressionを作れます。Microsoft Learn
たとえば、次のものはexpressionです。
C#10
x
x + 5
age >= 20
GetName()
x + 5は計算結果の値を返します。age >= 20はtrueまたはfalseを返します。GetName()はメソッドの戻り値を返します。
expressionは「値を作るもの」と考えるとわかりやすいです。
C#int total = price + tax;
この例では、price + taxがexpressionです。計算された値がtotalに代入されます。
3-2. statementは処理を実行するもの
statementは、値を作ることよりも「処理を実行すること」に注目した文です。
C#int total = price + tax;
Console.WriteLine(total);
if (total >= 1000)
{
Console.WriteLine("1000円以上です");
}
int total = price + tax;は変数を宣言する処理です。Console.WriteLine(total);は画面に出力する処理です。ifは条件によって実行する処理を分けるstatementです。
expressionは値を返すもの、statementは処理を進めるもの、という違いを押さえておくと、C#の文法が整理しやすくなります。
3-3. expression statementとは何か
expression statementとは、expressionをstatementとして実行するものです。C#では、すべてのexpressionをstatementとして書けるわけではありませんが、代入、メソッド呼び出し、インクリメント、デクリメントなどはexpression statementとして書けます。
C#x = 10;
Console.WriteLine(x);
x++;
これらは、それぞれexpressionでもありますが、セミコロンを付けることでstatementとして実行されています。
一方、次のような単なる計算式は、statementとして書けません。
C#x + 10; // エラー
x + 10は値を作りますが、その値をどこにも使っていないため、C#では有効なstatementとして認められません。
3-4. 変数代入・メソッド呼び出しで違いを理解する
代入は、statementとexpressionの関係を理解するのに便利な例です。
C#int x;
x = 10;
x = 10は代入expressionです。評価すると代入された値を表します。しかし、実際のコードではx = 10;のようにセミコロンを付けてstatementとして使うことが多いです。
メソッド呼び出しも同じです。
C#Console.WriteLine("Hello");
Console.WriteLine("Hello")はメソッド呼び出しexpressionです。それをセミコロンで終えることで、画面に文字列を表示するstatementになります。
戻り値のあるメソッドの場合は、expressionとして値を受け取ることもできます。
C#string name = GetName();
この例では、GetName()がexpressionとして値を返し、その値を使って変数nameを初期化しています。
3-5. statementとexpressionの違いをコード例で比較
statementとexpressionの違いを、コードで比較してみましょう。
C#int a = 10;
int b = 20;
int sum = a + b;
Console.WriteLine(sum);
このコードでは、a + bがexpressionです。a + bは評価されると30という値になります。
一方、次の行全体はstatementです。
C#int sum = a + b;
これは、変数sumを宣言し、a + bの結果を代入する処理を表しています。
さらに、次の行もstatementです。
C#Console.WriteLine(sum);
これは、sumの値を画面に表示する処理を実行します。
つまり、expressionはstatementの一部として使われることが多く、statementはexpressionを含みながら処理全体を表すことがあります。
4. C#でよく使うstatementの種類
4-1. 宣言statement:変数や定数を宣言する
宣言statementは、ローカル変数、ローカル定数、ローカル参照変数などを宣言するためのstatementです。MicrosoftのC#リファレンスでも、declaration statementは新しいローカル変数やローカル定数などを宣言するものと説明されています。Microsoft Learn
C#int age = 20;
string name = "Taro";
const double TaxRate = 0.1;
変数を使う前には、基本的に宣言が必要です。宣言statementによって、変数名、型、初期値などを指定します。
C#int count;
count = 1;
このように、宣言と代入を分けて書くこともできます。
4-2. 式statement:代入やメソッド呼び出しを行う
式statementは、expressionをstatementとして実行するものです。よく使われるのは、代入、メソッド呼び出し、インクリメント、デクリメントです。
C#count = 10;
Console.WriteLine(count);
count++;
count--;
式statementは、日常的なC#コードで非常によく使われます。特に、メソッド呼び出しは多くの場面で登場します。
C#SaveData();
SendEmail();
UpdateScreen();
これらはすべて、何らかの処理を実行するstatementです。
4-3. 選択statement:if・switchで条件分岐する
選択statementは、条件によって実行する処理を切り替えるstatementです。代表的なものにifとswitchがあります。
C#if (score >= 60)
{
Console.WriteLine("合格");
}
else
{
Console.WriteLine("不合格");
}
ifstatementでは、条件式がtrueの場合に特定の処理を実行し、falseの場合には別の処理を実行できます。
switchstatementは、値に応じて処理を分岐したいときに便利です。
C#switch (day)
{
case "Mon":
Console.WriteLine("月曜日");
break;
case "Tue":
Console.WriteLine("火曜日");
break;
default:
Console.WriteLine("その他の曜日");
break;
}
条件分岐は、ユーザー入力、計算結果、状態によって処理を変えたいときに欠かせません。
4-4. 繰り返しstatement:for・foreach・while・doで反復する
繰り返しstatementは、statementまたはstatementブロックを繰り返し実行するために使います。C#の反復statementには、for、foreach、while、doがあります。公式リファレンスでは、forは条件がtrueの間本体を実行し、foreachはコレクションの要素ごとに本体を実行し、doは1回以上、whileは0回以上条件付きで本体を実行すると説明されています。Microsoft Learn
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
foreachは、配列やリストなどの要素を順番に処理するときに便利です。
C#foreach (string name in names)
{
Console.WriteLine(name);
}
whileは、条件がtrueの間処理を繰り返します。
C#while (count < 10)
{
count++;
}
doは、条件判定の前に必ず1回は本体を実行します。
C#do
{
count++;
}
while (count < 10);
4-5. ジャンプstatement:return・break・continue・gotoで処理を移動する
ジャンプstatementは、実行の流れを別の場所へ移すstatementです。C#のjump statementには、break、continue、return、gotoがあります。公式リファレンスでは、jump statementは現在の場所から別のstatementへ制御を移すものと説明されています。Microsoft Learn
returnは、メソッドの処理を終了し、必要に応じて値を返します。
C#return result;
breakは、ループやswitchを抜けるときに使います。
C#for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}
}
continueは、ループの現在の回をスキップして、次の繰り返しへ進みます。
C#for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
{
continue;
}
Console.WriteLine(i);
}
gotoもジャンプstatementですが、コードの流れが追いにくくなりやすいため、初心者は基本的に多用しないほうがよいでしょう。
4-6. 例外処理statement:try・catch・finally・throwを使う
例外処理statementは、エラーが発生する可能性のある処理を安全に扱うために使います。
C#try
{
int number = int.Parse(text);
Console.WriteLine(number);
}
catch (FormatException)
{
Console.WriteLine("数値に変換できませんでした");
}
finally
{
Console.WriteLine("処理を終了します");
}
tryブロックには、例外が発生する可能性のあるstatementを書きます。catchブロックには、例外が発生した場合の処理を書きます。finallyブロックには、例外の有無に関係なく最後に実行したい処理を書きます。
throwは、例外を発生させるためのstatementです。
C#throw new InvalidOperationException("不正な操作です");
例外処理statementを使うことで、予期しないエラーが発生しても、プログラム全体が急に停止しないように制御できます。
4-7. リソース管理statement:usingで後処理を自動化する
usingstatementは、ファイル、データベース接続、ネットワーク接続など、使い終わったあとに解放が必要なリソースを安全に扱うために使います。公式リファレンスでは、usingstatementはブロック内で例外が発生した場合でも、破棄可能なインスタンスが破棄されることを保証すると説明されています。Microsoft Learn
C#using (var reader = new StreamReader("sample.txt"))
{
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
この例では、usingブロックを抜けると、readerの後処理が自動的に行われます。
C#には、using宣言という書き方もあります。
C#using var reader = new StreamReader("sample.txt");
string text = reader.ReadToEnd();
Console.WriteLine(text);
using宣言では、スコープを抜けるタイミングで自動的にリソースが破棄されます。
4-8. その他のstatement:lock・checked・unchecked・yieldなど
C#には、ほかにもさまざまなstatementがあります。
lockstatementは、複数のスレッドから同時にアクセスされる処理を安全に扱うために使います。
C#lock (syncObject)
{
count++;
}
checkedとuncheckedは、整数演算のオーバーフローをチェックするかどうかを制御します。
C#checked
{
int result = int.MaxValue + 1;
}
yieldは、イテレーターを作るときに使います。
C#IEnumerable<int> GetNumbers()
{
yield return 1;
yield return 2;
yield return 3;
}
これらは初心者が最初にすべて覚える必要はありませんが、C#には用途に応じた多くのstatementがあることを知っておくと、学習が進んだときに理解しやすくなります。
5. C#のstatementをコード例で理解する
5-1. 変数宣言statementの例
変数宣言statementは、値を保存するための変数を作るstatementです。
C#int age = 25;
string name = "Yamada";
bool isStudent = true;
この例では、age、name、isStudentという3つの変数を宣言しています。
型を明示する代わりに、varを使うこともできます。
C#var age = 25;
var name = "Yamada";
var isStudent = true;
varを使うと、右辺の値からコンパイラが型を推論します。ただし、初心者のうちは型を明示したほうが、変数にどのような値が入るのか理解しやすい場合があります。
5-2. if statementの例
if statementは、条件によって処理を分けるstatementです。
C#int score = 75;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
score >= 60はexpressionです。このexpressionがtrueなら最初のブロックが実行され、falseならelseのブロックが実行されます。
複数の条件を扱いたい場合は、else ifを使います。
C#if (score >= 80)
{
Console.WriteLine("優秀です");
}
else if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
5-3. for statementの例
for statementは、回数が決まっている繰り返し処理によく使われます。
C#for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}
このコードは、1から5までの数字を順番に表示します。
for statementは、主に次の3つの要素で構成されます。
C#for (初期化; 条件; 更新)
{
繰り返す処理
}
実際の例では、int i = 1が初期化、i <= 5が条件、i++が更新です。
5-4. return statementの例
return statementは、メソッドの処理を終了し、必要に応じて値を返すstatementです。
C#int Add(int a, int b)
{
return a + b;
}
このメソッドは、a + bの結果を呼び出し元に返します。
戻り値がないvoidメソッドでも、処理を途中で終了するためにreturnを使えます。
C#void PrintName(string name)
{
if (string.IsNullOrEmpty(name))
{
return;
}
Console.WriteLine(name);
}
この例では、nameが空の場合、Console.WriteLine(name);は実行されません。
5-5. try-catch statementの例
try-catch statementは、例外が発生する可能性のある処理を扱うときに使います。
C#string text = "abc";
try
{
int number = int.Parse(text);
Console.WriteLine(number);
}
catch (FormatException)
{
Console.WriteLine("数値ではありません");
}
int.Parse(text)は、文字列を整数に変換する処理です。しかし、"abc"は整数に変換できないため、FormatExceptionが発生します。その例外をcatchで受け取り、エラーメッセージを表示しています。
例外処理を書くことで、エラーが起きたときの動作を自分で決められます。
5-6. using statementの例
using statementは、使い終わったあとに破棄が必要なオブジェクトを安全に扱うために使います。
C#using (var writer = new StreamWriter("log.txt"))
{
writer.WriteLine("ログを出力しました");
}
このコードでは、StreamWriterを使ってファイルに文字列を書き込んでいます。usingブロックを抜けると、writerの後処理が自動的に行われます。
手動で後処理を書き忘れると、ファイルが正しく閉じられないなどの問題につながることがあります。usingstatementを使うと、そのようなミスを減らせます。
5-7. 複数のstatementを組み合わせた実践例
実際のC#プログラムでは、複数のstatementを組み合わせて処理を作ります。
C#int[] scores = { 80, 55, 90, 40, 70 };
foreach (int score in scores)
{
if (score < 60)
{
Console.WriteLine($"{score}点: 不合格");
continue;
}
Console.WriteLine($"{score}点: 合格");
}
この例では、次のstatementが組み合わされています。
int[] scores = { 80, 55, 90, 40, 70 };で配列を宣言しています。foreachで配列の要素を順番に処理しています。ifで点数が60点未満かどうかを判定しています。continueで現在の繰り返しをスキップしています。Console.WriteLineで結果を出力しています。
このように、C#のプログラムは1つのstatementだけで完結するのではなく、複数のstatementを組み合わせて目的の処理を実現します。
6. 初心者がつまずきやすいstatementのポイント
6-1. セミコロンの付け忘れ
初心者がよく遭遇するエラーの1つが、セミコロン;の付け忘れです。
C#int x = 10
Console.WriteLine(x);
このコードでは、1行目の最後にセミコロンがないためエラーになります。
正しくは次のように書きます。
C#int x = 10;
Console.WriteLine(x);
C#では、変数宣言statement、代入statement、メソッド呼び出しstatementなど、多くのstatementの最後にセミコロンが必要です。
ただし、if、for、while、try、usingなど、ブロックを伴うstatementでは、ブロックの直後にセミコロンを付けないことが多いです。
C#if (x > 0)
{
Console.WriteLine("正の数です");
}
6-2. ブロック{}の範囲ミス
{}の範囲を間違えると、意図しないstatementがif文やfor文の外に出てしまうことがあります。
C#if (isLogin)
{
Console.WriteLine("ログイン中です");
}
Console.WriteLine("管理画面を表示します");
この例では、2つ目のConsole.WriteLineはif文の外にあるため、isLoginがfalseでも実行されます。
両方を条件付きで実行したい場合は、同じブロック内に入れる必要があります。
C#if (isLogin)
{
Console.WriteLine("ログイン中です");
Console.WriteLine("管理画面を表示します");
}
ブロックの範囲は、プログラムの動作に大きく影響します。
6-3. if文やfor文の中で実行されるstatementの誤解
C#では、if文やfor文の直後にブロックを書かない場合、対象になるのは基本的に直後の1つのstatementだけです。
C#if (isLogin)
Console.WriteLine("ログイン中です");
Console.WriteLine("管理画面を表示します");
インデントを見ると2つのstatementがif文の中にあるように見えますが、実際にはif文の対象は直後のConsole.WriteLine("ログイン中です");だけです。
正しくは、ブロックを使って次のように書きます。
C#if (isLogin)
{
Console.WriteLine("ログイン中です");
Console.WriteLine("管理画面を表示します");
}
初心者のうちは、if文やfor文では必ず{}を書く習慣をつけると安全です。
6-4. return後のstatementが実行されない理由
return statementが実行されると、そのメソッドの処理は終了します。そのため、returnの後に書かれたstatementは実行されません。
C#int GetNumber()
{
return 10;
Console.WriteLine("ここは実行されません");
}
このコードでは、return 10;でメソッドが終了するため、その後のConsole.WriteLineは到達できないstatementになります。
実際のコードでは、条件によって早めに処理を終了したいときにreturnを使うことがあります。
C#void PrintMessage(string message)
{
if (string.IsNullOrEmpty(message))
{
return;
}
Console.WriteLine(message);
}
この場合、messageが空なら何も表示せずにメソッドを終了します。
6-5. expressionをstatementとして書ける場合・書けない場合
C#では、すべてのexpressionをstatementとして書けるわけではありません。
次のような代入やメソッド呼び出しはstatementとして書けます。
C#x = 10;
Console.WriteLine(x);
x++;
しかし、単なる計算式はstatementとして書けません。
C#x + 10; // エラー
x + 10は値を作るexpressionですが、その値を使っていないため、statementとしては意味がありません。
正しくは、計算結果を変数に代入するなどして使います。
C#int result = x + 10;
この違いを理解すると、「式としては正しそうなのに、なぜエラーになるのか」が分かりやすくなります。
6-6. コンパイルエラーからstatementの間違いを見つける方法
statementの間違いは、コンパイルエラーとして表示されることが多いです。エラーが出たら、まず次の点を確認しましょう。
セミコロンが抜けていないか確認します。{}の数と範囲が正しいか確認します。statementを書けない場所に書いていないか確認します。if文やfor文の対象範囲が意図どおりか確認します。return後に実行されないstatementを書いていないか確認します。
たとえば、次のようなエラーがあるとします。
C#class Sample
{
int x = 10;
x = 20;
}
この場合、x = 20;はクラスの直下に書かれているためエラーになります。代入statementはメソッドなどの中に書く必要があります。
C#class Sample
{
int x = 10;
void Update()
{
x = 20;
}
}
エラーメッセージだけを見ると難しく感じることがありますが、「このstatementは正しい場所にあるか」「文として完結しているか」を確認すると、原因を見つけやすくなります。
7. C#のstatementを正しく使うための書き方のコツ
7-1. 1つのstatementに1つの役割を持たせる
読みやすいコードを書くには、1つのstatementに多くの処理を詰め込みすぎないことが大切です。
たとえば、次のコードは一度に多くのことをしているため、初心者には読みにくいかもしれません。
C#Console.WriteLine((price + tax) * discountRate);
処理を分けると、意味が分かりやすくなります。
C#int subtotal = price + tax;
int total = (int)(subtotal * discountRate);
Console.WriteLine(total);
statementを分けることで、途中の値を確認しやすくなり、デバッグもしやすくなります。
7-2. ブロック{}を省略しすぎない
C#では、if文やfor文の本体が1つのstatementだけなら、{}を省略できます。
C#if (isActive)
Console.WriteLine("有効です");
しかし、初心者のうちは{}を省略しないほうが安全です。
C#if (isActive)
{
Console.WriteLine("有効です");
}
あとからstatementを追加したときに、意図しない動作になるのを防げます。
C#if (isActive)
Console.WriteLine("有効です");
Console.WriteLine("処理を続行します");
このようなミスを避けるためにも、ブロックを明示する書き方がおすすめです。
7-3. ネストを深くしすぎない
if文やfor文を何重にも入れ子にすると、コードが読みにくくなります。
C#if (user != null)
{
if (user.IsActive)
{
if (user.Age >= 20)
{
Console.WriteLine("利用可能です");
}
}
}
このような場合は、早めにreturnする書き方にすると見通しがよくなることがあります。
C#if (user == null)
{
return;
}
if (!user.IsActive)
{
return;
}
if (user.Age < 20)
{
return;
}
Console.WriteLine("利用可能です");
ネストを浅くすると、statementの流れを上から順番に追いやすくなります。
7-4. 読みやすい順序でstatementを並べる
statementは、処理の流れが自然に読める順序で並べることが大切です。
たとえば、次のような順序にすると読みやすくなります。
まず入力値を受け取ります。次に入力値を検証します。その後、計算や変換を行います。最後に結果を表示または返します。
C#string input = Console.ReadLine();
if (string.IsNullOrEmpty(input))
{
Console.WriteLine("入力が空です");
return;
}
int length = input.Length;
Console.WriteLine($"文字数は{length}です");
処理の順番が整理されていると、あとからコードを読む人にも意図が伝わりやすくなります。
7-5. コメントを使って処理の意図を補足する
statementの内容だけでは意図が伝わりにくい場合は、コメントを使って補足します。
C#// 60点以上なら合格とする
if (score >= 60)
{
Console.WriteLine("合格です");
}
ただし、すべてのstatementにコメントを書く必要はありません。コードを見れば分かる内容をそのままコメントにすると、かえって読みづらくなります。
C#// countに1を足す
count++;
このようなコメントは不要な場合が多いです。
コメントでは「何をしているか」よりも「なぜそうしているか」を説明すると役立ちます。
C#// 初回ログイン時のみチュートリアルを表示する
if (isFirstLogin)
{
ShowTutorial();
}
7-6. Visual Studioやエディタの警告を活用する
C#を書くときは、Visual Studio、Visual Studio Code、Riderなどのエディタを活用すると、statementの間違いに気づきやすくなります。
セミコロンの不足、到達できないstatement、未使用の変数、型の不一致、不要なusingなどは、エディタが警告やエラーとして表示してくれることがあります。
特に初心者のうちは、赤い波線や警告アイコンを無視せず、表示されたメッセージを読む習慣をつけることが大切です。エラーメッセージには、statementのどこに問題があるかを見つけるヒントが含まれています。
また、コードの自動整形機能を使うと、{}の範囲やインデントのズレに気づきやすくなります。見た目が整ったコードは、statementの関係も理解しやすくなります。
8. C#のstatementに関するよくある質問
8-1. C#のstatementと文は同じ意味ですか?
基本的には同じ意味と考えて問題ありません。C#のstatementは、日本語では「文」と訳されることが多いです。
たとえば、if statementは「if文」、for statementは「for文」、return statementは「return文」と呼ばれます。
ただし、日本語の「文」は広い意味で使われることがあるため、正確に理解したい場合は、C#の文法用語としてstatementを意識するとよいでしょう。
8-2. statementと命令は何が違いますか?
初心者向けの説明では、statementを「命令」と表現することがあります。たしかに、statementはコンピューターに処理を実行させるものなので、命令に近いイメージです。
ただし、C#の文法上は「statement」という用語のほうが正確です。statementには、変数宣言、条件分岐、繰り返し、例外処理、returnなど、さまざまな種類があります。
「命令」は感覚的な説明、「statement」は文法上の正式な考え方と理解するとよいでしょう。
8-3. すべてのstatementにセミコロンは必要ですか?
すべてのstatementにセミコロンが必要なわけではありません。
変数宣言、代入、メソッド呼び出し、returnなどのstatementでは、基本的にセミコロンが必要です。
C#int x = 10;
x = 20;
Console.WriteLine(x);
return;
一方、if文、for文、while文、try-catch文など、ブロックを伴うstatementでは、ブロックの直後にセミコロンを書かないことが一般的です。
C#if (x > 0)
{
Console.WriteLine("正の数です");
}
ただし、do-whileのように最後にセミコロンが必要なものもあります。
C#do
{
x++;
}
while (x < 10);
statementの種類によってセミコロンの必要性が変わるため、代表的な構文を1つずつ覚えていくことが大切です。
8-4. ifやforもstatementですか?
はい、ifやforもstatementです。
ifは選択statement、forは繰り返しstatementに分類されます。if statementは条件によって実行する処理を分け、for statementは指定した条件に従って処理を繰り返します。
C#if (score >= 60)
{
Console.WriteLine("合格");
}
for (int i = 0; i < 3; i++)
{
Console.WriteLine(i);
}
このように、C#では単純な代入やメソッド呼び出しだけでなく、条件分岐や繰り返しもstatementとして扱われます。
8-5. expressionだけではプログラムは書けませんか?
expressionだけでは、通常のC#プログラムとして処理の流れを作ることはできません。
expressionは値を作るものですが、プログラムではその値を変数に代入したり、条件として使ったり、メソッドに渡したり、結果を返したりする必要があります。そのため、statementの中でexpressionを使うことが多いです。
C#int total = price + tax;
if (total >= 1000)
{
Console.WriteLine("1000円以上です");
}
この例では、price + taxやtotal >= 1000がexpressionです。それらを変数宣言statementやif statementの中で使っています。
expressionとstatementは対立するものではなく、組み合わせて使うものです。
8-6. statementを理解するとC#学習で何が楽になりますか?
statementを理解すると、C#のコードを読む力が大きく上がります。
どこからどこまでが1つの処理なのか、どのstatementがどの順番で実行されるのか、if文やfor文の中で何が実行されるのか、returnやbreakで処理の流れがどう変わるのかを理解しやすくなります。
また、コンパイルエラーの原因も見つけやすくなります。セミコロンの付け忘れ、ブロックの範囲ミス、statementを書けない場所に書いているミスなどは、statementの考え方を知っていると発見しやすくなります。
C#の基礎文法を学ぶうえで、statementの理解は非常に重要です。
まとめ
C#のstatement(ステートメント)とは、プログラムの中で処理を実行するための文です。日本語では「文」と呼ばれ、変数宣言、代入、メソッド呼び出し、if文、for文、return文、try-catch文、using文など、さまざまな種類があります。
statementは「処理の単位」であり、C#のプログラムは複数のstatementを組み合わせて作られます。基本的には上から下へ順番に実行されますが、if、for、return、break、continue、throwなどによって処理の流れが変わります。
また、statementとexpressionの違いも重要です。expressionは評価されると値になるもの、statementは処理を実行するものです。price + taxのような式はexpressionであり、int total = price + tax;のように処理として書いたものがstatementです。
初心者が特につまずきやすいのは、セミコロンの付け忘れ、{}の範囲ミス、if文やfor文の対象範囲の誤解、return後のstatementが実行されないこと、expressionをstatementとして書ける場合と書けない場合の違いです。
C#のstatementを理解すると、コードの読み書きがしやすくなり、エラーの原因も見つけやすくなります。まずは、変数宣言statement、式statement、if statement、for statement、return statementなど、よく使うものから順番に慣れていきましょう。

