もちろん、人それぞれにフォーマットの好みがありますが、読みやすく、理解 しやすく、保守しやすいプログラムにするための一般的なガイドラインも存在し ます。
コードレイアウトの美学に関して、唯一 Larry が強く気にかけることは、複数 行に渡る BLOCK の閉じ中括弧の位置を、その構文を開始するキーワードとカラ ム位置を揃えるということです。この他には、それ程に強くはない好みとして:
else
は行替えする。
and
と or
以外の) 演算子のあとで改行する。
Larry はこれらのことに対して彼なりの理由を持っていますが、他の人が同じよ うに考えなくても文句をいう筋合いのものではありません。
もう少し本質的なスタイルの問題も考えておくべきでしょう:
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で % キーを使って、 跳ねまわることができます。 特に疑わしい場合でなくても、みなさんの後を引き継いでコードのメンテをする 人のことを考えてあげてください。間違ったところに括弧を付けてしまうかも知 れません。
last
演算子を用意しているので、ループの途中で抜けることがで
きるのです。目立つように、少しばかり突き出して置けばよいのです:
LINE: for (;;) { statements; last LINE if $foo; next LINE if /^#/; statements; }
eval
の中で使ってみて調べてください。その機能がインプリメン
トされているバージョンやパッチレベルがわかるのであれば、 $]
(English モジュールを使っているときには $PERL_VERSION ) を調べて、
実装されているかを見ることができます。 `Config' モジュールで Perl
をインストールした時に、 Configure プログラムで決定された値を引き出すこ
とができます。
/x
修飾子を使って、空白を入れ、な
るべく見やすくするようにしましょう。正規表現の中にスラッシュやバックスラッ
シュを使っている時には、区切文字にスラッシュを使うのは避けましょう。
&&
や
||
といった記号的な演算子の頻度を下げるために " and
"や "
or
" という新しい演算子を使ってください。過剰な &
や括弧を
避けるために、サブルーティンは関数やリスト演算子として使いましょう。
print()
文を繰り返すよりは、ヒアドキュメントを使ってくださ
い。
$IDX = $ST_MTIME; $IDX = $ST_ATIME if $opt_u; $IDX = $ST_CTIME if $opt_c; $IDX = $ST_SIZE if $opt_s; mkdir $tmpdir, 0700 or die "can't mkdir $tmpdir: $!"; chdir($tmpdir) or die "can't chdir $tmpdir: $!"; mkdir 'tmp', 0777 or die "can't mkdir $tmpdir/tmp: $!";
tr [abc] [xyz];
use strict
や `-w' を有効にして、コードの
不明瞭な部分が無いようにしてください。コードを減らすことを考えてください。
全体の見方を変えることも考えてください。さらに ... やめましょう。
Go to the first, previous, next, last section, table of contents.