Kotlin: Sintaxis

Kotlin sintaxis: Aprende las reglas y estructuras clave de Kotlin. Una guía detallada sobre variables, funciones, clases y más en este lenguaje moderno.

Aprende Kotlin GRATIS y certifícate

Kotlin es un lenguaje de programación moderno que ha ganado popularidad gracias a su concisión y seguridad. En esta guía, exploraremos en detalle la sintaxis de Kotlin, proporcionando una base sólida para desarrollar aplicaciones eficientes y robustas.

Declaración de variables

En Kotlin, las variables se declaran utilizando val o var:

  • val: declara una variable inmutable (constante).
  • var: declara una variable mutable.

Ejemplo:

val nombre: String = "Ana"
var edad: Int = 30

Si el tipo puede ser inferido, se puede omitir:

val nombre = "Ana"
var edad = 30

Tipos de datos básicos

Kotlin proporciona varios tipos de datos integrados:

  • Números enteros: Byte, Short, Int, Long
  • Números de coma flotante: Float, Double
  • Caracteres: Char
  • Cadenas de texto: String
  • Booleanos: Boolean

Ejemplo:

val numeroEntero: Int = 100
val numeroDecimal: Double = 123.45
val caracter: Char = 'A'
val cadena: String = "Hola, Kotlin"
val booleano: Boolean = true

Cadenas de texto

Las cadenas se pueden declarar con comillas dobles. Para cadenas multilínea, se utilizan comillas triples (""").

Interpolación de cadenas:

val nombre = "Ana"
val saludo = "Hola, $nombre"

Cadenas multilínea:

val texto = """
    |Primera línea
    |Segunda línea
""".trimMargin()

Funciones

Las funciones en Kotlin se declaran utilizando la palabra clave fun.

Ejemplo básico:

fun sumar(a: Int, b: Int): Int {
    return a + b
}

Funciones de expresión única:

fun multiplicar(a: Int, b: Int) = a * b

Estructuras de control

Condicionales

If como expresión:

val max = if (a > b) a else b

When

El bloque when es similar a switch en otros lenguajes.

Ejemplo:

when (x) {
    1 -> print("Uno")
    2 -> print("Dos")
    in 3..5 -> print("De tres a cinco")
    else -> print("Otro número")
}

Bucles

For:

for (item in coleccion) {
    println(item)
}

While y do-while:

while (x > 0) {
    x--
}

do {
    val y = obtenerValor()
} while (y != null)

Clases y objetos

Declaración de clases

class Persona(val nombre: String, var edad: Int)

Instanciación

val persona = Persona("Ana", 30)

Propiedades y métodos

class Rectangulo(val ancho: Double, val alto: Double) {
    val area get() = ancho * alto

    fun perimetro() = 2 * (ancho + alto)
}

Herencia

Las clases en Kotlin son finales por defecto. Para permitir la herencia, se utiliza la palabra clave open.

Clase base:

open class Forma

Clase derivada:

class Circulo(val radio: Double) : Forma()

Interfaces

Las interfaces pueden contener definiciones de métodos abstractos y sus implementaciones.

interface Dibujable {
    fun dibujar()
}

class Cuadrado : Dibujable {
    override fun dibujar() {
        // Implementación
    }
}

Funciones Lambda

Las funciones lambda son funciones anónimas.

Ejemplo:

val suma = { a: Int, b: Int -> a + b }
println(suma(3, 4)) // Imprime 7

Uso con colecciones:

val numeros = listOf(1, 2, 3, 4, 5)
val pares = numeros.filter { it % 2 == 0 }

Funciones de orden superior

Las funciones de orden superior aceptan otras funciones como parámetros o retornan funciones.

Ejemplo:

fun operar(a: Int, b: Int, operacion: (Int, Int) -> Int): Int {
    return operacion(a, b)
}

val resultado = operar(5, 3) { x, y -> x * y }
println(resultado) // Imprime 15

Extensiones

Las funciones de extensión permiten agregar funcionalidades a clases existentes sin herencia.

Ejemplo:

fun String.saludar() = "Hola, $this"

println("Mundo".saludar()) // Imprime "Hola, Mundo"

Data Classes

Las data classes son útiles para almacenar datos y proporcionan implementaciones automáticas de métodos comunes.

Declaración:

data class Usuario(val nombre: String, val email: String)

Uso:

val usuario1 = Usuario("Ana", "ana@example.com")
val usuario2 = usuario1.copy(email = "ana.nueva@example.com")

Null Safety

Kotlin incorpora seguridad contra nulls en el sistema de tipos.

Variables que pueden ser null:

var nombre: String? = null

Operador Elvis (?:):

val longitud = nombre?.length ?: 0

Casting seguro (as?):

val objeto: Any = "Kotlin"
val cadena: String? = objeto as? String

Operador Let

El operador let es útil para ejecutar un bloque de código en el contexto de un objeto.

Ejemplo:

nombre?.let {
    println("El nombre tiene ${it.length} caracteres")
}

Coroutines

Las coroutines permiten escribir código asíncrono de manera secuencial.

Ejemplo básico:

import kotlinx.coroutines.*

fun main() = runBlocking {
    launch {
        delay(1000L)
        println("Coroutines en Kotlin")
    }
    println("Comenzando")
}

Parámetros por defecto y nombrados

Las funciones pueden tener parámetros con valores por defecto.

Ejemplo:

fun saludar(nombre: String, mensaje: String = "Hola") {
    println("$mensaje, $nombre")
}

saludar("Ana") // Imprime "Hola, Ana"

Parámetros nombrados:

saludar(mensaje = "Buenos días", nombre = "Luis")

Operador Infix

Permite definir funciones que pueden ser llamadas sin paréntesis ni puntos.

Ejemplo:

infix fun Int.sumar(valor: Int): Int = this + valor

val resultado = 5 sumar 10
println(resultado) // Imprime 15

Sobrecarga de operadores

Kotlin permite sobrecargar operadores para clases.

Ejemplo:

data class Punto(val x: Int, val y: Int) {
    operator fun plus(otro: Punto) = Punto(x + otro.x, y + otro.y)
}

val punto1 = Punto(2, 3)
val punto2 = Punto(4, 5)
val suma = punto1 + punto2
println(suma) // Imprime Punto(x=6, y=8)
Empezar curso de Kotlin

Lecciones de este módulo de Kotlin

Lecciones de programación del módulo Sintaxis del curso de Kotlin.

Ejercicios de programación en este módulo de Kotlin

Evalúa tus conocimientos en Sintaxis con ejercicios de programación Sintaxis de tipo Test, Puzzle, Código y Proyecto con VSCode.