コードレビューをしていて、使わないのにデフォルト引数を実装しているのを指摘することが多いです。
今後引数に渡し忘れてもいいように実装しているのかもしれないが、渡し忘れても動作するのはリスクが高いと思っています。
デフォルト設定を採用する場合、どうして採用したかがわかるような使い方がいいと感じたため、例を残しておきます。
(Rubyに関わらず当てはまると思うが、Rubyだと意識している人が少ないのかもしれないです。)
悪い例
この例では、arg2を引数に渡さないパターンが存在せず、今後の実装でarg2を渡し忘れた場合もエラーにならないため、
意図しない挙動をしても検知しにくくなってしまっています。
def do_something(arg1, arg2 = 0)
arg1 + arg2
end
# arg2が未設定で使用するパターンが存在しない
do_something(1, 2)
do_something(2, 3)
良い例
この例では、arg2を使用しないパターンが存在しているため、
基本的にはarg1だけを渡す形で使用し、arg2は必要な時だけ渡す必要があることが自明になっている。
こうなっていれば、arg2を渡さないことに意味が生まれるため、実装や仕様が把握しやすくなる。
def do_something(arg1, arg2 = 0)
arg1 + arg2
end
do_something(1)
do_something(2)
do_something(1, 3)
仕様をどのようにコードに内包させるか、という点に焦点を当てた話なので、例が難しく伝わりづらいかもしれないです。