CategoriesAndroidFlutteriOSProgrammingSwift

Berkenalan dengan Sealed Class

Perkembangan bahasa pemrograman semakin memudahkan programmer untuk membuat Aplikasi. semakin banyak metode yang membantu meningkatkan efisiensi dan makin memudahkan dalam Maintenance Aplikasi. salah satu hasil perkembangan tersebut adalah “Sealed Class”.

Sealed Class adalah class yang semua turunannya harus di definisikan di dalam class tersebut. jadi tidak boleh menurunkan class tersebut di luar dari sealed class yang dibuat.

masih bingung dengan pengertiannya ? coba perhatikan contoh di bawah ini

sealed class Result {
    class Loading() : Result()
    class Success(val data: String) : Result()
    class Failed(val message: String) : Result()
}

pada contoh di atas kita melihat ada beberapa class yang di bungkus dalam sealed class Result, dan semua class yang dibungkus meng extends Result.

jika kita ingin mengakses sealed class, kita bisa menggunakan conditional seperti if atau switch atau when. seperti contoh berikut ini :

fun processResult(result: Result): String {
    return when (result) {
        is Result.Success -> "Data: ${result.data}"
        is Result.Error -> "Error: ${result.error.message}"
    }
}

pada contoh diatas untuk mengambil value dari hasil yang berasal dari sealed class kita hanya perlu mengakses property dari class yang sudah di definisikan sesuai dengan kondisi class yang terpenuhi.

lalu bagaimana cara menentukan nilai dari sealed class ? kita hanya perlu memanggil class tersebut diikuti dengan class yang dibutuhkan. seperti contoh di bawah ini :

fun main() {
    val successResult = Result.Success("Hello, World!")
    val errorResult = Result.Error(Exception("Something went wrong"))
    val loadingResult = Result.Loading

    processResult(successResult)
    processResult(errorResult)
    processResult(loadingResult)
}

cukup mudah bukan atau anda merasa familiar ? mungkin anda benar, sealed class agak mirip dengan enum. lalu apa bedanya dengan enum ?

contoh enum

enum Result {
  LOADING,
  SUCCESS,
  FAILED
}

jika kita lihat, enum tidak memiliki property seperti sealed class. enum hanya berupa value yang bisa di cek menggunakan conditional tapi tidak memuat property.

Kesimpulan

Berdasarkan contoh diatas Sealed class cocok digunakan untuk manajemen status dan penanganan hasil dari http request karena bisa memuat property dengan type data apapun.

namun Sealed Class juga mempunyai beberapa kekurangan seperti :

  • Ukuran class yang semakin besar karena semua class turunan harus di definisikan di satu sealed class saja, kita tidak bisa memecah class tersebut menjadi beberapa bagian. sehingga jika semakin banyak class turunannya semakin besar ukuran file nya.
  • Kurang Fleksibel, karena Sealed Class tidak bisa meng extends class dari luar. seperti namanya jika di translate ke bahasa indonesia yang berarti “Kelas Tertutup”

namun di luar kekurangan yang ada, sealed class bisa membuat kode kita lebih clean dan maintainable.

Published by Ahmad Saifur Ridlo

Android Developer at Algostudio.net