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
returnpe un drum al unei funcții cu rezultat: eroareamissing return statement. Corpul cu acolade nu returnează automat ultima expresie (doar lambda-urile o fac). returnînforEachcând vrei doar să sari un element: iese din toată funcția. Scriereturn@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.