La Función none En Kotlin

ANUNCIO
Loading...

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.

¿Ha sido útil esta publicación?