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.
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>
Întrebări & Exemple de Cod:
Gestiunea Funcțională a Erorilor în Kotlin: Tipul Result, runCatching și Arrow EitherAi o nelămurire despre utilizarea comenzii
Gestiunea Funcțională a Erorilor în Kotlin: Tipul Result, runCatching și Arrow Eithersau 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.