La Función all En Kotlin

ANUNCIO
Loading...

En este tutorial aprenderás acerca del uso de la función all en Kotlin para determinar si todos los elementos de una colección satisfacen un predicado.

La Función all()

Usa la función all{} en Kotlin con el fin de averiguar si todos los elementos de una colección cumplen la condición expresada en un predicado.

La sintaxis para aplicarla es la siguiente:

// Arrays inline fun <T> Array<out T>.all( predicate: (T) -> Boolean ): Boolean // Iterables inline fun <T> Iterable<T>.all( predicate: (T) -> Boolean ): Boolean // Mapas inline fun <K, V> Map<out K, V>.all( predicate: (Entry<K, V>) -> Boolean ): Boolean
Lenguaje del código: Kotlin (kotlin)

Al igual que any{}, la función all recibe un tipo función como parámetro (predicate), lo que posibilita pasar una lambda con la condición a cumplir por los elementos.

Cuando se invoca a all desde una colección vacía, sea cual sea el predicado que pases, el resultado será true por el principio de la verdad vacua.

fun main() { // verdad vacua println(emptyList<Int>().all { it == 0 }) // true }
Lenguaje del código: Kotlin (kotlin)

Ejemplo De all Con Lista

Considera una lista de Strings con nombres de animales para la cual deseamos saber si todas cumplen la restricción de tener tres o más caracteres:

fun main() { val animalNames = listOf("Búho", "León", "Zebra", "Perro", "Boa", "Ñu") println(animalNames.all { name -> name.length >= 3 }) // false println(animalNames.all { it.length >= 3 }) // false }
Lenguaje del código: Kotlin (kotlin)

En el ejemplo anterior el resultado es false. No todos cumplen al verificar la igualdad de la propiedad length con tres ("Ñu").

Recuerda que si el contexto es lo suficiente legible y claro, puedes usar la referencia it para acortar al predicado como en la línea 3.

Ejemplo De all Con Rango

Supongamos que deseamos crear una función de extensión para los rangos enteros donde se determine si todos los elementos son positivos.

Existen diferentes formas de llegar a este resultado, pero ya que estamos hablando de la función all{ } creemos una con ella:

fun IntRange.allPositives(): Boolean { return all { numberInRange -> numberInRange > 0 } } fun main() { println((1..10).allPositives()) // true println((-1..2).allPositives()) // false println((-3..-1).allPositives()) // false }
Lenguaje del código: Kotlin (kotlin)

La función allPositives() llama a all usando como tipo recibidor a IntRange. De esta forma es posible llamar desde cualquier rango entero al método.

Ejemplo De all Con Mapa

Tomemos como ilustración un mapa que representa una mano con cartas del jugador. El objetivo es determinar si solo hay cartas impares en la mano:

import kotlin.collections.Map.Entry fun main() { val hand = mapOf( "Matar" to 3, "Rastreo" to 1, "Disparo mortal" to 3, "Compañero animal" to 3 ) val isOdd = { card: Entry<String, Int> -> card.value % 2 == 0 } println("¿Hay solo costes impares en la mano?: ${hand.all(isOdd)}") }
Lenguaje del código: Kotlin (kotlin)

Salida:

¿Hay solo costes impares en la mano?: true
Lenguaje del código: JavaScript (javascript)

Evidentemente las entradas de inicio solo son costos uno y tres, por lo que la función all retornará en true, al pasar la lambda almacenada en isOdd.

¿Ha sido útil esta publicación?

ANUNCIO
Loading...