Juan Carlos García Flores
Mi ejemplo usando un input .toInt()
Juan Carlos García Flores
Buen día lo ocupe para convertirlo a tipo numérico
¿Qué es la estructura de control when?
La estructura de control when en Kotlin puede ser una herramienta poderosa en la programación al permitir comparar una sola condición y ejecutar varios bloques de código dependiendo del resultado de esa condición. Es una alternativa más legible y organizada frente al uso de múltiples sentencias if.
¿Cómo se utiliza when en Kotlin?
Para comprender cómo funciona when, exploremos su utilización con un ejemplo concreto donde trabajamos con una variable que representa un color.
val nombreColor = "amarillo" when (nombreColor) { "amarillo" -> println("El amarillo es el color de la alegría") "rojo" -> println("El rojo simboliza el calor") else -> println("Error, no tengo información del color") }
nombreColor.when para comparar el valor de nombreColor.else para manejar valores no contemplados en los casos anteriores.¿Cómo comparar múltiples valores en when?
Imagina que necesitas manejar varios tonos de un color similar, como rojo y carmesí. En lugar de repetir el mismo bloque de código, when facilita la agrupación de valores.
when (nombreColor) { "amarillo" -> println("El amarillo es el color de la alegría") "rojo", "carmesí" -> println("El rojo simboliza el calor") else -> println("Error, no tengo información del color") }
¿Cómo funciona when con rangos de valores?
when no se limita a cadenas de texto. Puede trabajar también con enteros y rangos de valores, lo cual es extremadamente útil.
val codigo = 200 when (codigo) { in 200..299 -> println("Todo ha ido bien") in 400..500 -> println("Algo ha fallado") else -> println("Código desconocido, algo ha fallado") }
in para verificar si un número está dentro de un rango. Los rangos se especifican con ...¿Puede when asignar valores?
Como if, when puede asignar valores a variables. Aquí hay un ejemplo en relación con la disponibilidad de tallas de zapatos:
val tallaZapatos = 41 val mensaje = when (tallaZapatos) { 41, 43 -> "Tenemos disponible" 42, 44 -> "Casi no nos queda" 45 -> "Lo siento, no tenemos disponible" else -> "Estos zapatos solo vienen en algunas tallas" } println(mensaje)
when determina el contenido de la variable mensaje basada en el valor de tallaZapatos.when debe cubrir todas las posibilidades, utilizando else si es necesario para otros casos no definidos.Consejos prácticos para usar when
when es a menudo más legible que múltiples if y es recomendable usarlo cuando una sola variable es comparada contra valores múltiples.Continúa explorando y practicando para comprender cómo esta herramienta optimiza no solo el funcionamiento, sino también la claridad de tu código en Kotlin. ¡Sigue adelante, cada línea escrita es un paso más hacia el dominio de la programación!
Juan Carlos García Flores
Mi ejemplo usando un input .toInt()
Juan Carlos García Flores
Buen día lo ocupe para convertirlo a tipo numérico
When también se puede tilizar sin parametro y usarlo como condiciones if-else.
Juan Manuel Gudiel
Mi intento de una calculadora muy básica
Alan Díaz Díaz
Jeikoo Rico
Y como se prueba si no se puede abrir la aplicación?
Marianna Guedez
Vanesa Percy
Gracias, que gran aporte muy completo.
Vanesa Percy
Ese punto y coma al final de los println() ¿es opcional cierto?
Gabriel Adolfo Aguilar López
En este curso si que estoy entendiendo, y principalmente me está llamado muchísimo la atención. Como que le estoy agarrando amor a Kotlin <3
Hugo Andrés Portocarrero Inclán
verdad es muy amigable
Julio Gutierrez
Company_adminEs como un Switch case C++
hugo narvaez murcia
O tambien el Switch en JavaScript ejemplo:
switch(expression) { case x: // code block break; case y: // code block break; default: // code block }
Edgar Ocampo
Es la misma logica, solo cambia la sintaxis
Diego Xavier Vega Arias
Creo que me está empezando a gustar este lenguaje
Silvana Rolón
Moises Elias Valera Aguilar
Les dejo un fragmento de código para usar en el mundo real (cambiar como se muestran los miles y los millones en las redes sociales)
val mensaje = when(val code = 12000000){ in 1000..999999 -> (code/1000).toString()+"k likes" in 1000000..POSITIVE_INFINITY.toInt() -> (code/1000000).toString()+"m likes" else -> "Muy pocos likes 😔" } println(mensaje)
Oscar Ochoa
Muchas gracias Moises, muy buen aporte. Ese código tiene mucha utilidad e importancia para cientos de aplicaciones actuales
Alfonso G. Bastias
Este video no da para curso, con suerte para un blog de media pagina. que mal Platzi
Samuel Peña
Aqui un pequeño ejemplo de un programa que calcula la calificacion en letras en base a un numero:
Diego Alejandro Asencio Cuellar
se podria decir que el when es como un switch case ?
Giuseppe Vetri
ProfesorExactamente!
RAQUEL MARISOL
En pocas palabras when es un switch, pero esta más adecuado a uso coloquial, es más fácil pensar cuando sea esto haz esto.
Raul Alberto Jaimes
when es el Switch de kotlin: https://appgametutoriales.com/kotlin-funcion-switch-usando-un-ciclo-when/
Alan Díaz Díaz
Alan Díaz Díaz
mi humile aporte
println("type your size shoes") val sizeShoes = readLine().toString().toInt() val mesage = when(sizeShoes){ 41,43->"is available" 42,43->"few stocks!" 45->"Sorry is not available" else -> "These shoes are only available in size 42,43,44 & 45" } println(mesage)
Helí Fernando Jerez Rincón
Es posible combinar with y when para poder usar los métodos de la variable usada en with dentro de los clausulados del when. ejemplo
with(this.command) { return when { equals("@exclude") -> null startsWith("shell:") || startsWith("shell_new:") -> command.substring("shell:".length) else -> this.splitCommand().getGradleCommandToExecute(project) } }
Julia Gabriela Nieva Paredes
Es como un switch de Java mejorado
Lizardo Reyes
Asi es, es como un switch con poderes
Kevin Axel Hernández Santillán
otra forma de usar el when es sin la variable, por ejemplo..
when ("Rojo") { "Amarillo" -> println("EL amarillo es amarillo como el sol") "Rojo" -> println("El rojo es tan rojo como el rojo pasion") "Morado","Purpura" -> println("El morado es el mejor color del mundo yei") else -> println("Error, ponle color") }
Jesus Orlando Carcamo Posada
Pero no tendría mucho sentido ya que siempre se cumple que el color es "Rojo". El when se usa en casos de que esa variable tenga varios valores posibles conocidos
Carlos José González Juan
Normalmente se usa con un input. Le pedimos al usuario que introduzca un data y según el dato, se ejecuta el codigo de la condición. Muy útil en los menús.
Juan Diego Mamani
Hola, una consulta ... alguien sabe como puedo hacer para que .gitignore pueda identificar los archivos .lock generados al momento de compilar el proyecto ????
ESTRUCTURA DE CONTROL WHEN
Esta sentencia sirve en los casos que tengamos que comparar nuestra variable con múltiples opciones, ya que con la sentencia IF puede resultar poco optimo.
SINTAXIS WHEN
🔶 Iniciamos con la palabra reservada WHEN. 🔶 Entre parentesis () escribimos la variable o constante que queremos evaluar. 🔶 Posteriormente, vamos abrir y cerrar llaves {}, dentro de estas escribiremos las diferentes condiciones o casos. 🔶 Cada vez que creamos un condición deberemos escribir un guion y un mayor que (->), luego entre llaves {} colocaremos el bloque de codigo que se va a ejecutar, para ello se escribe println("el mensaje que va a salir por consola"). 🔶 Por ultimo, utilizaremos ELSE para definir un bloque de codigo en caso que ninguna de nuestras opciones coincidan con el valor de nuestra variable.
EJEMPLO CON STRING
<EJEMPLO: val pais = "Argentina" when(pais) { "Argentina" -> { println("El idioma de ${pais} es Español"); } "Alemania" -> { println("El idioma de ${pais} es Aleman"); } "EEUU" -> { println("El idioma de ${pais} es Ingles"); } "Brasil" -> { println("El idioma de ${pais} es Portugues"); } else -> { println("No conocemos el idioma"); } } >
Si tenemos varios casos que coinciden con el mismo valor, lo podremos unir en una única condición colocando una coma(,) al final de cada condición. Al trabajar con when y números enteros (Int) podremos usar rangos, para ello debemos:
🔶 Se utiliza la misma sintaxis. 🔶 En los casos o condiciones utilizaremos la palabra reservada IN. 🔶 Seguido del valor inicial. 🔶 Luego escribir dos puntos (..) y 🔶Por ultimo, colocamos el valor en donde se quiere que termine nuestro rango.
EJEMPLO CON NUMEROS ENTEROS
<val edad = 33; when(edad) { in 0..3 -> { println("Tu edad es ${edad} eres un bebe"); } in 4..11 -> { println("Tu edad es ${edad} eres un niño"); } in 12..18 -> { println("Tu edad es ${edad} eres un adolecente"); } in 19..59 -> { println("Tu edad es ${edad} eres un adulto"); } in 60..99 -> { println("Tu edad es ${edad} eres un adulto mayor"); } else -> { println("😲"); } }>
++La expresión when++ Para empezar, la puedes usar como cualquier switch básico. Imagina que por ejemplo tienes una vista y quieres mostrar un toast en función de su visibilidad.
Puedes hacer:
when(view.visibility){ View.VISIBLE -> toast("visible") View.INVISIBLE -> toast("invisible") else -> toast("gone") }
En la expresión when, else es lo mismo que el default del switch.
Pero when tiene algunas funcionalidad extra muy potentes:
Casting automático Si en el lado izquierdo compruebas que la clase es de un tipo, en el lado derecho ya la tendrás casteada sin necesidad de hacer nada extra:
when (view) { is TextView -> toast(view.text) is RecyclerView -> toast("Item count = ${view.adapter.itemCount}") is SearchView -> toast("Current query: ${view.query}") else -> toast("View type not supported") }
Además de comprobar el tipo, when puede mirar por ejemplo is un elemento está dentro de un rango o de una lista, con la palabra reservada in.
when sin argumentos Con esta opción, podemos hacer prácticamente la comprobación que queramos.
val res = when { x in 1..10 -> "cheap" s.contains("hello") -> "it's a welcome!" v is ViewGroup -> "child count: ${v.getChildCount()}" else -> "" }
Como when es una expresión, puede retornar un valor que se puede almacenar en una variable.
Un ejemplo aplicado a Android Los anteriores ejemplos son muy simplones y lejos de tener utilidad real.
Pero un ejemplo que me gusta mucho es el de consumir la respuesta en un onOptionsItemSelected().
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { R.id.home -> consume { navigateToHome() } R.id.search -> consume { MenuItemCompat.expandActionView(item) } R.id.settings -> consume { navigateToSettings() } else -> super.onOptionsItemSelected(item) }
La función consume es una función muy tonta que ejecuta la operación y devuelve true. La encuentro muy útil para los métodos del framework de Android que necesitan indicar si han consumido el resultado.
El código es muy simple:
inline fun consume(f: () -> Unit): Boolean { f() return true }
Conclusión Con la expresión when puedes hacer muy sencillo el código donde necesitas especificar el comportamiento en función de diferentes caminos, y donde los switch originales de Java se quedarían muy cortos.