if-elsif-else の書き方

最近、個人的にいいなと思う if-elsif-else の書き方を見つけたのでメモしておく。nginx のソースと同じスタイルです。と言ってもパッとしないので例を見ていくと、

PBP / Programming Perl では

if ((my $color = <STDIN>) =~ /red/i) {
    $value = 0xff0000;
}
elsif ($color =~ /green/i) {
    $value = 0x00ff00;
}
elsif ($color =~ /blue/i) {
    $value = 0x0000ff;
}
else {
    warn "unknown RBG component";
    $value = 0x000000;
}

の形式で書かれている。

よくある他の書き方

このスタイルもよく見かける

if ((my $color = <STDIN>) =~ /red/i) {
    $value = 0xff0000;
} elsif ($color =~ /green/i) {
    $value = 0x00ff00;
} elsif ($color =~ /blue/i) {
    $value = 0x0000ff;
} else {
    warn "unknown RBG component";
    $value = 0x000000;
}

nginx-style

nginx は C で書かれていますが、結構綺麗に書かれています。

if ((my $color = <STDIN>) =~ /red/i) {
    $value = 0xff0000;

} elsif ($color =~ /green/i) {
    $value = 0x00ff00;

} elsif ($color =~ /blue/i) {
    $value = 0x0000ff;

} else {
    warn "unknown RBG component";
    $value = 0x000000;
}
この様に、 elsif と else の前に改行を一つ開けておくことで、
  • 何よりもエディタでの特定ブロック内へのカーソル移動が楽になる
    • vim では normal mode で { および } で前後の改行まで飛ぶ機能がある
  • 各条件式のブロックを意識しやすくなる
  • ブロック内のコード量が増えても認識しやすくなる

これらの理由から、最近は上記例のような書き方がお気に入り。