This is IT

技術、日常

メソッドの引数にはハッシュオブジェクトではなく、キーワード引数を使う。

可読性を上げるためにもそうした方が良いという話。

引数がハッシュオブジェクト

まずはハッシュオブジェクトを渡す例

class Bar
  def initialize(options)
    @options = options
  end
end


def load_options
  {
    baz: true,
    foo: true,
    bee: true,
  }
end


options = load_options

bar1 = Bar.new(options)

この規模なら意味は分かる。でも例えばファイルが分かれてて、メソッドも見えなくなってしまい、

options = load_options

bar1 = Bar.new(options)

こんな感じになったら「load_optionsってどんなんや?」と探す手間が増えてしまう。 (まぁ何にせよ見に行くんだろうけど)

引数がキーワード引数

class Bar
  def initialize(baz: false, foo: false, bee: false)
    @baz = baz
    @foo = foo
    @bee = bee
  end
end

bar1 = Bar.new(baz: true, foo: true, bee: true)

同じようにファイルを分けてみても、

bar1 = Bar.new(baz: true, foo: true, bee: true)

インスタンス生成時に何をしたいかはよく分かる。

他にも、

bar2 = Bar.new()

のように、そもそも引数に何を渡すかを気にしない使い方をする処理ならば、デフォルト引数のおかげで楽に生成ができる。

前者の例だと、引数にoptionsに属するものを必ず渡す必要が出ちゃうから面倒くさいかも。