Condiciones en Kotlin
SOLUCIONARIO
Condiciones en Kotlin
2025-01-05
Por
Occam's Razor

import kotlin.math.abs

const val N = 42
fun main () {

     print ("Adivina en que numero estoy pensando ? ")
     val v = readLine()!!.toInt()

     if (v < 0) {
        System.err.println ("Solo números positivos")
        return
     }
     if (v == N) println ("Bien Hecho!")
     else {
         println ("Sigue Probando");
         println ("El numero es : " + if (v > N) "MAYOR" else "MENOR"
         val h = abs (v - N)
         print ("PISTA :")
         if (h < 5) println ("TE QUEMAS!!!")
         else if (h < 10) println ("CALIENTE!!!")
         else if (h < 15) println ("TEMPLADO")
         else println ("FRIO")
     }
}

Kotlin nos ofrece lo justo para programar nuestros bloques condicionales. Una típica estrucura if-else con las típicas características de los lenguajes más modernos. Al igual que C o Java, podemos omitir las llaves cuando el bloque then o else solo contiene un comando y es posible encadenar nuevos bloques if-then-else tras else.

En Kotlin, if es una expresión, lo que significa que puede devolver un valor y por lo tanto se puede utilizar como el operador ternario ?: de otros lenguajes que Kotlin no necesita .

SABÍAS QUE

Kotlin te permite incluir código Java en medio de tus programas?. La forma de imprimir el mensaje de error a stderr es realmente código Java que el compilador maneja sin ningún problema.

Cuando se utiliza como una expresión, las expresiones if mantienen la misma sintaxis y, por tanto, podemos utilizar bloques de instrucciones como en cualquier otra expresión if. En este caso, el valor retornado es el último evaluado en el bloque then o else. Por ejemplo:

val max = if (a > b) {
    print ("a es mayor que b")
    a
} else {
    print ("b es mayor que a")
    b
}

El bloque de código anterior, además de mostrar el mensaje adecuado, asignará a la variable max el valor mayor entre a y b.

SABÍAS QUE

Kotlin ofrece operadores especiales para manejar punteros NULL. Uno de ellos es el operador !! que generará una excepción si el valor al que se le aplica es NULL. El operador ?. permite hacer llamadas de forma segura, comprobando primero que el objeto cuyo método se quiere acceder es no nulo.

Kotlin, ofrece una instrucción tipo switch bastante similar a la que hemos visto para go. En este caso, la palabra clave elegida es when. El caso por defecto se especifica con la palabra clave else en lugar de el default que encontramos en otros lenguajes. when ofrece varias extensiones, nos permite comparar distintos tipos, usar condiciones arbitrarias o evaluar expresiones para cada caso.

var v = 2

when (v) {
    0 -> println ("Cero")
    1, 2, 3, 4, 5 -> println ("Mayor que cero y menor que 6")
    in 10..20 -> println ("Entre 10 y 20")
    is String -> println ("El valor es una cadena")
    is Floar  -> println ("El valor es un float")
    else -> println ("Otro número")
}

Como podéis ver, when ofrece todas las opciones que hemos visto hasta el momento en otros lenguajes de programación. Al igual que sucedía con go, when se puede utilizar sin parámetro. En ese caso se comporta como un bloque if-else-if. El operador in nos permite evaluar si un determinado número pertenece al rango especificado y el operador is nos permite escribir casos para comprobar el tipo del parámetro.

Al igual que sucede con if, when se puede utilizar como una expresión como en el siguiente ejemplo:

val texto = when {
    (a > b) -> "a es MAYOR";
    (a < b) -> "a es MENOR";
    else -> "a y b son IGUALES";
}

Observa que en el caso anterior, estamos utilizando when sin una variable (como un bloque if-else-if y que las condiciones las tenemos que encerrar entre paréntesis para evitar ambigüedades y que el compilador proteste.

Kotlin nos permite utilizar cualquier tipo de expresión para definir los casos.

when {
    x.startsWith("Hola")  -> print ("Bienvenida")
    x.startsWith("Adios") -> print ("Despedida")
}

La riqueza para especificar casos puede hacer que varios de los casos se solapen para ciertos valores. En esa situación se utilizará el orden de los casos para seleccionar el que se ejecutará.

SABÍAS QUE?

Al igual que otros muchos lenguajes Kotlin está en continua evolución. Al momento de escribir este texto, el lenguaje ofrece la posibilidad de añadir expresiones de guarda en los casos de when, es decir, añadir condiciones adicionales como por ejemplo:

when (perro) {
  is Perro -> print ("Es un perro")
  is Perro if perro.guardian -> print ("Perro Guardian")
  else -> print ("Esto no es un perro")
}

Esta característica es experimental por el momento, pero quizás cuando leas esto ya forme parte del lenguaje.

Kotlin permite declarar constantes pero conciertas limitaciones. Las contantes tienen que ser o globales o definidas dentro de un objeto acompañante (Companion Object). Un companion object es un objeto asociado a una clase y no a un objeto, algo así como un miembro estático en otros lenguajes. No vamos a hablar de programación orientada a objetos en este libro así que quedaros con que las constantes hay que declararlas de forma global, como hacemos en el programa anterior.

Las constantes se suelen nombrar en mayúsculas, como en la mayoría de otros lenguajes, si bien, Kotlin no impone ninguna restricción, y se trata de un convenio a aplicar a la discreción del programador.

Resumen

  • Soporta if ... [else if] ...[else] ...
  • No ofrece forma reducida de if, pero if es una expresión
  • No ofrece operador terciario, pero if es una expresión
  • No soporta booleanos nativamente, pero ofrece tipo encajonado (Boxing Type) usando la clase Boolean
  • Soporta switch usando palabra clave when
  • Soporta constantes nativamente (const val CONSTANTE = valor )

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)