Kotlin

readln ()

var nombre = readln()



Paquetes

Como pasa en Java, en Kotlin los paquetes se colocan en la parte superior del archivo:

package com.example

import com.example.*

 

Variables

Hay dos tipos de variables, val y var.

La variable val una vez asignada solo se puede leer, es decir, una vez se le asigna su valor no puede cambiar. val en Kotlin sería como añadir a final a una variable en Java.

var por otro lado si podría cambiar su valor.

val numeroFinal = 2   // Deduce que el tipo es 'Int'

numeroFinal = 3 // Provocaría un error ya que no se puede volver a asignar

var numeroVariable = 2 // Deduce que el tipo es 'Int'

numeroVariable = 4 // No generaría un error

numeroVariable = "hola" // Provocaría un error ya que es de tipo 'Int'

val numeroTardio: Int // Puedes asignar el valor más tarde

numeroTardio = 6

Como has visto en el bloque de código anterior, no es necesario indicarle el tipo, ya que Kotlin puede detectarlo automáticamente una vez que le asignas un valor.

También es posible indicar el tipo si así lo deseas:

val numero: Int = 1 // Le indicas explícitamente que es de tipo 'Int'

 

Funciones

 

Las funciones en Kotlin se definen con fun, por ejemplo vamos a hacer una función que sume dos números y los muestre por pantalla:

 

fun mostrarSuma(a: Int, b: Int) {

    println("La suma de $a y $b es ${a + b}")

}

Con la siguiente función vamos a ver como devolver un valor, en este caso un entero, añadiendo el tipo al final, en este caso Int:

fun suma(a: Int, b: Int): Int {

    return a + b

}

Otra forma de definir esa función es la siguiente:

fun suma(a: Int, b: Int) = a + b // Deduce el tipo 'Int'

Esta forma es muy útil con funciones simples ya que facilita su lectura y puedes ahorrar un montón del líneas.


Plantillas de Texto

Te habrás fijado que en una de las funciones anteriores ya hemos una plantilla, y que gracias a ellas con Kotlin no vamos a tener que utilizar el signo + para encadenar textos que tanto se ha usado en Java.

Su uso es muy simple, solo tienes que usar el símbolo $ y el nombre de la variable:

var numero = 1

val texto = "El número es $numero"

println(texto) // "El número es 1"

Sentencias Condicionales

No tiene demasiado misterio ya que en Kotlin su sintaxis es prácticamente idéntica a Java:

fun mayorNumero(a: Int, b: Int): Int {

    if (a > b) {

        return a

    } else {

        return b

    }

}

Una forma de ahorrar código sería:

fun mayorNumero(a: Int, b: Int) = if (a > b) a else b



Bucles

For


for (i in 1..3) {

    print("$i ") // "1 2 3"

}

 

 

for (i in 10 downTo 0 step 2) {

    print("$i ") // "10 8 6 4 2 0"

}

 

val frutas = listOf("platano", "manzana", "pera", "kiwi")

for (fruta in frutas) {

    println(fruta)

}

 

Si quisiésemos utilizar una plantilla de texto con un índice:

val frutas = listOf("platano", "manzana", "pera", "kiwi")

for (index in frutas.indices) {

    println("La fruta en la posición $index es ${frutas[index]}")

}


When

Esta expresión en Kotlin sería el equivalente a Switch en Java:

fun describir(obj: Any): String =

    when (obj) {

        1 -> "Uno"

        "hola" -> "Saludos"

        is Int -> "Número entero"

        !is String -> "No es un texto"

        else -> "Desconocido"

    }


Con Any lo que le estamos indicando es que objeto puede ser de cualquier tipo.


While

var numero = 0

while (numero!=2) {

    numero = Random.nextInt(0,6)

    print("$numero ")

}



Colecciones

Iterar a través de una colección:

val frutas = listOf("platano", "manzana", "pera", "kiwi")

for (fruta in frutas) {

    println(fruta)

}

Para comprobar si una colección contiene un objeto:

when {

    "naranja" in frutas -> println("zumo")

    "manzana" in frutas -> println("me gusta la manzana")

}

Utilizando expresiones lambda para filtrar y mapear una colección

frutas.filter { it.startsWith("p") }

.sortedBy { it }

    .map { it.toUpperCase() }

    .forEach { println(it) }

Crear clases básicas y sus instancias

En el siguiente ejemplo vas a ver como Kotlin nos ahorra un montón de código respecto a Java, sobretodo al crear la clase, ya que no necesitamos indicarle los getters and setters, ni colocar todos los valores en el constructor con la palabra this.

class Rectangulo(val ancho: Int, val largo: Int) {

    fun mostrar() = print("La base es de $ancho cm y la altura es de $largo cm")

}

Valores nulos y su control

Si por algún motivo quieres que algo sea nulo, en Kotlin puedes indicarlo mediante el símbolo ?.

Por ejemplo, si la siguiente función le pasásemos un texto que no sea número entero, devolvería null.

val numeroString = "10" // Tipo string

val numeroInt = numeroString.toIntOrNull() // Si es un número entero será Int, sino será null

println(numeroInt ?: "No es un número") // "10"

val texto = "Hola"

val numero = texto.toIntOrNull() // Será 'null' en este caso

println(numero ?: "No es un número") // "No es un número"

Controles de tipos y conversiones automáticas

El operador is es el encargado de comprobar si una expresión es un tipo o una instancia. Si una variable local es inmutable o se le ha indicado el tipo específicamente, no hay necesidad de hacer una conversión (casting) explícita.

fun obtenerTipo(valor: Any): String {

    return when (valor) {

        is String -> "String"

        is Int -> "Int"

        is Boolean -> "Boolean"

        else -> "Tipo desconocido"

    }

}

  

Comentarios

Entradas populares de este blog

Ejercicios de algoritmos para PSeint

PROYECTO