Skip to content

Instantly share code, notes, and snippets.

@hisaichi5518
Last active October 13, 2015 22:38
Show Gist options
  • Select an option

  • Save hisaichi5518/4267078 to your computer and use it in GitHub Desktop.

Select an option

Save hisaichi5518/4267078 to your computer and use it in GitHub Desktop.
hisaichi5518 style.

はじめに

  • ゆるふわ
  • perldoc perlstyle
  • これが絶対ではない。常によい方向へ。
  • 綺麗なコード=Larry Wallが書いたコード, 多くの人が書くコード
  • Larryの考えは変わる。みんなも変わる。なので綺麗なコードも変わる。

全てのコードにuse strict; use warnings;を付ける。

use strict;
use warnings;

半角スペースでの4カラムインデント

sub name {
    my ($self) = @_;
}

1行80〜100文字まで

名前が長くなってるのがそもそもイケてないのでそういう部分を見直す。

sub boku_no_namae_ha_hisaichi5518_desu {
    my ($self) = @_;
    $self->{boku_no_namae_ha_hisaichi5518_desu};
}

開始括弧とキーワードは同一行

if ($is_stuff) {
    ...;
}

sub is_kyoto { ... }

elseはifの括弧にくっつけない

if ($is_stuff) {
    ...;
}
else {
    ...;
}

ifとelseの間に空行をいれない

# ダメな例
if () {
}

else {
}

if, elsif, else, subなどは括弧開始前にスペースを挟む

if ($is_stuff) {
    ...;
}
else {
    ...;
}

sub name {
    ...;
}

セミコロンの前に空白なし

$user->name;

"短い" 1 行 BLOCK ではセミコロンを省略

sub is_5518 { is $_[0], 5518 }

1行にまとめる時は括弧の中にスペースを含める

sub kamakura { '鎌倉' }

ほとんどの演算子の前後にはスペース

my $num = 1 + 2;
$num++;

異なる処理の塊の間には空行。

sub hoge {
    my ($self) = @_;
    my $hoge = ...;
    my $piyo = ...;
    my $fuga = ...;

    if ($hoge && $piyo) {
        ...;
    }
    elsif ($fuga) {
        ...;
    }
    else {
        ...;
    }

    return $row;
}

カンマの後ろにはスペース

sub hoge {
    my ($self, $name) = @_;

    ...;
}

長い行は、演算子の後ろで改行(and, orは除く)

if (
    $hogehogehogehoge &&
    $fugafugafugafuga &&
    $piyopiyopiyopiyo
) {
    ...;
}

my $is_hoge = ;

my $user = $name eq 'fugafuga' ? 'fugafuga!' :
           $name eq 'hogehoge' ? 'hogehoge!' : 'hogefuga!';

$user_rs->find_id_and_name_and_hoge_and_piyo($id, $name, $hoge, $piyo)
    and $user_rs->hogehoge;

対応する要素の開始位置をそろえる。

if (1) {
    if (0) {
        ...;
    }
    else {
        ...;
    }
}
else {
    ...;
}

open()は引数3つ渡して、dieも書く

open my $fh, '<', $file
    or die qq/Can't open file "$file" : $!/;

一行でまとめる場合、メインの処理を後ろに書かない

return $hogehoge if defined $hogehoge;

# ダメな例
die "Can't open $foo: $!" unless open my $fh,'<', $file;

なにがメインの処理か考えて書くと良い感じかもしれない。

引数は省略しない

場合によるなぁ。shiftとか略す。

# 引数?$_を使わない感じ
for my $user (@users) {
    ...;
}

括弧の省略は2個くらいまでに留めておく

3個くらいまでやっちゃう時あるけど。

# まだ大丈夫
print $array[int rand @num];

# \(^o^)/
print reverse sort num values %hash;

last, nextを使う

ラベル使った方がわかりやすいらしいけど、使ってる人たまにしか見ない。

for my $user (@uesrs) {
    next if $user->is_stuff;
    if ($user->is_5518) {
        ...;
        last;
    }
}

メソッド名, 変数名は、アンスコ区切り

大文字は使わない。またアンスコだけとかダメ。

my $var_names_like_this;

sub method_name {
    ...;
}

package名は、大文字で始まりアンスコ区切りではない

package App::Hoge;

定数は全て大文字

use constant NAME => 'hisaichi5518';

プライベートメソッドはアンスコから始まる

sub _private_method {
    ...;
}

長い正規表現には/xを付けて見やすくする

http://d.hatena.ne.jp/perlcodesample/20080414/1208186274

print() 文は繰り返さず、ヒアドキュメントを使う

my $text = <<'...';
ぼくのあだ名は、久一です。
被災地ではありません。

ちゃんと覚えてね〜!
...

対応するものの開始位置はそろえる

my $user_name = 'hisaichi5518';
my $user_id   = 12345;

システムコールの返りコードは毎回チェック

autodieがあるけど、ウェブアプリでは使ってるのあまり見ない。

open my $fh, '<', $file
    or die qq/Can't open file "$file" : $!/;

+はググれず、わかりにくい

やたらめったら使わない。

# ダメな例

print Dumper +{
    piyo => +{
        hisaichi => 'hoge',
    },
    hoge => +{},
    pipi => +[],
};

以下の場合は、+が必要。

use Data::Dumper;
warn Dumper +Plack::Response->new(200);

テストについて

ながくなるので、べつにかきたい。と書いて約半年経っております。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment