Help us understand the problem. What is going on with this article?

【Scala】複数コンストラクタ【オーバーロード】

More than 5 years have passed since last update.

↓を参考というかほとんど写経です。
http://seratch.hatenablog.jp/entry/20110428/1303999721 

Javaではおなじみの複数の引数をとる(オーバーロード)コンストラクタを定義してみましょう。

キーワード

  • 補助コンストラクタ(auxiliary constructor)

実践

パターン:引数の省略(デフォルト値)

複数のコンストラクタを定義したいPersonクラスを用意します。

class Person(name: String, sex: String) {

}

もう一つコンストラクタを用意します。

class Person(name: String, sex: String) {
  def this(name: String) = {
    this(name, "woman")
  }
}

まあこの場合なら、

class Person(name: String, sex: String = "woman") {

}

これ(デフォルト引数)でも同様ですね。

パターン:違う型(型変換)

通常のコンストラクタ

class Person(name: String, specialAbility: Map[String]) {

}

割と単純な例ですが、もう一つコンストラクタを用意します。

class Person(name: String, specialAbility: Map[String, String]) {

  def this(name: String, specialAbilityList:List[(String, String)]) = {
    this(name, specialAbilityList.toMap)
  }
}

ポイント

  • サブで定義したコンストラクタは、必ずメインのコンストラクタ(メインの宣言の部分)のコンストラクタを通る。
  • ↑の特性のため、実利用時のポイントとしては、メインのコンストラクタはなるべくおおざっぱなもの(大は小を兼ねる的な)にしておき、サブのコンストラクタで細分化するようなイメージか。

サブコンストラクタでの細分化例

class Person(elems: List[Map[String, String]]) {

  def this(singleMap: Map[String, String]) = {
    this(List(singleMap))
  }

  def this(mapKey: String, mapValue: String) = {
    this(List(Map(mapKey -> mapValue)))
  }
}

takudo
Flutter/Dart の入門中
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした