El ciclo for en Kotlin es una estructura controlada de repetición que se utiliza para iterar sobre elementos dentro de una lista. A diferencia de otros lenguajes como Java, Kotlin simplifica el uso del ciclo for, lo que te permite mantener un código limpio y elegante. Veamos cómo implementar esta funcionalidad.
¿Cómo crear una lista en Kotlin?
Antes de emplear el ciclo for, necesitamos entender cómo crear una lista en Kotlin. La lista es una estructura de datos que no puede ser modificada una vez creada. Puedes construir una lista con la función listOf de la siguiente manera:
val listaDeFrutas =listOf("manzana","pera","frambuesa","durazno")
¿Qué es el ciclo for y cómo se usa?
El ciclo for te permite ejecutar un bloque de código para cada elemento en una lista. La sintaxis básica del ciclo for en Kotlin es:
for(fruta in listaDeFrutas){println("Voy a comerme una fruta llamada $fruta")}
En este fragmento de código, fruta actúa como una variable que representa cada elemento de listaDeFrutas uno por uno.
¿Qué es la función foreach y cómo se diferencia?
La función forEach es una extensión de listas en Kotlin utilizada para simplificar aún más el ciclo for. Permite ejecutar operaciones de forma más concisa al emplear funciones anónimas, lo que resulta en un código más compacto.
Crear y utilizar foreach
Utilizar forEach es sencillo y óptimo:
listaDeFrutas.forEach{ fruta ->println("Hoy voy a comer una fruta nueva que se llama $fruta")}
Aquí, forEach recorre cada elemento de listaDeFrutas, ejecutando el bloque de código proporcionado.
¿Cómo transformar listas con map en Kotlin?
La función map es una herramienta poderosa cuando quieres transformar cada elemento de una lista en un nuevo valor, con cada resultado almacenado en una nueva lista.
Convertir lista de strings a lista de enteros
Utilizar map es útil si, por ejemplo, deseas conocer la longitud de caracteres de cada fruta en la lista:
val caracteresDeFruta = listaDeFrutas.map{ fruta -> fruta.length
}
Esto crea una nueva lista, caracteresDeFruta, que contiene la longitud de cada string en listaDeFrutas.
¿Qué es la función filter y cómo se utiliza?
La función filter se usa en Kotlin para seleccionar elementos de una lista según una condición específica. Esta funcionalidad es esencial para depurar y seleccionar datos relevantes de una lista.
Filtrar la lista según condición
Imaginemos que queremos filtrar las frutas que tienen más de cinco caracteres:
val listaFiltrada = caracteresDeFruta.filter{ longitud -> longitud >5}
En el ejemplo anterior, listaFiltrada contendrá solo los valores de longitud mayores a cinco. Esto ilustra cómo filter ayuda a refinar listas de manera eficiente.
Recomendaciones para seguir aprendiendo Kotlin
Es crucial continuar explorando y practicando con estas funciones poderosas de Kotlin para desarrollar un entendimiento más profundo. Kotlin ofrece una variedad de funciones de extensión como map y filter que no solo simplifican el código sino que también mejoran su funcionalidad. ¡Sigue practicando y lleva tus habilidades de programación al siguiente nivel!
Dentro de ese proyecto 1, en la carpeta main, dan click derecho en la carpeta Kotlin y agregan un nuevo archivo .kt y lo nombran segun el tema, con eso copian los ejemplos y en esos mismos archivos comentan los apuntes
Pienso que está clase perfectamente pudo haber sido 3 diferentes clases. Ya que se mencionan conceptos que no se han mencionado antes como 'funciones anónimas' (Lambdas) y otras operaciones usando listas y lambdas como 'map' o 'filter'. Que para una persona que tiene experiencia previa en Java no es un problema, pero para alguien que recién empieza con Kotlin podría ser confuso
Totalmente de acuerdo, estoy super confundida. Los ejemplos estan faciles de entender pero empezar con temas que no se han visto hace que uno se desanime un poco
sí, pero igual en la sección de recursos de la clase encuentras lecturas con las que puedes complementar estos temas. recordemos que aparte de seguir los videos toca hacer la tarea
fun main(args:Array<String>){/* for// */ val listaDeFrutas:List<String>=listOf("Manzana","Pera","Frambuesa","Durazno")for(fruta in listaDeFrutas){println("Hoy voy a comerme una fruta llamada $fruta")} listaDeFrutas.forEach{ fruta ->println("Hoy voy a comerme una fruta nueva llamada $fruta")}/* map// */ val caracteresDeFruta:List<Int>= listaDeFrutas.map{ fruta -> fruta.length}println(caracteresDeFruta)/* filter// */var listaFiltrada = caracteresDeFruta.filter{ largoDeFruta -> largoDeFruta >5}println(listaFiltrada)}
La función map en Kotlin se utiliza para transformar los elementos de una colección en una nueva colección, aplicando una función a cada uno de los elementos.
La función map recibe como argumento una función que toma como parámetro un elemento de la colección y devuelve un nuevo elemento. La función map aplica esta función a cada elemento de la colección original y crea una nueva colección con los nuevos elementos devueltos por la función.
Aquí hay un ejemplo de cómo usar map en Kotlin:
val numeros =listOf(1,2,3,4,5)val numerosDobles = numeros.map{ it *2}println(numerosDobles)// Imprime "[2, 4, 6, 8, 10]"
La función filter en Kotlin se utiliza para filtrar los elementos de una colección según una determinada condición y devolver una nueva colección que contenga sólo los elementos que cumplan dicha condición.
La función filter recibe como argumento una función que toma como parámetro un elemento de la colección y devuelve un valor booleano que indica si el elemento debe ser incluido o no en la nueva colección. La función filter aplica esta función a cada elemento de la colección original y crea una nueva colección que contiene sólo los elementos que cumplan la condición especificada.
Aquí hay un ejemplo de cómo usar filter en Kotlin:
val numeros =listOf(1,2,3,4,5)val numerosPares = numeros.filter{ it %2==0}println(numerosPares)// Imprime "[2, 4]"
Buena pregunta Braulio, te explico por acá. La variable fruta cuando se define dentro de un ciclo for ya es por defecto val ya que esta no puede ser modificada y es creada dinamicamente por el compilador de Kotlin por detras una vez tu le asignas el nombre. Cuando se utiliza en una lambda se esta asignando un alias a la variable que devuelve esa lambda (Esto lo veras mas adelante en el curso) en ambos casos estas variables son inmutables.
Espero que te haya servido esta explicación :muscle:
Hola te ayudaría A COMPRENDER UN POCO MEJOR si buscas el Bucle Foreach en Google (Es parecido a este ciclo del Ejemplo). Pero en pocas Palabras imagina que La Lista que creamos es una lista en Plural y para Mostrar Lo que Contiene esta Lista Necesitamos Mostrala de manera de un dato a la vez Para eso creamos la variable fruta y esta variable almacena los datos de manera singular
El forEach es una función de extensión que recibe como parámetro una lambda :smiley: . Cuando una función solo recibe como parámetro una lambda se acostumbra a no usar parentesis y usar solo {} al final. Por eso puede parecer una lambda. Espero que haya resuelto tu duda 💚
Lo que no me gusta de Kotlin en VS Code (porque ahí lo utilizo con las extensiones) es que tarda un poco bastante en compilar. Pero todo bien, buen curso por cierto.
Hola, a la hora de programar, hay ciertas funciones que el programa no me las toma como tal, es decir, listof,random o foreach. Me aparecen como si fueran palabras comunes, alguien sabe por que puede ser?
Depende del contexto en el que estes llamando estas funciones puede no encontrarlas ya que no estan disponibles. Podrias mostrarnos un pantallazo para comentarte como podriamos solucionarlo?
Genial, es un gran codigo, aunque de mi lado viendo los recursos compartidos en la documentacion de Kotlin tome la siguiente alternativa para saber la posicion y obtener el valor:
varfruitsList:List<String>=listOf("Apple","Bannana","Avocado","Oranges","Pineapple","Gauva");//for each//(index as the position, value as name that has the index position) in nameToIterate. withIndex(): will get the valuefor((index, value )in fruitsList.withIndex())println("The fruit #$index is $value");```El resultado fue el siguiente:The fruit #0 is AppleThe fruit #1 is BannanaThe fruit #2 is AvocadoThe fruit #3 is OrangesThe fruit #4 is PineappleThe fruit #5 is GauvaSaludos, fue una gran clase!
El signo $ en la función print se utiliza para indicar el formateo de cadena. Esto significa que puede usarlo para reemplazar variables dentro de una cadena. Por ejemplo, si quieres imprimir una cadena con una variable, puedes hacer esto:
myname ="John"print(f"My name is ${myname}")
Esto imprimirá "My name is John". El signo $ se usa para indicar que el valor de la variable debe reemplazar la parte de la cadena.
fun main(args:Array<String>){//FUNCIONES DE EXTENSION//FOR : Ejecutar codigo para cada elemento de una lista//listOf(): Estructura de datos que no puede ser modificada val listaFrutas =listOf("manzana","pera","frambuesa","durazno")//recorrer la listafor(fruta in listaFrutas){println("hoy voy a comerme una fruta llamada $fruta")}//ahorrar lineas for(fruta in listaFrutas)println("hoy voy a comerme una fruta llamada $fruta")// foreach listaFrutas.forEach{ fruta ->println("hoy voy a comerme una fruta nueva llamada $fruta")}//map : Funciones poderosas en Kotlin, convertir lista de frutas directamente a enteros que contenga el tamaño de caracteres//List<Int>: lista de tipo entero val caracterFruta:List<Int>= listaFrutas.map{ fruta -> fruta.length}println(caracterFruta)//Filter : Filtrar según una condición val listaFiltrada = caracterFruta.filter{largoFruta -> largoFruta>5}println(listaFiltrada)}
Hay una frase de este curso que me causó conflicto:
El nombre de la variable es algo que podemos "modificar luego".
Yo creo que, según el tio bob, eso estaría muy mal.
Dejar cosas para después solo hace que la catástrofe del código sea inminente. Lo peor, parece que el instructor no leyó el libro de Clean Code.
Estoy muy molesto por eso!
Les dejo mi aporte de un caso de uso con frutas para una colección de Batidos y jugos de frutas
funmain(args: Array<String>){// Given a fruit list:val fruits =listOf("Patilla","Mango","Piña","Guanabana","Cambur")// foreach to execute an action for N number of elements in a list fruits.forEach{ fruit ->println("I love $fruit")}// map to return new list adding Smoothie to every string of fruitval fruitSmoothies = fruits.map{ fruit ->"$fruit Smoothie"}println("Fruit Smoothies: $fruitSmoothies")// map to return new list adding Smoothie to every string of fruitval fruitJuices = fruits.map{ fruit ->"$fruit Juice"}println("Fruit Juices: $fruitJuices")// use Kotlin built in plus method to create a list with both fruitSmoothies and fruitJuicesval fruitMenu = fruitSmoothies.plus(fruitJuices)println("Fruit Menu: $fruitMenu")// filter only Fruit Juices back from List using Kotlin built in contains methodval newfruitJuicesList = fruitMenu.filter{ fruit -> fruit.contains("Juice")}println("New Fruit Juices List: $newfruitJuicesList")}
Practicamente deje mi codigo complete de la siguiente forma:
varfruitsList:List<String>=listOf("Apple","Bannana","Avocado","Oranges","Pineapple","Gauva");//for each//(index as the position, value as name that has the index position) in nameToIterate. withIndex(): will get the valueprint("List of fruits: \n");for((index, value )in fruitsList.withIndex())println("The fruit #$index is $value");//Get the index and value, filtering by length greater than 5 characters using List, Pair for "tuples" val fruitsCharacter:List<Pair<Int,String>>= fruitsList.mapIndexed{ index, fruit ->if(fruit.length>5) index to fruit elsenull}.filterNotNull()//Filter null values// Print both index and value that were greater than 5 charactersprint("\n List of fruits that were greater than 5 characters: \n"); fruitsCharacter.forEach{(index, fruit)->println("Index: $index, Fruit: $fruit")}```es muy bueno ver en la seccion de comentarios todas las posibles soluciones, es bueno siempre aportar algo,saludos!!