Scalaのデフォルト引数
Scala勉強会@東北 第51回勉強会で途中まで読んだProgramming Scala(獏本) のChapter 2 Type Less Do Moreで出てきた話。
デフォルト引数は Ruby みたいに仮引数に書くのではなく、多重定義すると。
//Scala2.7系 //code-examples/TypeLessDoMore/string-util-v1-script.scala //Version 1 of "StringUtil". object StringUtil { def joiner(strings: List[String], separator: String): String = strings.mkString(separator) def joiner(strings: List[String]): String = joiner(strings, " ") } import StringUtil._ // Import the joiner methods. println( joiner(List("Programming", "Scala")) )
Rubyだとこんな感じ。
#Ruby def joiner(string_array,separator=" ") string_array.join(separator) end puts joiner ["Programming","Scala"]
で、2.8ではRubyのように仮引数に書けるようになったと。というか、貘本は2.8対象なんですね。
//Scala2.8 // code-examples/TypeLessDoMore/string-util-v2-v28-script.scala // Version 2 of "StringUtil" for Scala v2.8 only. object StringUtil { def joiner(strings: List[String], separator: String = " "): String = strings.mkString(separator) } import StringUtil._ // Import the joiner methods. println(joiner(List("Programming", "Scala")))
さらに、どのパラメータに値を入れるかを名前で指定できる。rubyというかRailsでよくやってるハッシュでパラメータ渡してるのと、デフォルト引数をあわせたみたいな感じでしょうか?
//named parameter println(joiner(List("Programming", "Scala"), separator = " ")) println(joiner(strings = List("Programming", "Scala"), separator = " "))
パラメーターにわかりやすい名前をつけて、明示的に名前で指定すれば、コードの可読性があがるよってことかな。