IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

Perl条件文の可読性

プログラミング一般論として可読性の高いコーディングが求められますが、可読性の良い悪いを判断するのが難しいケースがままあります。最近、可読性の良さについて意見が別れたことがありました。実際はもう少し複雑だったのですが、ポイントを纏めると以下のような条件判定の部分でした。

my $foo =
#    +{ v => 1 };
#    +{ v => 2 }; 
#    +{ v => 3 };
#    +{ v => 4 };
    +{ v => 5 };
sub check_1 {
    my $foo = shift;
    if ( $foo->{v} == 1 || $foo->{v} == 2 || $foo->{v} == 3) {
        return 1;
    }
    return undef;
}
sub check_2 {
    my $foo = shift;
    return $foo->{v} == 1 ? 1    
         : $foo->{v} == 2 ? 1    
         : $foo->{v} == 3 ? 1    
         :                  undef
         ;
}
print 'check_1 : ' . check_1($foo) . "\n";
print 'check_2 : ' . check_2($foo) . "\n";

if文を使うか、条件演算子を使うかということです。

私は条件演算子の派閥(笑)です。
条件演算子はコードをテーブル形式で記述できるので、理解しやすいと思っています。

結局のところ、最近のperlではgiven whenがあるので、これが使える環境であれば、これを使うのがベストなんでしょうけど。

下記をみると他にも記述方法があるみたいですね。
http://stackoverflow.com/questions/3898836/should-i-use-perls-conditional-operator-as-a-switch-case-statement-or-ins

ただ、別の観点としてundefをreturnしている部分はよくないですが。。