コンストラクタ

Scalaにおける**コンストラクタ(constructor)**とは、クラスのインスタンス(オブジェクト)を生成するときに呼び出される特殊な処理です。主に、オブジェクトの初期化を行うために使用されます。Scalaのコンストラクタには以下の2種類があります。


1. 主(プライマリ)コンストラクタ(Primary Constructor)

Scalaでは、クラスの定義と同時に定義されるコンストラクタが「主コンストラクタ」です。これはクラスの宣言部分に含まれる引数リストによって記述され、最も基本的な初期化手段です。

scala
class Person(val name: String, val age: Int) { // コンストラクタ本体:クラス定義内の任意の処理もここに書ける println(s"Creating Person: $name, $age years old") }

特徴

  • コンストラクタ引数は val または var をつけることで、そのままクラスのフィールドになります。

  • クラス定義のボディ内に記述されたコードは、インスタンス生成時に実行されます。


2. 補助(セカンダリ)コンストラクタ(Auxiliary Constructor)

Scalaでは、thisキーワードを使って補助コンストラクタ(副コンストラクタ)を定義できます。これは主コンストラクタを補完するもので、複数定義可能です。

scala
class Person(val name: String, val age: Int) { def this(name: String) = this(name, 0) // 年齢が省略された場合に使用 def this() = this("Unknown", 0) // 名前も省略された場合に使用 }

特徴

  • 補助コンストラクタは必ず他のコンストラクタ(最終的には主コンストラクタ)を呼び出す必要があります

  • Javaのようにオーバーロードされた複数のコンストラクタを定義する際に便利です。


コンストラクタと初期化処理

Scalaでは、クラス本体に記述されたすべての文が、主コンストラクタの一部として扱われます。したがって、初期化処理はクラス本体内に直接記述するのが一般的です。


まとめ

種類 特徴
主コンストラクタ クラスの定義と同時に定義され、基本的な初期化処理を担当
補助コンストラクタ thisを使って定義し、主コンストラクタを呼び出す必要がある
初期化処理 クラス本体内に記述し、インスタンス生成時に実行される

生成日:2025/05/04