Techioz Blog

なぜrubocopやrubyスタイルガイドはget_やset_を使用しないのですか?

概要

私は自分のプロジェクトでrubocopを実行し、それによって生じた苦情を修正していました。

ある特定の苦情が私を悩ませました

この苦情からはあまり理解できなかったので、github でソースコードを調べました。

このスニペットを見つけました

def bad_reader_name?(method_name, args)
  method_name.start_with?('get_') && args.to_a.empty?
end

def bad_writer_name?(method_name, args)
  method_name.start_with?('set_') && args.to_a.one?
end

要約すると次のようになります。

その理由は何でしょうか?

解決策

ここでのポイントは、Ruby 開発者がメソッドを常にゲッターとして考えることを好むことだと思います。メソッドは何かを返し、同等の「糖衣構文」を使用するためです (Class.dog = something を実行できる def self.dog=(params) のように)。本質的に、私がいつも指摘してきた点は、get と set が冗長で冗長であるということです。

これとは対照的に、ファインダー メソッドのような複数の引数を指定して get および set を実行します (特に get、ActiveRecord の where を考えてください)。

「スタイルガイド」= 純粋な意見であることに留意してください。一般に、スタイル ガイドのより高い目標は一貫性であるため、間違いなく間違っている、または読みにくい点がない限り、特定のタイプよりもすべてを同じにすることを目標にする必要があります。これが、rubocop がこれをオフにできる理由です。