読者です 読者をやめる 読者になる 読者になる

kwsktr's study log

kwsktr のおべんきょログ

コーディングスタイルだけは一人前を目指す試み :: (2)

Perlベストプラクティスを読み倒して、実践していけば少しはコーディングスタイルも向上するはず。

3章 命名規則

3.1 識別子

識別子の組み立てには文法テンプレートを使用する

■パッケージやクラス

<名前空間> → <名詞> :: <形容詞> :: <形容詞>
            | <名詞> :: <形容詞>
            | <名詞>


■変数

<変数> → [<形容詞> _ ]* <名詞>


■ハッシュや配列

<変数> → [<形容詞> _ ]* <名詞> <前置詞>


■サブルーチンやメソッド

<ルーチン> → <命名法の動詞> [ _ <形容詞> ]? _ <名詞> _ <前置詞>
            | <命名法の動詞> [ _ <形容詞> ]? _ <名詞> _ <分詞>
            | <命名法の動詞> [ _ <形容詞> ]? _ <名詞>
3.2 ブール

ブールには、関連する評価にちなんだ名前を付ける

明示的に。

3.3 参照変数

参照を保持する変数には_refサフィックスを付ける

参照をスカラーに代入したあと、逆参照矢印を付け忘れるミスを、命名規則で防止。

3.4 配列とハッシュ

配列の名前は常に複数形、ハッシュの名前は常に単数形にする

# 配列
my @events;
my @handlers;
my @unknowns;

# ハッシュ
my %option;
my %title_of;
my %count_for;
my %is_available;
3.5 アンダースコア

アンダースコアを使って複数の単語からなる識別子の単語を区切る

FORM:
for my $tax_form (@tax_form_sequence) {
    my $notional_tax_paid
        = tax_form->{reported_income} * $tax_form->{effective_tax_rate};

    next FORM if is $notional_tax_paid < $MIN_ASSESSABLE;
    
    $total_paid
        += $notional_tax_paid - $tax_form->{allowed_deductions};
}
3.6 大文字の使い分け

プログラムのコンポーネントの種類は大文字と小文字の使い分けで区別する

  • サブルーチン、メソッド、変数、およびラベル付きの引数の名前には、小文字のみを使用する
  • パッケージ名とクラス名には、大文字と小文字を組み合わせて使用する
  • 定数には大文字を使用する
3.7 略記

略記は先頭部で示す

use List::Util qw( max );

DESC:
for my $desc (@orig_strs) {
    my $len = length $desc;
    next DESC if $len > $UPPER_LIM;
    $max_len = max($max_len, $len);
}
3.8 意味不明な略記

略記を使用するのは、そうしても意味が明白な場合だけにする

sub swap_domain_and_range_of {
    my ($table_ref) = @_;
    
    my @pivotted_table;
    for my $x (0..$#{$table_ref}) {
        for my $y (0..$#{$table_ref->[$x]}) {
            $pivotted_table[$x][$y] = $table_ref->[$x][$y];
        }
    }
    
    return \@pivotted_table;
}

ネストしたループでは、標準的な1文字の反復子変数($i, $j, $k, $n, $x, $y, $z)でも問題がない場合が多い。特にインデックスが何らかの座標である場合など。

3.9 意味不明な名前

そもそも不可解な単語を名前に使用しない

多義を持つ単語を含んだ名前は本質的に不明瞭なものになる。

3.10 ユーティリティサブルーチン

「内部使用専用の」サブルーチンの先頭にはアンダースコアを付ける

ユーティリティサブルーチンは、モジュールまたはクラスの実装を簡略化するためにのみ存在する。
名前の「1文字目」として、常にアンダースコア(_)を使用すること。