Pada kali ini kita akan membahas mengenai mapper yang biasa digunakan untuk melakukan convert model response ke pada model data untuk menghindari data null dari response API.

Contohnya seperti ini :

{ result -> result?.toValidateBank() ?: ValidateBank() }

Dimana teman-teman bisa melihat bahwa result dari API (ValidateBankResponse) diubah datanya ke class anti null (ValidateBank) sehingga akan terjadi minim force close pada aplikasi ketika ketemu data null karena kita akan memberi nilai default pada setiap variabel. Contohnya seperti ini :

fun ValidateBankAccountResponse.toValidateBank(): ValidateBank {
    return ValidateBank(
        id = id.orNull(),
        accountNo = accountNo.orNull(),
        bankName = bankName.orNull(),
        accountName = accountName.orNull(),
    )
}

Tentu saja jika tipe data yang kamu gunakan adalah String, kamu bisa menggunakan function bawaan kotlin seperti :

...
accountNo = accountNo.orEmpty(),
...

Namun, bagaimana dengan function Double, Int, dan lain-lainnya yang tidak mempunyai fungsi pemberian nilai default? maka kamu harus membuat function untuk mengamankan area itu. Berikut Fungsi yang bisa kamu gunakan :

fun Int?.orNull(defaultNull: Int = 0): Int = this ?: defaultNull

fun Long?.orNull(defaultNull: Long = 0): Long = this ?: defaultNull

fun Float?.orNull(defaultNull: Float = 0f): Float = this ?: defaultNull

fun Double?.orNull(defaultNull: Double = 0.0): Double = this ?: defaultNull

fun Boolean?.orNull(defaultNull: Boolean = false): Boolean = this ?: defaultNull

fun String?.orNull(defaultNull: String = "", functionIfNotNull: (s: String) -> String? = { null }): String = if (this != null) {
    if (!functionIfNotNull(this).isNullOrEmpty()) functionIfNotNull(this)
        ?: defaultNull
    else this
} else defaultNull

Semoga bermanfaat. Happy Code

Categorized in:

Tagged in:

,