takeIf în Kotlin

Returnează obiectul dacă îndeplinește condiția și null altfel; takeUnless face invers.

Sintaxă
inline fun <T> T.takeIf(predicate: (T) -> Boolean): T?
inline fun <T> T.takeUnless(predicate: (T) -> Boolean): T?

Ce face takeIf

valoare.takeIf { conditie } verifică o condiție despre valoare. Dacă este adevărată, returnează valoarea; dacă nu, returnează null. Așa transformi o verificare într-o valoare care poate lipsi, pe care o combini apoi cu ?., ?.let sau ?:.

takeUnless este opusul: returnează valoarea când condiția este falsă. x.takeUnless { it.isBlank() } înseamnă „ia textul, cu excepția cazului în care e gol”.

Parametri

Parametru Descriere
predicate: (T) -> Boolean Condiția; primește valoarea ca it.

Ce returnează

Valoarea (T?) sau null, după rezultatul condiției.

Exemple

Exemplul 1: Validarea unei vârste citite ca text

toIntOrNull dă null pentru text care nu e număr, iar takeIf dă null pentru vârste în afara intervalului. Elvis-ul dă mesajul de eroare.

fun varstaValida(text: String): String {
    val varsta = text.toIntOrNull()?.takeIf { it in 0..120 }
    return varsta?.let { "Vârstă acceptată: $it" } ?: "„$text” nu este o vârstă validă"
}

fun main() {
    println(varstaValida("34"))
    println(varstaValida("150"))
    println(varstaValida("abc"))
}

Rezultat

Vârstă acceptată: 34
„150” nu este o vârstă validă
„abc” nu este o vârstă validă

Exemplul 2: takeUnless pentru a ignora textele goale

fun main() {
    val campuri = listOf("Ana", "   ", "Brașov", "")
    for (camp in campuri) {
        val valoare = camp.takeUnless { it.isBlank() } ?: "(gol)"
        println("[$valoare]")
    }
}

Rezultat

[Ana]
[(gol)]
[Brașov]
[(gol)]

Greșeli frecvente

  • Uiți că rezultatul poate fi null și scrii x.takeIf { ... }.length. Nu compilează; folosește ?. sau ?:.
  • Pui în condiție o acțiune cu efect (afișare, scriere). Condiția se rulează mereu, chiar dacă rezultatul nu e folosit; păstreaz-o simplă.

Comenzi înrudite

  • let: Rulează un bloc de cod cu valoarea ca parametru it și returnează rezultatul blocului; des folosit cu ?. pentru valori null.
  • String.toInt: Transformă un text în număr întreg; toInt aruncă excepție la text invalid, toIntOrNull returnează null.
  • String.ifBlank: ifBlank înlocuiește un text gol sau doar cu spații cu o valoare implicită; orEmpty transformă null în „”.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: takeIf

Ai o nelămurire despre utilizarea comenzii takeIf 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.