演習 - if ステートメントからコード ブロックを削除する
ソフトウェア開発者は、読みやすさを犠牲にせずに、キーストロークと見た目の空間が少なくなるようなコードを記述できることを好みます。 開発プロセスで "少ないほどよい" という語句を適用するのは、それにより、コードがより読みやすく、理解しやすくなる場合のみです。
コード ブロックに、1 行のコードしか必要ない場合は、中かっこで正式なコード ブロックを定義する必要がない可能性があります。 技術的にはコードを複数の行に分割する必要もありませんが、ステートメントを 1 行に結合すると、コードが読みにくくなるおそれがあります。
上記のように中かっこを削除することは、スタイル上の変更であり、コードの機能には影響しないはずです。 ただし、変更がコードの読み取り可能な程度に悪影響を及ぼさないよう、確認しながら手順を行う必要があります。 中かっこと空白文字を削除した場合の影響を評価し、変更によってコードが読みにくくなる場合は、元のコードに戻すことができます。
コード ブロックを使用する if ステートメントの例を作成する
Visual Studio Code で空の Program.cs ファイルが開かれていることを確認します。
必要であれば、Visual Studio Code を開き、次の手順のようにしてエディターで Program.cs ファイルを準備します。
[ファイル] メニューの [フォルダーを開く] を選択します。
[フォルダーを開く] ダイアログを使って CsharpProjects フォルダーに移動して開きます。
Visual Studio Code のエクスプローラー パネルで、Program.cs を選びます。
Visual Studio Code の [選択] メニューで、[すべて選択] を選択してから Delete キーを押します。
Visual Studio Code エディターに次のコードを入力します。
bool flag = true; if (flag) { Console.WriteLine(flag); }
コード ファイルを保存してから、Visual Studio Code を使ってコードを実行してください。
[ターミナル] のコマンド プロンプトから「
dotnet run
」と入力して、コードを実行してください。次の出力が表示されることを確認します。
True
コードは適切な開始点を表しますが、1 行のコードを含むコード ブロックがあります。 この場合、コード ブロックを定義する必要はあるでしょうか?
中かっこを削除する
上記のコードは、flag
が true
の場合にコード ブロックを実行します。 このコード ブロックには 1 行のコードが含まれているので、中かっこを削除することもできます。
Visual Studio Code エディターで次のようにコードを更新してください。
bool flag = true; if (flag) Console.WriteLine(flag);
Note
中かっこを削除しても、
Console.WriteLine(flag);
がif
ステートメントのコード ブロックであるという事実は変わりません。コード ファイルを保存してから、Visual Studio Code を使ってコードを実行してください。
出力が以前と同じであることに注目してください。
次のような出力が表示されるはずです。
True
ただし、コードは 2 行減っています。 最も重要なのは、
if
の下のコード行がインデントされている場合でも、コードを簡単に読み取れるということです。
単一行形式の if ステートメントの読みやすさを調べる
この手順では、コードの読みやすさが悪影響を受けることがあるケースを見てみましょう。
if
ステートメントと Console.WriteLine()
へのメソッドの呼び出しはどちらも短いため、1 行にまとめたくなるかもしれません。 結局のところ、if
ステートメントの C# 構文を使用すると、この方法でステートメントを結合できます。
Visual Studio Code エディターで次のようにコードを更新してください。
bool flag = true; if (flag) Console.WriteLine(flag);
コード ファイルを保存してから、Visual Studio Code を使ってコードを実行してください。
出力が同じであることに注目してください。
少し時間をかけて、コードの読みやすさをよく考えてみてください。
前述の 2 つのコード サンプルが、より大きなコード セクション内に入れ子になっているとします。 (手順 4 で行ったように) コード ステートメントを組み合わせると、読みづらくなる場合があります。
単一ステートメント コード ブロックを含む
if
ステートメントを実装する場合、次の規則を考慮することを Microsoft はお勧めします。- 単一行形式を使用しないでください (例: if (flag) Console.WriteLine(flag);
- 中かっこの使用は常に受け入れられ、if/else if/.../else 複合ステートメントのブロックで中かっこが使用される場合、または 1 つのステートメント本文が複数行にまたがる場合は必須です。
- 中かっこは、if/else if/.../else 複合ステートメントに関連付けられているすべてのブロックの本文が 1 行に配置されている場合にのみ省略できます。
より大きな if-elseif-else コンストラクトの読みやすさへの影響を調べるため、次のようにコードを更新してください。
string name = "steve"; if (name == "bob") Console.WriteLine("Found Bob"); else if (name == "steve") Console.WriteLine("Found Steve"); else Console.WriteLine("Found Chuck");
コード ファイルを保存してから、Visual Studio Code を使ってコードを実行してください。
コードを実行すると、次の出力が生成されます。
Found Steve
コードは実行されますが、これらのコード行は間隔がなく読みにくいです。 コードの書式を修正して、
if
、else if
、else
の各ステートメントの後に改行を挿入してもかまいません。実行したコードを次のコードと比較してください。
string name = "steve"; if (name == "bob") Console.WriteLine("Found Bob"); else if (name == "steve") Console.WriteLine("Found Steve"); else Console.WriteLine("Found Chuck");
2 番目のコード サンプルを読み取る方がどれだけ簡単であるかに注目してください。
要点
if
ステートメント コード ブロックと読みやすさについて、覚えておくべき重要な点がいくつかあります。
if-elseif-else
ステートメントのコード ブロック内に 1 行のコードしか表示されていない場合は、コード ブロックと空白の中かっこを削除できます。 Microsoft では、if-elseif-else
ステートメントのすべてのコード ブロックに対して中かっこを一貫して使用することをお勧めします (一貫して使用するか、削除します)。- コードブロックの中かっこを削除するのは、コードが読みやすくなる場合のみです。 中かっこは常に含めることができます。
- コードが読みやすくなる場合にのみ、改行を削除します。 Microsoft では、各ステートメントを独自のコード行に配置すると、コードが読みやすくなると提案しています。