Sealed classes


Sealed classes adalah fitur di Kotlin yang memungkinkan kita untuk mendefinisikan hierarki kelas yang terbatas. Ini berarti kita dapat membuat kelas yang memiliki subtype terlimit, dan ini sangat berguna untuk representasi keadaan yang berbeda dalam aplikasi kita. Mari kita bahas lebih dalam mengenai sealed classes.

1. Apa itu Sealed Classes?

Sealed classes adalah kelas abstrak yang hanya dapat diwarisi oleh kelas yang ada di dalamnya. Dengan menggunakan sealed classes, kita dapat mendefinisikan kumpulan subclass yang terbatas yang menjaga konsistensi alur kontrol dalam aplikasi.

2. Mengapa Menggunakan Sealed Classes?

  • Keamanan Tipe: Sealed classes menjamin bahwa semua subtype didefinisikan dalam file yang sama, sehingga dapat mencegah kesalahan ketika menambahkan subclass di tempat lain.
  • Pattern Matching: Dengan sealed classes, kita dapat memanfaatkan when expression untuk menangani semua kemungkinan subclass secara exhaustif.
  • Membaca dan Memelihara Kode: Sealed classes membuat kode lebih mudah dibaca dan dipelihara karena hierarki kelas yang jelas.

3. Cara Mendefinisikan Sealed Classes

Untuk mendefinisikan sealed classes, kita menggunakan keyword sealed. Berikut adalah contoh sederhana:

sealed class Result

data class Success(val data: String): Result()
data class Error(val exception: Exception): Result()
object Loading: Result()

Pada contoh di atas, kita mendefinisikan sealed class Result dengan tiga subclass: Success, Error, dan Loading.

4. Menggunakan Sealed Classes dengan when Expression

Salah satu cara untuk menangani berbagai subclass dari sealed classes adalah dengan menggunakan when expression. Berikut adalah contohnya:

fun handleResult(result: Result) {
    when (result) {
        is Success -> println("Data received: ${result.data}")
        is Error -> println("Error occurred: ${result.exception.message}")
        is Loading -> println("Loading...")
    }
}

5. Contoh Kasus Penggunaan

Sealed classes sangat berguna dalam pengembangan aplikasi, terutama ketika bekerja dengan status yang berbeda, seperti hasil dari operasi jaringan atau validasi data. Berikut adalah contoh lain yang lebih kompleks:

sealed class NetworkResponse

data class Success(val data: String): NetworkResponse()
data class Failure(val error: String): NetworkResponse()
object Loading: NetworkResponse()

fun handleResponse(response: NetworkResponse) {
    when (response) {
        is Success -> println("Response data: ${response.data}")
        is Failure -> println("Error: ${response.error}")
        Loading -> println("Fetching data...")
    }
}

6. Kesimpulan

Sealed classes adalah fitur yang sangat berguna di Kotlin untuk mengelompokkan tipe kelas yang terkait dengan cara yang aman dan terstruktur. Dengan memahami dan menerapkan sealed classes, kita dapat membuat kode yang lebih bersih dan lebih mudah dipelihara.