Kotlin es un lenguaje de programación moderno, estático y multiplataforma diseñado para ser completamente interoperable con Java.
Se utiliza principalmente para el desarrollo de aplicaciones móviles en Android y para el desarrollo de aplicaciones de servidor.
Instalación
Instalación de Kotlin
Para instalar Kotlin, puedes utilizar el SDK de Kotlin o configurar el entorno en un IDE.
Verificar instalación
Para verificar si Kotlin está correctamente instalado, puedes ejecutar el siguiente comando:
kotlin -version
Variables y tipos de datos
Declarar variables
Kotlin permite declarar variables mutables (var
) e inmutables (val
).
val nombre: String = "Luis" // inmutable
var edad: Int = 10 // mutable
Kotlin puede inferir el tipo automáticamente, pero también se puede especificar.
Tipos de datos
Kotlin soporta varios tipos de datos básicos.
Tipo | Descripción |
---|---|
Int | Números enteros |
Double | Números de punto flotante |
Boolean | Valores verdadero o falso |
String | Cadenas de texto |
val entero: Int = 10
val texto: String = "Hola, Kotlin"
val esActivo: Boolean = true
Conversión de tipos
En Kotlin, las conversiones de tipos no son implícitas. Para convertir tipos se deben usar funciones específicas.
val numero = 42
val numeroComoString = numero.toString() // "42"
val textoComoInt = "10".toInt() // 10
Operadores
slug: cheatsheet-kotlin-operadores title: CheatSheet de Operadores en Kotlin description: CheatSheet breve sobre los operadores en Kotlin, incluyendo aritméticos, lógicos y de comparación.
Operadores en Kotlin
Operadores Aritméticos
Los operadores aritméticos se utilizan para realizar operaciones matemáticas.
Operador | Descripción | Ejemplo |
---|---|---|
+ | Suma | a + b |
- | Resta | a - b |
* | Multiplicación | a * b |
/ | División | a / b |
% | Módulo (resto) | a % b |
Operadores de Comparación
Los operadores de comparación se utilizan para comparar dos valores.
Operador | Descripción | Ejemplo |
---|---|---|
== | Igual a | a == b |
!= | No igual a | a != b |
> | Mayor que | a > b |
< | Menor que | a < b |
>= | Mayor o igual que | a >= b |
<= | Menor o igual que | a <= b |
Operadores Lógicos
Los operadores lógicos se utilizan para combinar expresiones booleanas.
Operador | Descripción | Ejemplo |
---|---|---|
&& | Y lógico | a && b |
` | ` | |
! | Negación | !a |
Operadores de Asignación
Los operadores de asignación se utilizan para asignar valores a variables.
Operador | Descripción | Ejemplo |
---|---|---|
= | Asignación simple | a = 5 |
+= | Suma y asignación | a += 3 |
-= | Resta y asignación | a -= 2 |
*= | Multiplicación y asignación | a *= 4 |
/= | División y asignación | a /= 2 |
%= | Módulo y asignación | a %= 3 |
Operador Elvis (?:
)
El operador Elvis se utiliza para manejar valores nulos de manera concisa:
val resultado = a ?: 0 // Si 'a' es nulo, se asigna 0
Sobrecarga de operadores
Kotlin permite sobrecargar operadores para clases personalizadas.
data class Punto(val x: Int, val y: Int) {
operator fun plus(otro: Punto) = Punto(x + otro.x, y + otro.y)
}
Estructuras de control
Condicionales
IF
Kotlin utiliza if
como expresión, lo que significa que puede devolver un valor.
val max = if (a > b) a else b
When
when
en Kotlin es una versión “mejorada” de switch
. Permite manejar múltiples casos y devolver valores.
val resultado = when (x) {
1 -> "Uno"
2 -> "Dos"
else -> "Otro valor"
}
Bucles
FOR
Itera sobre cualquier colección o rango.
for (i in 1..10) {
println(i)
}
While
while
y do-while
para realizar bucles condicionales.
while (x < 5) {
println(x)
x++
}
Funciones
Declaración de funciones
Se define una función con la palabra clave fun
. Los parámetros son de tipo obligatorio.
fun sumar(a: Int, b: Int): Int {
return a + b
}
Funciones de una sola línea
Si la función solo tiene una expresión, puede definirse de forma concisa.
fun multiplicar(a: Int, b: Int) = a * b
Funciones con valores por defecto
Se pueden asignar valores predeterminados a los parámetros.
fun saludo(nombre: String = "Invitado") {
println("Hola, $nombre")
}
Funciones de orden superior
Kotlin permite usar funciones como parámetros.
fun realizarOperacion(a: Int, b: Int, operacion: (Int, Int) -> Int): Int {
return operacion(a, b)
}
// Uso
val suma = realizarOperacion(5, 3, { x, y -> x + y })
Funciones Lambda
Las funciones lambda son funciones anónimas que pueden asignarse a variables o pasarse como parámetros.
val suma = { a: Int, b: Int -> a + b }
println(suma(2, 3)) // 5
Funciones de extensión
Kotlin permite agregar nuevas funciones a clases existentes sin modificar su código.
fun String.saludar(): String {
return "Hola, $this"
}
// Uso de la función de extensión
val saludo = "Kotlin".saludar()
Colecciones
Rangos
Kotlin tiene soporte nativo para rangos.
for (i in 1..5) println(i) // 1, 2, 3, 4, 5
for (i in 5 downTo 1) println(i) // 5, 4, 3, 2, 1
Listas
Las listas pueden ser mutables (MutableList
) o inmutables (List
).
val listaInmutable = listOf(1, 2, 3)
val listaMutable = mutableListOf(1, 2, 3)
listaMutable.add(4)
Mapas
Los mapas pueden ser mutables o inmutables.
val mapa = mapOf("clave1" to "valor1", "clave2" to "valor2")
val mapaMutable = mutableMapOf("clave1" to "valor1")
mapaMutable["clave3"] = "valor3"
Sets
Los sets no permiten elementos duplicados.
val setInmutable = setOf(1, 2, 3)
val setMutable = mutableSetOf(1, 2, 3)
setMutable.add(4)
Operaciones con colecciones
Kotlin incluye muchas funciones de extensión para colecciones, como filter
, map
, reduce
.
val numeros = listOf(1, 2, 3, 4, 5)
val pares = numeros.filter { it % 2 == 0 }
val cuadrados = numeros.map { it * it }
Clases y objetos
Declaración de clases
Kotlin utiliza la palabra clave class
para definir clases. Los constructores principales se definen en la misma línea.
class Persona(val nombre: String, var edad: Int)
Crear una instancia
Las instancias de clases se crean sin la palabra clave new
.
val persona = Persona("Luis", 25)
Propiedades y métodos
Las clases pueden tener propiedades y métodos.
class Coche(val modelo: String) {
var velocidad: Int = 0
fun acelerar() {
velocidad += 10
}
}
Herencia
En Kotlin, las clases son por defecto final
. Para permitir herencia, se usa open
.
open class Animal(val nombre: String) {
open fun sonido() = "Hace un sonido"
}
class Perro(nombre: String) : Animal(nombre) {
override fun sonido() = "Ladra"
}
Data Classes
Kotlin proporciona las data class
para almacenar datos. Estas clases implementan automáticamente toString()
, hashCode()
y equals()
.
data class Usuario(val nombre: String, val edad: Int)
Null Safety
Tipos que permiten null
En Kotlin, los tipos son no-null por defecto. Para permitir que una variable contenga null
, se añade ?
al tipo.
var nombre: String? = null
Safe Call y Not Null Assertion
El safe call (?.
) evita NullPointerExceptions. El not-null assertion (!!
) asegura que una variable no es nula, pero lanza una excepción si lo es.
val longitud: Int? = nombre?.length
val longitudForzada: Int = nombre!!.length
Programación Orientada a Objetos Avanzada
Interfaces
Kotlin soporta interfaces que pueden contener métodos abstractos y con implementación.
interface Volador {
fun volar()
fun despegar() = println("Despegando")
}
Delegación
Kotlin soporta delegación de implementación de interfaces a otros objetos.
class Pajaro : Volador by Avion()
Funcionalidades avanzadas
Extensiones
Kotlin permite añadir nuevas funciones a clases existentes sin modificarlas directamente.
fun String.repetir(veces: Int): String {
return this.repeat(veces)
}
println("Hola".repetir(3)) // HolaHolaHola
Clases Selladas
Las clases selladas (sealed class
) restringen la herencia, permitiendo solo un conjunto definido de subclases.
sealed class Resultado
class Exito(val data: String) : Resultado()
class Error(val mensaje: String) : Resultado()
Coroutines
Kotlin tiene soporte nativo para coroutines, facilitando la programación asíncrona.
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
delay(1000L)
println("Mundo")
}
println("Hola")
}
Gestión de excepciones
Try-Catch
Las excepciones en Kotlin se manejan con bloques try-catch
.
try {
val numero = "abc".toInt()
} catch (e: NumberFormatException) {
println("Error de formato numérico")
} finally {
println("Finalización")
}
Throw
Lanzar una excepción explícitamente.
fun chequearEdad(edad: Int) {
if (edad < 18) {
throw IllegalArgumentException("Edad insuficiente")
}
}
Interoperabilidad con Java
Llamadas a código Java
Kotlin es completamente interoperable con Java, lo que permite llamar a bibliotecas Java directamente.
val listaJava: java.util.ArrayList<String> = java.util.ArrayList()
listaJava.add("Hola")