Perlベストプラクティス

Perlベストプラクティス

Perlベストプラクティス

2章 コードのレイアウト

かっこはK&Rスタイル*1BSDスタイルとGNUスタイルはだめ。

K&Rスタイル
my @names = (
    'uunfo',   # myself
    'hoge',    # that one
    'foo',     # another one
    'bar',     # who ?
);

for my $name (@name) {
    for my $word ( anagrams_of(lc $name) ) {
        print "$wod\n";
    }
}
BSDスタイル(開きかっこの前でも改行する)
my @names = 
(
    'uunfo',   # myself
    'hoge',    # that one
    'foo',     # another one
    'bar',     # who ?
);

for my $name (@name) 
{
    for my $word (anagrams_of(lc $name)) 
    {
        print "$wod\n";
    }
}
GNUスタイル(開きかっこの前でも改行し、かつかっこのブロックもインデントする)
for my $name (@name) 
  {
    for my $word (anagrams_of(lc $name)) 
      {
        print "$wod\n";
      }
  }

K&Rスタイルを薦める理由はそれが一番コンパクトであること。

かっことスペース

forやwhileのあとにスペースを入れる。
サブルーチンや変数名のあとにはスペースを入れないでかっこを書く。
組み込み関数(とそれに準ずるもの)の引数にはかっこを用いない。
for my $result (@results) {
    if ($result > 0) {
        $x = $result ;
    }
}
my @candidates = get_candidates($marker);

区別しやすくするため。

配列やハッシュのインデックス、キーの前後には適宜スペースを入れる。
$test[$i] = $input_values{ $index_of_value[$i]{ get_type() } };

キーとなる変数名が長い場合もスペースを入れると見やすくなる。

2項演算子の両側に結合の強弱に応じてスペースを挿入する。
単項演算子は離さない。(!のあとにはスペースを入れたいなあ)
名前付きの単項演算子は関数のように書く。*2

セパレータをターミネータとして使う

セミコロンを文の末尾に。
コンマをリストの各項目の末尾に。

セミコロンは本来文のセパレータなのでブロックの最後の文には必要ないが、すべての文に付ける。
コンマも同様に、値の追加や順序の入れ替えに便利なように、すべての項目につける。

フォーマット

インデントはスペース4つで。((職場ではtabに統一(;-;)))
一行一文。
  • elseの前に改行する。
} else {

ではなく

}
else {

と書く。慣れない…。

たてに整列。
長い文を改行するときは、(優先度の低い)演算子の前で。長い文が途中にある場合は独立させる
push @steeps, $step[-1]
              + $radial_velocity * $elapsed_time
              + $orbital_velocity * ($phase + $phase_shift)
              - $DRAG_COEFF * $altitude
              ;
3項演算子のレイアウト
my $salute = $name eq $EMPTY_STR                      ? 'Customer'
           : $name =~ m/\A((?:Sir|Dame) \s+ \S+) /xms ? $1
           : $name =~ m/(.*), \s+ Ph[.]?D \z     /xms ? "Dr $1"
           :                                            $name
           ;

*1:K&RはCのKernighanとRitchieのこと

*2:cosやexpって関数ではなく単項演算子だったのか。