型パラメータ

Scalaの「型パラメータ(type parameters)」は、**ジェネリクス(Generics)**の仕組みを実現するために使用されるもので、クラス、トレイト、メソッドにおいて、具体的な型を抽象化して再利用性と型安全性を高めるために使われます。


1. 型パラメータの基本構文

Scalaでは、クラスやメソッドの定義時に型をパラメータとして受け取ることができます。

scala
class Box[A](value: A) { def get: A = value }

この例では、Aが型パラメータです。Boxクラスは、任意の型Aに対して機能し、その型の値を格納・取得できます。

使用例

scala
val intBox = new Box val stringBox = new Box[String]("Scala")

Box[Int]Box[String]のように、具体的な型を指定してインスタンス化できます。


2. 型パラメータの利点

a. 型安全性の向上

コンパイル時に型がチェックされるため、型の不一致による実行時エラーを防げます。

scala
val b = new Box // b.get + "hello" // コンパイルエラー:IntとStringの加算はできない

b. 再利用性の向上

同じ構造で異なる型に対して使い回すことができ、重複したコードを減らせます。


3. 複数の型パラメータ

複数の型パラメータを指定することも可能です。

scala
class Pair[A, B](val first: A, val second: B) val p = new Pair[String, Int]("Age", 30)

4. メソッドにおける型パラメータ

メソッド単位で型パラメータを使うこともできます。

scala
def identity[A](x: A): A = x val i = identity val s = identity[String]("Scala")

5. 型境界(境界付き型)

型パラメータに対して**制約(境界)**を設けることも可能です。

a. 上限境界(upper bound)

scala
class Animal class Dog extends Animal class Cage[A <: Animal](val animal: A)

この場合、CageにはAnimalかそのサブクラスしか使えません。

b. 下限境界(lower bound)

scala
class Trainer[A >: Dog](val animal: A)

これはDogかその親クラスが使えることを意味します。


6. 型パラメータと共変・反変

Scalaの強力な型システムでは、共変(+A)、**反変(-A)**の指定によってサブタイプ関係を柔軟に定義できます。

scala
class Covariant[+A] // 共変:AがサブタイプならCovariant[A]もサブタイプ class Contravariant[-A] // 反変:AがサブタイプならContravariant[A]はスーパータイプ

まとめ

機能 説明
型パラメータ 型を抽象化し、汎用的なクラス・メソッドを定義可能
利点 型安全性と再利用性の向上
境界付き型 使用できる型に制限を設ける(上限・下限)
共変・反変 型の継承関係を制御して柔軟な型設計が可能

生成日:2025/05/04