Kotlinのsealed classは、多くの開発者にとってはあまり知られていない特殊なクラスです。この記事では、Kotlinのsealed classについて詳しく説明し、その使い方と利点を示します。
まず、sealed classは抽象クラスの一種ですが、特定の継承先を制限するために設計されています。具体的なコード例を見てみましょう。
sealed class Shape {
class Circle(val radius: Double) : Shape()
class Rectangle(val width: Double, val height: Double) : Shape()
object Empty : Shape()
}
この例では、Shape
というsealed classを定義し、それに3つの派生クラスを持たせています。Circle
とRectangle
は具体的な図形を表し、Empty
は空の図形を表します。sealed classの特徴は、このクラスの派生クラスがすべて同じファイル内で定義されている必要があることです。これにより、sealed classの継承先を制限し、安全性を向上させることができます。
さて、sealed classの利点は何でしょうか?それを理解するために、例を続けてみましょう。以下のコードは、sealed classを使用して図形の面積を計算する関数です。
fun calculateArea(shape: Shape): Double {
return when (shape) {
is Shape.Circle -> Math.PI * shape.radius * shape.radius
is Shape.Rectangle -> shape.width * shape.height
is Shape.Empty -> 0.0
}
}
この関数は、sealed classの派生クラスを全て網羅的に処理しています。sealed classを使用することで、コンパイラが警告を出すことなく、全てのケースを網羅的に処理することができます。
さらに、sealed classを使うことで、エンハンスされた型安全性を得ることができます。例えば、新しい図形を追加する場合、コンパイル時に既存のコードで未処理のケースがあるかどうかを確認できます。
この記事では、Kotlinのsealed classの基本的な概念と利点について説明しました。sealed classは、特定の状況で非常に強力なツールとなることがあります。それを使いこなすことで、コードの安全性を向上させ、保守性を高めることができます。