hello_world.kotlin
🔹 Tipos de Datos
Kotlin es un lenguaje fuertemente tipado con inferencia de tipos.
valdeclara variables inmutables (comoconsten otros lenguajes).varpermite reasignaciones.- Kotlin maneja
null safetycon?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.14Booleans
val esVerdadero: Boolean = trueval esFalso = falseNull Safety
var textoOpcional: String? = null // Puede ser nullval textoSeguro = textoOpcional ?: "Valor por defecto"val textoForzado = textoOpcional!! // Falla si es nullTipos 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! 🚀