En este tutorial aprenderás sobre la función none
en Kotlin para determinar si ninguno de los elementos de una colección cumple una condición.
La Función none( )
La función none
hace parte del grupo de utilidades para pruebas de predicados como any
y all
. Su propósito es determinar si ninguno de los elementos cumple con el predicado que pases como parámetro.
Su sintaxis es similar a las funciones de predicados mencionadas. Se recibe un tipo función como parámetro y el retorno es un booleano producto de la evaluación del mismo:
// Arreglos
inline fun <T> Array<out T>.none(
predicate: (T) -> Boolean
): Boolean
// Iterables
inline fun <T> Iterable<T>.none(
predicate: (T) -> Boolean
): Boolean
// Mapas
inline fun <K, V> Map<out K, V>.none(
predicate: (Entry<K, V>) -> Boolean
): Boolean
También puedes usar su forma sin predicado, la cual retorna true
si la colección no tiene elementos.
fun main() {
println(emptyArray<String>().none()) // true
println(arrayOf("ab","bc","cd").none()) // false
}
Ejemplo De none Con Lista
Considera una lista con las medidas de decibeles de un área en específico a lo largo de todo un día. Se necesita determinar si el nivel de ruido no ha excedido a 60dB. Usando la función none
podríamos aplicar el predicado como sigue:
fun main() {
val measurements = listOf(54.1, 51.3, 54.4, 53.0, 52.2, 53.9, 52.4)
val isGreaterThan60 = { db: Double -> db > 60.0 }
println(measurements.none(isGreaterThan60)) // true
}
En el ejemplo anterior almacenamos el predicado en la variable isGreaterThan60
. Esto nos permite leer a la función none{
} como «¿ninguno de los elementos en measurements es mayor a 60 decibeles?».
Ya que cada medida de la lista no cumple con el predicado, el resultado será true
.
Ejemplo De none Con Mapa
Tomemos como ilustración un mapa con las entradas de texto diligenciadas en un formulario para un cliente. Sobre este deseamos determinar que ningún elemento sea nulo o esté en blanco:
import kotlin.collections.Map.Entry
fun main() {
val clientData = mapOf(
"name" to "James",
"phone" to "3005000",
"country" to "Colombia",
"city" to null
)
val isInvalidContent = { info: Entry<String, String?> ->
info.value.isNullOrBlank()
}
println(clientData.none(isInvalidContent)) // false
}
El predicado se basa en el uso de la función de extensión isNullOrBlank()
, que determina si una secuencia de caracteres es null
o solo contiene espacios en blanco.
Al invocar a none
desde el mapa puedes leer la sentencia como «¿ninguna de las entradas en clientData
posee contenido inválido?
Evidentemente a causa del par {city=null}
el retorno será false
.
Como ves, la función none
en Kotlin es usada para leer nuestro código en un sentido que refirme algo que no queremos que suceda.