lasciva blog

開発して得た知見やwebビジネスのストック

Rubyスタイルガイドを読んだ

RoboCopのRubyスタイルガイドからforkされたスタイルガイドを発見しました。

github.com

結構前からあるみたいなので、今更感はあります。。

CookpadやMoneyforward、Airbnbなど色んな企業のコーディングスタイルガイドがありますが、
それらと比べて、細かくボリュームもありブレもなくなりそうで良さそうに思いました。
また、宗教戦争が起こりそうなところは、どちらもアリでプロジェクトの中での決めが重要というスタンスなのも良いなと思いました。
いくつか知らないものもあったので、メモ代わりにまとめます。

&&=

ruby-style-guide/README.ja.md at japanese · fortissimo1997/ruby-style-guide · GitHub

# bad
if something
  something = something.downcase
end

# bad
something = something ? something.downcase : nil

# ok
something = something.downcase if something

# good
something = something && something.downcase

# better
something &&= something.downcase

使ったことなかったですが、somethingのnilチェックがスマートに行えます。

Array#reverse_each

ruby-style-guide/README.ja.md at japanese · fortissimo1997/ruby-style-guide · GitHub

# bad
array.reverse.each { ... }

# good
array.reverse_each { ... }

パフォーマンスが良いそうです。

Exceptionのメッセージ

ruby-style-guide/README.ja.md at japanese · fortissimo1997/ruby-style-guide · GitHub

# bad
raise SomeException.new('message')
# `raise SomeException.new('message'), backtrace`とする書き方が存在しないことに注意しましょう。

# good
raise SomeException, 'message'
# `raise SomeException, 'message', backtrace`の用法と一貫性があります

Kernel#raiseは下記のように2つの呼び方があり、後者に統一しようとのことのようです。

# [https://docs.ruby-lang.org/ja/2.6.0/method/Kernel/m/raise.html:title]参照
raise(message) -> ()
raise(error_type, message = nil, backtrace = caller(0)) -> ()

Hash#values_at

ruby-style-guide/README.ja.md at japanese · fortissimo1997/ruby-style-guide · GitHub

# bad
email = data['email']
username = data['nickname']

# good
email, username = data.values_at('email', 'nickname')

Hashから複数の値を取り出す際には、 values_atを使った方がスマートに書けます。

Object#__send__

link

メソッド名の衝突を避けるために、 sendよりも __send__を使った方がよいというルールです。
例えばEmailクラスで独自のsendメソッドを定義した際に、衝突を回避できます。
(そもそもあまり send使いたくないですが。)