ショートカット
ファシリテーター × あり方
コーディングの向こう側
Hello, ANOTHER world!
オブジェクト指向のはなし
プログラミングのはなし
C言語実力診断クイズ
eSkillBooks
プログラミングのはなし

いつでもブロック化する

前のトピックでは return 文に括弧をつけるなと言ったばかりですが、こんどは括弧をつけましょうという話です。次の2つのプログラムを見比べてみてください。

SAMPLE
CODE
if ( x == 0 )
    if ( y == 0 ) {
        x = 1;
        y = 1;
    }
else
    z = 1;
if ( x == 0 ) {
    if ( y == 0 ) {
        x = 1;
        y = 1;
    }
}
else {
    z = 1;
}

2つのプログラムの違いがわかりましたか?ほとんどの C言語の解説書に書いてあることなので詳しくは話しませんが、最も近くにある if と else が対応付けられます。左上のプログラムでは、else は内側の if に対応付けられるのです。これがプログラマの意図通りでないことは、インデントを見れば明らかです。この手の誤りは非常に発見しづらいので、常に右上のプログラムのように書くような習慣をつけましょう。

以前に話した通り、if, for, while などのあとの括弧の中身はローカルスコープになります。そのため次の例のようにローカルな変数を使うことができます(変数 i がローカルです)。括弧をつけるだけで、2つもの恩恵を授かることができるなんて、見逃す手はありません!

SAMPLE
CODE
if ( x == 0 ) {
    int i;
    for ( i=0; i<10; i++ ) {
        cout << i << endl;
    }
}
else {
    z = 1;
}

実践しやすいように、ガイドラインを導入しましょう。

ガイドライン:
if, for, while のあとには必ず括弧をつけてブロック化する。

(「プログラミングのはなし」は1998年1月から1999年1月にかけて作成されたコンテンツです。)