コーディングルールっぽいの (Ruby)

ひとりで書いているし、ガチガチに作っているわけでもないけど、気をつけるようにしていることとか。

Tab indent, No space indent

タブインデントに決め打ちしておけば、近い将来に自分がインデント幅8に目覚めても、エディタの設定をいじればすむ。
インデント幅をいじれないエディタはエディタでないので、エディタと呼んでいいものだけを使えばいい。
あと、タブ -> スペースは難しいことはない (単に置き換えすればいいだけ) けど、スペース -> タブはいろいろめんどくさいんじゃないかとおもう。文字列リテラル中の連続した空白とかめんどくさいね。
Ruby は Ripper というライブラリがあるけど、他の言語だと大変そう…。

あと、他人のコードをいじるときはちゃんと他人のルールにあわせるつもり。つもりというのは、実際にそういう機会がないから。郷に入れば郷に従えの精神。

一行あたりの桁数は80を目安

目安というのは、この規約に縛られてお尻ドットによるメソッドチェインの嵐になるとキモイので。
メソッドチェインもほどほどに。

クラスメソッドは特異クラスのインスタンスメソッドとして

class Hoge
  # これよりも
  def self.hoge
    # ...
  end

  # こっちで
  class << self
    def hoge
      # ...
    end
  end
end

クラスメソッドは3つ以上になったら、特異クラスに定義するようにしている。
特異クラス定義しておくと、クラス変数のアクセサが書きやすい。

メソッド定義について

  • 仮引数リストには必ず括弧をつける。
  • 特段の理由がない限りブロック引数は、 &block としておく。
  • 仮引数を持たない場合は括弧をつけない。
def hoge(x, y, &block)
  # ...
end

def fuga
  # ...
end

メソッド呼び出しについて

  • 引数リストには必ず括弧をつける
  • 引数がない場合は括弧を省略してもよい
  • Kernel#print や Kernel#puts などの関数的メソッドや一部のモジュール関数は引数リストの括弧を省略してもよい
    • この場合、演算子の優先度などに注意すること
    • 関数的メソッドでは仮引数は少ない数で固定にしておくのがよさげ
  • ハッシュのブレース省略は、メソッドがハッシュをひとつだけ引数とする場合に限る
[].push(:a, :b)

"abc".capitalize

puts "Hello", "World"

foobar(:a => 1, :b => 2)

まとめ、その他

コーディングルールとは違ったレイヤーの話だけど、Ruby は DSL っぽく書けるところも多い言語なので、さっぱりと省略できるところはしてしまったほうが、結果としてわかりやすいコードになるとおもう。うまくいえないけど…。
他の言語で是とされているルールが Ruby の界隈でもそうであるとは限らないし、逆にどこでも通用するような作法もあったりするとおもうので、柔軟にいきたいとおもう。