旅好きの気ままなお話

旅のこと映画、統計、会計、プログラミングなど、気の向くままに語ります

rubyで引数の初期値がある時の順番の個人的に良い方法

引数の初期値がある時の順番で困る時ってありますよね 例えば、第二引数の初期値を設定する時

def file(name="foo.jpg", mode="rb")
  File.open(name, mode)
end

こういう時、第一引数を変えずに、第二引数だけ変えて 呼び出すときは以下のようにしないといけません。

file("foo.jpg", "r")

ただ、これって無駄な感じがします。 なので、以下のように順番を入れ替えたり。。。

def file(mode="rb", name="foo.jpg")
  File.open(name, mode)
end

となる人おもいるかと思いますが、ぶっちゃけ順番に意味があったり、引数増えたりすると、どんどんわかりにくくなります。

なので、個人的にはキーワード引数にするのがいい気がします。

def file(name: "foo.jpg", mode: "rb")
  File.open(name, mode)
end

すると以下のように呼び出せるので。

file(mode: "rb")

まぁ、引数をどうするかは時と場合の設計によるので常々ベストプラクティス考えながら実装できれば良いと思います。