Ce face emptyList
emptyList(), emptyMap() și emptySet() întorc colecții fără elemente, doar pentru citire. Sunt potrivite ca valoare implicită a unui parametru sau ca rezultat al unei funcții care nu a găsit nimic, în locul lui null.
Tipul trebuie să fie cunoscut: fie îl scrii între <> (emptyList<String>()), fie îl deduce compilatorul din context (tipul de retur al funcției, tipul variabilei).
Pe o colecție goală, size este 0, isEmpty() este true, iar parcurgerea cu for nu face nimic. Nu poți adăuga elemente; pentru asta creezi o colecție cu mutableListOf().
Ce returnează
O List, un Map sau un Set gol.
Exemple
Exemplul 1: Rezultat gol în loc de null
Funcția întoarce o listă goală când orașul nu este cunoscut. Codul care o apelează nu trebuie să verifice null.
fun cartiere(oras: String): List<String> =
when (oras) {
"Iași" -> listOf("Copou", "Tătărași", "Nicolina")
"Cluj" -> listOf("Mănăștur", "Gheorgheni")
else -> emptyList()
}
fun main() {
for (oras in listOf("Iași", "Sibiu")) {
val lista = cartiere(oras)
println("$oras: ${lista.size} cartiere $lista")
}
}
Rezultat
Iași: 3 cartiere [Copou, Tătărași, Nicolina]
Sibiu: 0 cartiere []
Exemplul 2: Map și mulțime goale
Tipul se scrie explicit, pentru că nu există elemente din care să fie dedus.
fun main() {
val preturi = emptyMap<String, Double>()
val etichete = emptySet<String>()
println(preturi)
println(etichete)
println(preturi.isEmpty())
println(preturi["pâine"])
println("nou" in etichete)
}
Rezultat
{}
[]
true
null
false
Exemplul 3: Valoare implicită pentru un parametru
Dacă nu dăm reducerile, parametrul primește un map gol și funcția merge mai departe fără verificări speciale.
fun pretFinal(produs: String, pret: Double, reduceri: Map<String, Int> = emptyMap()): Double {
val procent = reduceri[produs] ?: 0
return pret * (100 - procent) / 100
}
fun main() {
println(pretFinal("caiet", 12.0))
println(pretFinal("caiet", 12.0, mapOf("caiet" to 25)))
}
Rezultat
12.0
9.0
Greșeli frecvente
- Scrii
val l = emptyList()fără tip și fără context: compilatorul nu poate deduceT. - Încerci să adaugi într-o listă goală obținută cu
emptyList(). Pentru adăugare ai nevoie demutableListOf<T>().
Comenzi înrudite
listOf: Creează o listă din elementele date: listOf pentru citire, mutableListOf și arrayListOf pentru o listă pe care o modifici.mapOf: Creează un map (dicționar cheie → valoare) din perechi scrise cu „to”; mutableMapOf dă unul pe care îl poți modifica.setOf: Creează o mulțime: o colecție fără duplicate, în care verifici rapid dacă un element există.Collection.isEmpty: isEmpty/isNotEmpty verifică dacă o colecție are elemente; orEmpty transformă null în colecție goală; ifEmpty dă o alternativă.