プログラミング作法
複数の要素をコンマなどで区切りながら列挙するような場合、コンマ(など)の扱いとして、次の2通りがある。
ターミネータ
セパレータ
複数行の場合、ターミネータのほうが自然だと感じられることが多いようである。
(ここでC言語の複文を例に使わなかったのは意図的である。C言語の複文においてセミコロンは必ずしも現れない。次の例を見よ。作為的なコードだが、構文的な問題は無い)
一方で行内の場合は、セパレータのほうが自然だと感じられることが多いようである。
スタイルというより、言語の設計としてどちらかに統一するのが、もし可能であれば望ましいのであろうが、そうするとどうしても無理がある場合がたいていは出てくる。しかし混在していると、些細ではあるが変なバグの原因となりやすい。改行の有無で適宜判断する、というのもひとつの手ではあり、UnixのシェルやAWK、JavaScriptなどはそうしているが、特にJavaScriptではそのような改行の扱いが逆に混乱を招いていると批判されている。改行の有無を強制とすることで解決できるが、それは少々厳し過ぎるだろう。
ループなどの制御構造についても、スタイルに関する議論がある。例えば、次の擬似コードを見てみよう。
このコードは変数名や字下げは問題ないが、次のようにfor文を使った方がずっと読みやすい。
多くの言語では、このようなパターンは次のように短縮できる。
ブロック(複文)のある言語で、制御構造の本体が「文、または、ブロック」である場合、ブロックにすることを原則とすることがある(PerlやGoなど、言語自身の構文規則でこのように強制しているものも多い)。
これは例えば、次のような「誤ってセミコロンを付けた」発見に時間のかかるバグを回避する。
あるいは、次のようにループ内で実行する行を増やしたときも中括弧を予めつけておけば、バグを回避できる。
さらに、「プリプロセッサによって本体が削除されてしまい、意図していなかった次の行が本体になってしまった」というような場合も防げる。