return în Kotlin

Încheie funcția curentă și întoarce o valoare apelantului; cu etichetă (return@forEach) iese doar din lambda.

Sintaxă
return valoare
return               // în funcții care întorc Unit
return@eticheta      // doar din lambda
fun f(x: Int) = x * 2   // corp expresie, fără return

Ce face return

return oprește funcția imediat și trimite valoarea înapoi la locul de unde a fost apelată. O funcție cu tip de rezultat declarat (: Int) trebuie să returneze pe orice drum. Funcțiile fără rezultat întorc Unit; în ele return fără valoare doar încheie funcția mai devreme.

Funcțiile scurte se scriu fără acolade și fără return, cu corp expresie: fun dublu(x: Int) = x * 2. Tipul rezultatului se deduce automat.

Într-un lambda, return simplu iese din funcția care îl conține (dacă lambda-ul este dat unei funcții inline, ca forEach), nu doar din lambda. Pentru a ieși doar din lambda folosești eticheta: return@forEach. return este o expresie de tip Nothing, deci poate sta după ?:: val x = y ?: return.

Exemple

Exemplul 1: Returnare timpurie

Cazurile greșite sunt tratate la început cu return, ca restul funcției să fie simplu.

fun plata(sold: Double, suma: Double): String {
    if (suma <= 0) return "sumă invalidă"
    if (suma > sold) return "fonduri insuficiente: lipsesc ${suma - sold} lei"
    return "plată reușită, rămân ${sold - suma} lei"
}

fun dublu(x: Int) = x * 2

fun main() {
    println(plata(150.0, 0.0))
    println(plata(150.0, 200.0))
    println(plata(150.0, 49.5))
    println(dublu(21))
}

Rezultat

sumă invalidă
fonduri insuficiente: lipsesc 50.0 lei
plată reușită, rămân 100.5 lei
42

Exemplul 2: return din lambda: cu și fără etichetă

În primaNotaMica, return iese din toată funcția. În afiseazaValide, return@forEach sare doar peste elementul curent.

fun primaNotaMica(note: List<Int>): Int? {
    note.forEach {
        if (it < 5) return it
    }
    return null
}

fun afiseazaValide(note: List<Int>) {
    note.forEach {
        if (it !in 1..10) return@forEach
        print("$it ")
    }
    println()
}

fun main() {
    val note = listOf(8, 4, 12, 3, 10)
    println("Prima notă sub 5: ${primaNotaMica(note)}")
    afiseazaValide(note)
}

Rezultat

Prima notă sub 5: 4
8 4 3 10

Exemplul 3: return după elvis (?:)

Dacă textul nu este număr, ?: return încheie funcția. După acel rând, cantitate este sigur Int.

fun proceseaza(comanda: String) {
    val parti = comanda.split(" ")
    val cantitate = parti.getOrNull(0)?.toIntOrNull() ?: return println("comandă greșită: '$comanda'")
    val produs = parti.getOrNull(1) ?: return println("lipsește produsul")
    println("Pregătesc $cantitate x $produs")
}

fun main() {
    proceseaza("3 covrigi")
    proceseaza("multe gogoși")
    proceseaza("2")
}

Rezultat

Pregătesc 3 x covrigi
comandă greșită: 'multe gogoși'
lipsește produsul

Greșeli frecvente

  • Lipsa lui return pe un drum al unei funcții cu rezultat: eroarea missing return statement. Corpul cu acolade nu returnează automat ultima expresie (doar lambda-urile o fac).
  • return în forEach când vrei doar să sari un element: iese din toată funcția. Scrie return@forEach.
  • fun suma(a: Int, b: Int) = { a + b }: cu = și acolade funcția întoarce un lambda, nu suma. Scrie = a + b.

Comenzi înrudite

  • fun: fun declară o funcție: un bloc de cod cu nume, care primește parametri și poate returna un rezultat.
  • lambda: O lambda este o funcție fără nume, scrisă între acolade, pe care o poți pune într-o variabilă sau trimite altei funcții.
  • break și continue: break oprește bucla curentă; continue sare la pasul următor. Cu etichete (nume@) pot opri o buclă exterioară.
  • null și null safety (?. ?: !!): null înseamnă „nicio valoare”. Kotlin separă tipurile care acceptă null (String?) și oferă ?., ?: și !! pentru ele.