可読性を上げるためにもそうした方が良いという話。
引数がハッシュオブジェクト
まずはハッシュオブジェクトを渡す例
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に属するものを必ず渡す必要が出ちゃうから面倒くさいかも。