hello_world.kotlin
🔹 Tipos de Datos
Kotlin es un lenguaje fuertemente tipado con inferencia de tipos.
val
declara variables inmutables (comoconst
en otros lenguajes).var
permite reasignaciones.- Kotlin maneja
null safety
con?
y!!
.
Strings
val saludo: String = "Hola, Kotlin!"val nombre = "John" // Inferencia de tipoprintln("$saludo $nombre")
Numbers
val entero: Int = 42val decimal: Double = 3.14val flexible: Number = 100println(entero + decimal) // 45.14
Booleans
val esVerdadero: Boolean = trueval esFalso = false
Null Safety
var textoOpcional: String? = null // Puede ser nullval textoSeguro = textoOpcional ?: "Valor por defecto"val textoForzado = textoOpcional!! // Falla si es null
Tipos de datos y operadores
val entero: Int = 42val decimal: Double = 3.14val flexible: Number = 100val esVerdadero: Boolean = trueval texto: String = "Hola, Kotlin!"val lista: List<Int> = listOf(1, 2, 3, 4)val conjunto: Set<String> = setOf("A", "B", "C")val mapa: Map<String, Any> = mapOf("nombre" to "John", "edad" to 20)var dinamico: Any = "Puedo cambiar de tipo"
Operadores aritméticos
Operador | Descripción | Ejemplo |
---|---|---|
+ | Suma | a + b |
- | Resta | a - b |
* | Multiplicación | a * b |
/ | División | a / b |
% | Módulo (resto de la división) | a % b |
++ | Incremento | a++ o ++a |
-- | Decremento | a-- o --a |
Operadores de asignación
Operador | Descripción | Ejemplo |
---|---|---|
= | Asignación | a = 5 |
+= | Suma y asigna | a += 2 (equivale a a = a + 2 ) |
-= | Resta y asigna | a -= 2 |
*= | Multiplica y asigna | a *= 2 |
/= | Divide y asigna | a /= 2 |
%= | Módulo y asigna | a %= 2 |
Operadores de comparación
Operador | Descripción | Ejemplo |
---|---|---|
== | Igualdad estructural | a == b |
!= | Desigualdad | a != b |
=== | Igualdad referencial | a === b |
!== | Desigualdad referencial | a !== b |
> | Mayor que | a > b |
< | Menor que | a < b |
>= | Mayor o igual | a >= b |
<= | Menor o igual | a <= b |
Operadores lógicos
Operador | Descripción | Ejemplo |
---|---|---|
&& | AND lógico | a > 0 && b > 0 |
|| | OR lógico | a > 0 || b > 0 |
! | Negación lógica | !a |
Operadores bitwise (a nivel de bits)
En Kotlin, los operadores bitwise tradicionales (&
, |
, ^
, <<
, >>
, ~
) NO existen directamente.
En su lugar, se usan funciones de extensión en los enteros (Int
, Long
, etc.).
Función | Descripción | Ejemplo |
---|---|---|
and | AND bit a bit | a.and(b) |
or | OR bit a bit | a.or(b) |
xor | XOR bit a bit | a.xor(b) |
inv | Complemento bit a bit (NOT) | a.inv() |
shl | Desplazamiento a la izquierda | a.shl(2) |
shr | Desplazamiento a la derecha | a.shr(2) |
ushr | Desplazamiento sin signo | a.ushr(2) |
Operadores de tipo
Operador | Descripción | Ejemplo |
---|---|---|
is | Verifica tipo de dato | a is String |
!is | Verifica que NO sea tipo | a !is Int |
as | Convierte tipo (cast) | b as Double |
as? | Cast seguro (devuelve null si falla) | b as? Double |
Operadores de control de nulos
Operador | Descripción | Ejemplo |
---|---|---|
?. | Llamada segura (evita NullPointerException ) | a?.length |
?: | Operador Elvis (valor por defecto si es null ) | a ?: "Valor por defecto" |
!! | Forzar acceso (lanza error si es null ) | a!!.length |
Operadores especiales de Kotlin
Operador | Descripción |
---|---|
in | Verifica si un valor está dentro de un rango o colección (x in 1..10 ) |
!in | Verifica si NO está en el rango (x !in 1..10 ) |
.. | Rango cerrado (1..10 incluye del 1 al 10) |
until | Rango abierto (1 until 10 incluye del 1 al 9) |
step | Define el paso de un rango (1..10 step 2 ) |
downTo | Cuenta en orden descendente (10 downTo 1 ) |
🔹 Estructuras de Control
Condicionales
val edad = 20if (edad >= 18) { println("Mayor de edad")} else { println("Menor de edad")}
Switch (when
)
val opcion = 2when (opcion) { 1 -> println("Opción 1") 2 -> println("Opción 2") else -> println("Opción no válida")}
otros ejemplos de when
val resultado = when (opcion) { 1 -> "uno" 2 -> "dos" 3 -> "tres" else -> "otro"}println(resultado)
🔹 Funciones en Kotlin
fun saludo() { println("Hola desde una función!")}
fun suma(a: Int, b: Int): Int = a + b
saludo()println(suma(3, 5))
Parámetros opcionales
fun saludar(nombre: String, apellido: String = "Desconocido") { println("Hola, $nombre $apellido")}
🔹 Colecciones (List, Set, Map)
Listas
val lista = listOf("Kotlin", "Java", "Swift")println(lista[0])
Sets (sin duplicados)
val conjunto = setOf("Kotlin", "Swift", "Kotlin")println(conjunto)
Mapas (clave-valor)
val mapa = mapOf("nombre" to "Carlos", "edad" to 25)println(mapa["nombre"])
🔹 Bucles en Kotlin
For-i
for (i in 0 until lista.size) { println(lista[i])}
For-in
for (item in lista) { println("📌 $item")}
While y Do-While
var contador = 0while (contador < 3) { println("Iteración $contador") contador++}
do { println("Iteración $contador") contador++} while (contador < 6)
🔹 OOP en Kotlin
class Persona(val nombre: String, val edad: Int) { fun presentarse() { println("Hola, soy $nombre y tengo $edad años.") }}
val p = Persona("Carlos", 30)p.presentarse()
🔹 Enumeraciones
enum class Lenguajes { KOTLIN, JAVA, SWIFT }val lenguaje = Lenguajes.KOTLINprintln("Lenguaje seleccionado: $lenguaje")
🔹 Manejo de Excepciones
try { val resultado = 10 / 0} catch (e: Exception) { println("❌ Error: ${e.message}")} finally { println("Este bloque siempre se ejecuta")}
🔹 Programación Asíncrona en Kotlin (Coroutines)
import kotlinx.coroutines.*
suspend fun obtenerDatos() { println("⌛ Cargando datos...") delay(2000) println("✅ Datos cargados")}
fun main() = runBlocking { obtenerDatos()}
🔹 Mixins en Kotlin (interface
con default methods
)
interface Caminante { fun caminar() { println("Estoy caminando...") }}
class Persona : Caminante
val p = Persona()p.caminar()
🔹 Extensiones en Kotlin
fun String.enMayusculas(): String = this.uppercase()
println("kotlin".enMayusculas()) // "KOTLIN"
Hello, Kotlin! 🚀