Gestiunea Funcțională a Erorilor în Kotlin: Tipul Result, runCatching și Arrow Either în Kotlin

Ghid complet pentru tratarea funcțională a erorilor în Kotlin: utilizarea tipului standard Result<T>, funcția utilitară runCatching, compoziția cu fold și migrarea către tipuri algebrice cu Arrow Either.

Sintaxă
runCatching { ... }.fold(onSuccess = { ... }, onFailure = { ... }) | mapCatching

Aruncarea excepțiilor netratate (throw Exception(...)) introduce fluxuri invizibile de control: semnătura funcției nu indică faptul că un eșec este posibil, iar dezvoltatorii uită frecvent să împacheteze apelurile în blocuri try/catch, ducând la prăbușirea aplicației în producție.

Stilul modern de dezvoltare în Kotlin promovează Railway-Oriented Programming: erorile sunt modelate ca valori returnate explicite prin tipul încorporat Result<T> sau prin biblioteca de referință Arrow.

Tratarea Sigură a Erorilor cu runCatching și Result<T>
import java.net.URL

data class CursValutar(val moneda: String, val rata: Double)

fun preiaCursValutar(moneda: String): Result {
    // runCatching capturează automat orice Throwable și îl transformă într-o instanță de Result:
    return runCatching {
        if (moneda.isBlank()) throw IllegalArgumentException("Moneda nu poate fi vidă!")
        
        // Simulăm un apel de rețea:
        val raspuns = "RON:4.97"
        val parti = raspuns.split(":")
        CursValutar(parti[0], parti[1].toDouble())
    }
}

fun main() {
    val rezultat = preiaCursValutar("EUR")

    // Consumul elegant cu metoda .fold():
    rezultat.fold(
        onSuccess = { curs ->
            println("Curs preluat cu succes: 1 ${curs.moneda} = ${curs.rata} RON")
        },
        onFailure = { eroare ->
            System.err.println("Eroare la preluarea cursului valutar: ${eroare.message}")
        }
    )

    // Transformări sigure de flux cu map / recover:
    val valoareFallback: Double = rezultat
        .map { it.rata }
        .getOrDefault(5.00) // Furnizează valoare implicită în caz de eșec
}

Trecerea la Nivelul Enterprise cu Arrow Either

Deși Result<T> este excelent pentru operațiuni simple, el este limitat la capturarea clasei Throwable. Pentru a modela erori tipizate de afaceri (fără costul generării unui StackTrace de sistem), dezvoltatorii enterprise folosesc tipul Either<EroareDomeniu, Succes> din biblioteca Arrow:

sealed interface EroarePlata {
    data object FonduriInsuficiente : EroarePlata
    data object CardExpirat : EroarePlata
}

// Semnătura funcției arată clar: returnează FIE o EroarePlata, FIE o Chitanță validă!
fun debiteazaCont(suma: Double): Either<EroarePlata, Chitanta>
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Gestiunea Funcțională a Erorilor în Kotlin: Tipul Result, runCatching și Arrow Either

Ai o nelămurire despre utilizarea comenzii Gestiunea Funcțională a Erorilor în Kotlin: Tipul Result, runCatching și Arrow Either sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.