Scala2.8新しいプロパティ:コードをより簡潔にするネーミングパラメータとデフォルトパラメータ


原文:
翻訳:Xuefeng Wu
Scala 2.8は、再設計された集合クラスライブラリ、命名およびデフォルトパラメータ、continuations、a pimped REPLなど、多くの興味深い新しい特性を導入します.後で、名前とデフォルトのパラメータを示すと、私たちのScalaコードがより簡明になります.
Scala 2.7の例を挙げましょう.ID、注文項目、輸送モードのある注文です.

case class Order27(id: Long,
                items: List[Item],
                mode: ShippingMode)

case class Item()

sealed trait ShippingMode
case object StandardShipping extends ShippingMode
case object ExpressShipping extends ShippingMode
case object OvernightShipping extends ShippingMode

注文IDは「強制明細」の必須であり、注文項目と輸送モードはデフォルトで使用できます.そのため、補助構造方法を提供しなければなりません.

case class Order27(id: Long,
                items: List[Item],
                mode: ShippingMode) {

 def this(id: Long, items: List[Item]) =
   this(id, items, StandardShipping)

 def this(id: Long, mode: ShippingMode) =
   this(id, Nil, StandardShipping)

 def this(id: Long) =
   this(id, Nil, StandardShipping)
}

IDのみで注文を作成できるようになりました.

val order = Order27(1)

これにより、空注文項目(もちろん、空注文項目の注文は実際の意味がありません)と標準輸送モードの注文が作成されます.
一方ではこれがよいが,他方ではコードを大きくする.そして、読者にどれが強制されたのか、どれがデフォルトなのかを探すのにもっと時間がかかります.
Scala 2.8では、デフォルト値をタイプの後ろに簡単に置くだけで、デフォルトのクラスパラメータを定義します.

case class Order28(id: Long,
                items: List[Item] = Nil,
                mode: ShippingMode = StandardShipping)

デフォルト値が設定されているパラメータにかかわらず、

val order = Order28(1)

受注項目と標準輸送を使用しない受注が作成されます.しかし、これは補助的な構造方法を必要としない.WoW!
しかし、注文項目にかかわらず、輸送モデルをどのように伝えますか?プライマリ・コンストラクション・メソッドのパラメータの順序を見ると、受注項目を渡してから輸送モードを実行する必要があります.

val order = Order28(1, HERE GOES THE ITEM LIST, OvernightShipping)

名前付きパラメータがゲームに入る番です.パラメータ値に名前を付けるのは簡単ですが、

val order = Order28(1, mode = OvernightShipping)

これでScalaはどうすればいいか知っています.WoW!
Eastsun Scale 2.8味見:名前付きパラメータとデフォルトパラメータ
http://eastsun.iteye.com/blog/402092
これはルビーの機能と似ています.名前付きパラメータは、Scalaがどの値を入力したいかを知るためだけでなく、パラメータが入力されたときにエラーを回避するために使用されます.