Mi ejemplo usando un input
 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("😲");
}
}>
When también se puede tilizar sin parametro y usarlo como condiciones if-else.
Es como un Switch case C++
Creo que me está empezando a gustar este lenguaje
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 ❤️
Aqui un pequeño ejemplo de un programa que calcula la calificacion en letras en base a un numero:
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)
Es como un switch de Java mejorado
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")
}
Para los que vienen de java, no los hace acordar al if, if else, else?
para definir un rango en kotlin se usan 2 puntos, ejemplo in 200…300
<println("Hello World!")
//Var es para variable que puede modificar valor y val para los que no
var a = 5
var cadena1 = "Hola"
var cadena2 = "mundo"
//prueba de if
if(a==5){
println("asi funciona if")
println(cadena1+cadena2)
}
//prueba de un switch en kotlin
println("Dame una opcion")
var opc= readLine().toString().toInt()
println("La opc es: $opc")
when(opc){
1->{
println("Seleccionaste 1")
}
2->{
println("Seleccionaste 2")
}
3->{
println("Seleccionaste 3")
}
else->{
println("Selecciona una opcion del 1 al 3")
}
}>
Otro ejemplo
println("Ingresa un nombre de usuario ")
val username = readLine()?.lowercase()
when(username){
"emanuel" -> println("el username $username es correcto ")
"agustin" -> println("el el username $username es correcto")
else -> println("El username es invalido")
}
val code = 200
when(code){
in 200..299 -> println("Todo ha ido bien")
in 400..500 -> println("Algo ha fallado")
else -> println("Codigo desconocido, algo ha fallado")
}
val tallaDeCalzado = 45
val menssage = when(tallaDeCalzado){
41,43 -> "Tenemos disponibile"
42,44 -> "Quedan pocas unidades"
45 -> "No hay disponibile"
else -> "Para las demas tallas no hay disponibles"
}
println(menssage)
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)
}
}
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)
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.
Muy util sino quieres minar de condiciones el codigo es mucho mas facil de leer e interpretar, de verdad con kotlin se enfocaron mucho en simplificar el lenguaje para poder enforcarse en lo mas importante el desarrollo del software de manera rapida y sostenible.
fun main(args: Array<String>) {
val nombreColor = "Amarillo"
when(nombreColor){
"Amarillo" -> println("El amarillo es el color de la alegria")
"Rojo" -> println("El rojo simboliza el calor")
"Verde" {
println("Esto es un color verde")
}
else -> println("Error no tengo información del color")
"Rosa", "Violeta" -> println("Esto representa estos dos colores")
}
val code = 200
when(code) {
/* cuando nuestro código esta entre 200 y 299 */
in 200..299 -> println("Todo ha ido bien")
in 400..500 -> println("Algo ha fallado")
else -> println("Código desconocido algo ha fallado")
}
val tallaDeZapatos = 41
val mensaje = when(tallaDeZapatos){
41,43 -> "Tenemos disponible"
42,44 -> "Casi no nos quedan!"
45 -> "Lo siento no tenemos disponible"
else -> "Estos zapatos solo vienen en talla 41, 42, 43, 44, 45"
}
println(mensaje)
}
Estructuras de control: WHEN
Si la condición que vamos a evaluar va a tomar un número determinado de valores que tenemos controlados a priori y para los que queremos ejecutar un código diferente podemos utilizar when en lugar de usar múltiples if else para hacer un código más legible.
when (condicion) {
valor1 -> { }
valor1 -> { }
valorN -> { }
else -> { }
}
fun main(args: Array<String>){
val color = "Azul"
when (color) {
"Amarillo" -> println("El $color es el color de la alegría")
"Rojo","Carmesí" -> println("El $color simboliza el calor")
else -> println("Error. No tengo información del color $color")
}
}
Esta estructura de control se parece al funcionamiento de los “switch” en otros lenguajes.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.