Last active
September 7, 2023 15:20
-
-
Save anantyan/32e9fe28e1abdda96d323a831f716ee2 to your computer and use it in GitHub Desktop.
Perbedaan antara mensimulasikan kode program sealed class dan enum
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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...") | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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