Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. 読み物

変数に適切な名前をつけるようにしよう

変数をよい名前にするとプログラムが読みやすくなります。

個人的な意見になりますが、変数名のつけ方について自分の考えていることを書いておきます。

  1. 変数名は意味のあるものにする。
  2. 変数名はすべて小文字で、単語のつなぎ目は _ (アンダーバー)を使用する。
  3. 変数名をどの程度詳細にするか
  4. 省略してもよい変数名
  5. 真偽値を表す変数の命名方法
  6. 配列の命名方法

(1)変数名は意味のあるものにする。

プログラミングで一番読み取りにくいのはコードを書いた人の意図です。

適切な変数名をつけることによって意図が伝わりやすくなります。

(a)変数に意味を持たせた場合

# この変数は何かの合計を格納するものだ
my $total;

# この変数は何らかのオフセットを表すものだ。
my $offset;

# この変数はクライアント数の最大値を表すものだ
my $max_client 

(b)変数に意味を持たせない場合

# 何かわからない
my $p;
my $q;
my $k;

コンピュータにとっての関心ごとは変数名が区別できるかということだけですが、人間にとっては変数名が何を意図しているかということが重要です。

(2)変数名はすべて小文字で、単語のつなぎ目は _ ( アンダーバーにする。 )

変数名には大文字は使用せずに、小文字だけにします。単語のつなぎ目にはアンダーバーを使用します。

my $user_name;
my $search_word;
my $max_database_connection;

これはPerlの慣習であって、強制ではないですが、Perlでコードを書くなら守っておいたほうがよいと思われます。使う人にとって混乱が少ないと思うからです。

逆にjavaでプログラミングするときは、perlの慣習を持ち込まないで、userNameのように書きましょう。

(3)変数名をどの程度詳細にするか

変数名をどの程度詳細にするかは、そのスコープの中で意味の区別がつくかを基準にするとよいと思います。

(a) 意図がはっきりとわかるなら短い変数名でOK

sub sum {
  # 合計値を表す
  my $total;
}

(b)区別する必要がある場合は状況に応じて意味を区別できる変数名にする

たとえば、奇数の合計と偶数の合計を足し合わせる関数があったとするならば、それぞれの合計に適切な名前をつけます。

sub sum {
  # 奇数の合計
  my $odd_total;
  
  # 偶数の合計
  my $even_total 
}

(c) for文で意図がはっきりわかる場合は $i のように短い変数名でOK

for my $i (0 .. @nums - 1) {
  ...
}

(d) for文で意図がわかりにくくなる可能性がある場合は意味を区別できる変数名にする

my $data_table = [[ 1, 2, 3 ], [ 2, 4, 6 ]];
for my $row_num (0 .. @$data_table - 1){
  for my $colum_num (0 .. @{$data_table[$row_num]} - 1) {
    ...
  }
}

(4)省略してもよい変数名

慣習的に意味が通じるものは省略してもよいかもしれません。また変数スコープの範囲が狭い場合は、省略することも可能でしょう。省略するときは、先頭の何文字かを残すのがわかりやすいと思います。

省略しても理解できると考えられる変数名

my $num; # number
my $len; # length;
my $char; # charactor;

(5)真偽値を表す変数の命名方法

真偽値を表す変数名の例をいくつか書いておきます。

# 安全である (is + 形容詞)
my $is_safe;

# スイッチが入っている (名詞 + 前置詞)
my $switch_on;

# リクエストをロード中 (名詞 + 現在分詞)
my $request_loading;

# 書き込みが終了している(名詞 + 過去分詞) 
my $write_done;

# チェックが成功している(名詞 + 名詞)
my $check_success;

# 状態はokである。(名詞 + 名詞)
my $status_ok;   

(6)配列の命名方法

配列に名前をつける場合は、末尾にs をつけます。

# sを末尾につける方法
my @members; 

for my $member (@members) {
  # ...
}
Giblog