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
stderres 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 esNULL. 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, peroifes una expresión - No ofrece operador terciario, pero
ifes una expresión - No soporta booleanos nativamente, pero ofrece tipo encajonado
(Boxing Type) usando la clase
Boolean - Soporta
switchusando palabra clavewhen - Soporta constantes nativamente
(
const val CONSTANTE = valor)
■
