0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

デフォルト引数は意図がわかるように使いたい

Posted at

コードレビューをしていて、使わないのにデフォルト引数を実装しているのを指摘することが多いです。
今後引数に渡し忘れてもいいように実装しているのかもしれないが、渡し忘れても動作するのはリスクが高いと思っています。
デフォルト設定を採用する場合、どうして採用したかがわかるような使い方がいいと感じたため、例を残しておきます。
(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)

仕様をどのようにコードに内包させるか、という点に焦点を当てた話なので、例が難しく伝わりづらいかもしれないです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?