if și else în Kotlin

Execută un bloc doar dacă o condiție este adevărată; în Kotlin if este și expresie, deci întoarce o valoare.

Sintaxă
if (conditie) {
    // ...
} else if (alta) {
    // ...
} else {
    // ...
}

val x = if (conditie) a else b   // if ca expresie

Ce face if și else

if verifică o condiție de tip Boolean pusă între paranteze și execută blocul următor doar dacă ea este adevărată. else tratează cazul contrar, iar else if adaugă alte condiții, verificate pe rând de sus în jos. La o singură instrucțiune acoladele sunt opționale.

În Kotlin if este o expresie: are o valoare, pe care o poți pune într-o variabilă sau returna. val maxim = if (a > b) a else b. Din acest motiv Kotlin nu are operatorul ternar ?: din Java sau C. Când if e folosit ca expresie, ramura else este obligatorie.

Când blocurile au mai multe rânduri, valoarea blocului este ultima expresie din el. Pentru multe ramuri, when este de obicei mai clar decât un lanț lung de else if.

Parametri

Parametru Descriere
conditie O expresie Boolean. Nu se acceptă numere sau texte.

Ce returnează

Folosit ca expresie: valoarea ramurii executate (ultima expresie din bloc).

Exemple

Exemplul 1: Calificativul unei note

Se execută doar prima ramură a cărei condiție este adevărată.

fun main() {
    for (nota in listOf(10, 8, 5, 3)) {
        if (nota >= 9) {
            println("$nota: foarte bine")
        } else if (nota >= 7) {
            println("$nota: bine")
        } else if (nota >= 5) {
            println("$nota: suficient")
        } else {
            println("$nota: insuficient")
        }
    }
}

Rezultat

10: foarte bine
8: bine
5: suficient
3: insuficient

Exemplul 2: if ca expresie (în loc de operatorul ternar)

Valoarea lui if se pune direct în variabilă sau în text.

fun main() {
    val total = 230.0
    val transport = if (total >= 200) 0.0 else 15.0
    println("Comandă: $total lei, transport: $transport lei")
    val stare = if (total + transport > 250) "comandă mare" else "comandă obișnuită"
    println(stare)
}

Rezultat

Comandă: 230.0 lei, transport: 0.0 lei
comandă obișnuită

Exemplul 3: Blocuri cu mai multe rânduri

Valoarea fiecărei ramuri este ultima expresie din bloc; rândurile dinaintea ei se execută normal.

fun pretBilet(varsta: Int): Double {
    val pret = if (varsta < 7) {
        println("  copil sub 7 ani: gratuit")
        0.0
    } else if (varsta >= 65) {
        println("  pensionar: reducere 50%")
        20.0 * 0.5
    } else {
        20.0
    }
    return pret
}

fun main() {
    println("Ana (5 ani): ${pretBilet(5)} lei")
    println("Gheorghe (70 de ani): ${pretBilet(70)} lei")
    println("Mihai (30 de ani): ${pretBilet(30)} lei")
}

Rezultat

  copil sub 7 ani: gratuit
Ana (5 ani): 0.0 lei
  pensionar: reducere 50%
Gheorghe (70 de ani): 10.0 lei
Mihai (30 de ani): 20.0 lei

Greșeli frecvente

  • val x = if (a > b) a fără else: când if este expresie, else este obligatoriu (eroarea 'if' must have both main and 'else' branches).
  • Căutarea operatorului conditie ? a : b: nu există în Kotlin. Scrie if (conditie) a else b.
  • Lanțuri lungi de else if care compară aceeași variabilă: when este mai scurt și mai clar.

Comenzi înrudite

  • when: Alege o ramură după valoarea unei expresii sau după prima condiție adevărată; înlocuiește switch din alte limbaje.
  • true și false (Boolean): true și false sunt cele două valori ale tipului Boolean, folosite în condiții, comparații și operatori logici.
  • return: Încheie funcția curentă și întoarce o valoare apelantului; cu etichetă (return@forEach) iese doar din lambda.