2021年11月14日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説! total 860 count

複文{}: 1つしか文を書けない場所に複数の文を書きたい

Written By: 川俣 晶連絡先

この章のテーマ §

 1つしか文を書けない場所に複数の文を書くための複文(ブロック/Blocks)の機能を学びます。シンプルですが、ソースコードを高機能かつ分かりやすくする切り札です。

前提知識 §

Console.Writeメソッド, for文, if文, 変数の基礎

解説 §

 C#の文法には、「一つの文だけを相手に機能する文」が多くあります。

 例えば、if文は後続する1つの文だけを条件によって実行します。

 しかし、1つの文だけという制約はあまり嬉しいものではありません。

 そういう場合には、複文(ブロック)を使います。

 複文は複数の文を波括弧{}で囲うことで、擬似的に全体を1つの文と見なす機能です。

 ですから、A; B;というコードは2つの文からなりなっていますが、波括弧で書こうと{A;B}となって、これは全体が1つの文と見なされます。

 サンプルソースを見ると、

if (i == 0) Console.WriteLine("A"); Console.WriteLine("B");

 の場合、iが0の時に実行するのはConsole.WriteLine("A");だけです。Console.WriteLine("B");はif文とは関係なくいつも実行されます。

 しかし、

if (i == 0) { Console.WriteLine("C"); Console.WriteLine("D"); }

 の場合、全体が囲われているので、{ Console.WriteLine("C"); Console.WriteLine("D"); }全体がif文の影響下にあります。ですから、iが0以外なら1つも実行されません。

罠の数々 §

  • 複文には変数のスコープを区切るという重要な機能がもう1つある。変数の寿命を制御する重要な機能なので、スコープを学んだときに思い出してみよう。
  • 複文はネストできる。つまり複文の中に複文があってもよい。しかし意味がない複文の階層はソースコードが読みにくくなるだけなのでやめておこう。しかし意味があったらいくらネストしても良い

参考リンク §

ステートメント (Blocks参照)

サンプルソース: blocks §

for (int i = 0; i < 2; i++)

{

    Console.WriteLine($"i={i}の場合");

    if (i == 0) Console.WriteLine("A"); Console.WriteLine("B");

    if (i == 0) { Console.WriteLine("C"); Console.WriteLine("D"); }

}

実行結果 §

i=0の場合

A

B

C

D

i=1の場合

B

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 上記サンプルソースにはif文の他にもう一箇所複文を使っている箇所がある。for文にも複文が使われている。理由は何だろうか。

[[解答]]

単行本情報