プログラマには皆、当然ながら、体裁に関して自分自身の好みがあるが、 プログラムを読み易くするための一般的なガイドラインがいくつかある。
open(FOO,$foo) || die "Can't open $foo: $!";は次よりもよい。
die "Can't open $foo: $!" unless open(FOO,$foo);なぜなら、後者は文のメインポイントを修飾子として隠しているからである。 一方、
print "Starting analysis\n" if $verbose;は次よりもよい。
$verbose && print "Starting analysis\n";なぜなら、 メインポイントはユーザが
-v
をタイプしたかどうかではないからだ。
同様に、演算子がデフォルトの引数を仮定しているからといって、
それはデフォルトを用いなければならないということではない。
デフォルトはちょっとしたプログラムを書く
怠け者のシステムプログラマのためにある。
プログラムを読み易くしたければ、引数を書いた方がよい。
上と同じようなことだが、
あちこちで括弧を省略することができるということは次のように書け、
ということではない。
return print reverse sort num values array; return print(reverse(sort num (values(%array))));あやふやな時は、括弧をつけよう。 少なくとも、物好きが、
vi
で %
キーを押すかもしれない。(?)
あやふやでない時でも、 君の後を継いでコードのメンテナンスをしなければならない人物の 精神福利を考えよう。彼はおそらく誤った所に括弧をつけるだろう。When in doubt, parenthesize. At the very least it will let some poor schmuck bounce on the % key in vi.
line: for (;;) { statements; last line if $foo; next line if /^#/; statements; }
loop
ラベルを使え ---
ラベルは多重ループから抜けるためだけでなく、
より読み易くするためにある。
一つ前の例を見よ。
eval
構造の中でそれが失敗するかどうかテストせよ。
ある機能が
どのバージョン、どのパッチレベルでインプリメントされたかが分かっているなら、
$]
を使ってその機能があるかどうかを調べることができる。