1. Tại sao phải dùng Sealed class trong Kotlin?
2. Ví dụ:
sealed class Expr data class Const(val number: Double) : Expr() data class Sum(val e1: Expr, val e2: Expr) : Expr() object NotANumber : Expr()
fun eval(expr: Expr): Double = when(expr) { is Const -> expr.number is Sum -> eval(expr.e1) + eval(expr.e2) NotANumber -> Double.NaN // the `else` clause is not required because we've covered all the cases }
Hàm thực hiện 1 nhiệm vụ, nhưng tham số đầu vào có thể là các đối tượng khác nhau (Ví dụ hàm tihns khoảng cách, hàm tính tổng...). Với mỗi đối tượng đầu vào khác nhau, hàm thực hiện những cách tính khác nhau để ra kết quả cuôi cùng (khoảng cách, tổng...).
Thông qua Sealed Class giúp việc khai báo hàm trở nên đơn giản hơn bằng cách gói gọn các đối tượng đầu vào bằng một Lớp khép kính (Sealed Class)
2. Ví dụ:
sealed class Expr data class Const(val number: Double) : Expr() data class Sum(val e1: Expr, val e2: Expr) : Expr() object NotANumber : Expr()
fun eval(expr: Expr): Double = when(expr) { is Const -> expr.number is Sum -> eval(expr.e1) + eval(expr.e2) NotANumber -> Double.NaN // the `else` clause is not required because we've covered all the cases }
=>>
Thông qua Sealed Class hàm eval(expr: Expr) có thể nhận các đầu vào là một đối tượng lớp Const, Sum hoặc object.
Nhận xét