Skip to content

Instantly share code, notes, and snippets.

@anantyan
Last active September 7, 2023 15:20
Show Gist options
  • Save anantyan/32e9fe28e1abdda96d323a831f716ee2 to your computer and use it in GitHub Desktop.
Save anantyan/32e9fe28e1abdda96d323a831f716ee2 to your computer and use it in GitHub Desktop.
Perbedaan antara mensimulasikan kode program sealed class dan enum
// ENUM CLASS
// Definisi Resource dengan enum class
enum class Status {
SUCCESS,
ERROR,
LOADING
}
data class Resource(val status: Status, val data: String? = null, val message: String? = null)
// Simulasi request data
fun fetchDataFromNetwork(): Resource {
return try {
// ... kode untuk memuat data dari jaringan
Resource(Status.SUCCESS, "Data berhasil dimuat")
} catch (e: Exception) {
Resource(Status.ERROR, message = "Terjadi kesalahan saat memuat data")
}
}
// Menggunakan Resource di ViewModel atau fungsi lain
val resource = fetchDataFromNetwork()
when (resource.status) {
Status.SUCCESS -> println(resource.data)
Status.ERROR -> println(resource.message)
Status.LOADING -> println("Memuat data...")
}
// SEALED CLASS
// Definisi Resource dengan sealed class
sealed class Resource<T> {
class Success<T>(val data: T) : Resource<T>()
class Error<T>(val message: String, val throwable: Throwable? = null) : Resource<T>()
class Loading<T> : Resource<T>()
}
// Simulasi request data
fun fetchDataFromNetwork(): Resource<String> {
return try {
// ... kode untuk memuat data dari jaringan
Resource.Success("Data berhasil dimuat")
} catch (e: Exception) {
Resource.Error("Terjadi kesalahan saat memuat data", e)
}
}
// Menggunakan Resource di ViewModel atau fungsi lain
val resource = fetchDataFromNetwork()
when (resource) {
is Resource.Success -> println(resource.data)
is Resource.Error -> println(resource.message)
is Resource.Loading -> println("Memuat data...")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment