En este módulo, exploraremos las colecciones y los genéricos en Kotlin. Las colecciones son estructuras de datos que permiten almacenar y manipular grupos de elementos. Los genéricos, por otro lado, permiten escribir código que puede manejar diferentes tipos de datos de manera segura y eficiente.
- Introducción a las Colecciones
Kotlin proporciona varias colecciones estándar, como listas, conjuntos y mapas. Estas colecciones pueden ser mutables o inmutables.
1.1 Listas
Las listas son colecciones ordenadas de elementos. Kotlin ofrece List
(inmutable) y MutableList
(mutable).
Ejemplo de List (Inmutable)
Ejemplo de MutableList
val fruits = mutableListOf("Apple", "Banana") fruits.add("Cherry") println(fruits) // Output: [Apple, Banana, Cherry]
1.2 Conjuntos
Los conjuntos son colecciones de elementos únicos. Kotlin ofrece Set
(inmutable) y MutableSet
(mutable).
Ejemplo de Set (Inmutable)
Ejemplo de MutableSet
1.3 Mapas
Los mapas son colecciones de pares clave-valor. Kotlin ofrece Map
(inmutable) y MutableMap
(mutable).
Ejemplo de Map (Inmutable)
Ejemplo de MutableMap
val map = mutableMapOf("name" to "John") map["age"] = 30 println(map) // Output: {name=John, age=30}
- Genéricos
Los genéricos permiten que las clases y funciones operen con cualquier tipo de datos, proporcionando mayor flexibilidad y seguridad de tipos.
2.1 Clases Genéricas
Una clase genérica puede manejar diferentes tipos de datos sin necesidad de duplicar el código.
Ejemplo de Clase Genérica
class Box<T>(val value: T) val intBox = Box(1) val stringBox = Box("Hello") println(intBox.value) // Output: 1 println(stringBox.value) // Output: Hello
2.2 Funciones Genéricas
Las funciones genéricas permiten que una función trabaje con diferentes tipos de datos.
Ejemplo de Función Genérica
fun <T> printItem(item: T) { println(item) } printItem(1) // Output: 1 printItem("Hello") // Output: Hello
2.3 Restricciones de Tipo
Puedes restringir los tipos que una clase o función genérica puede aceptar.
Ejemplo de Restricción de Tipo
fun <T : Number> sum(a: T, b: T): Double { return a.toDouble() + b.toDouble() } println(sum(1, 2)) // Output: 3.0 println(sum(1.5, 2.5)) // Output: 4.0
- Ejercicios Prácticos
Ejercicio 1: Crear una Lista Mutable
Crea una lista mutable de nombres y agrega tres nombres a la lista. Luego, imprime la lista.
Solución
val names = mutableListOf<String>() names.add("Alice") names.add("Bob") names.add("Charlie") println(names) // Output: [Alice, Bob, Charlie]
Ejercicio 2: Crear una Clase Genérica
Crea una clase genérica Pair
que almacene dos valores de cualquier tipo. Luego, crea una instancia de Pair
con dos enteros y otra con dos cadenas, e imprime los valores.
Solución
class Pair<A, B>(val first: A, val second: B) val intPair = Pair(1, 2) val stringPair = Pair("Hello", "World") println("Int Pair: ${intPair.first}, ${intPair.second}") // Output: Int Pair: 1, 2 println("String Pair: ${stringPair.first}, ${stringPair.second}") // Output: String Pair: Hello, World
- Resumen
En esta sección, hemos aprendido sobre las colecciones y los genéricos en Kotlin. Las colecciones nos permiten almacenar y manipular grupos de elementos, mientras que los genéricos nos permiten escribir código flexible y seguro. Hemos cubierto listas, conjuntos y mapas, tanto mutables como inmutables, y hemos visto cómo crear clases y funciones genéricas. Los ejercicios prácticos proporcionan una oportunidad para aplicar estos conceptos y reforzar el aprendizaje.
En el próximo módulo, exploraremos las funciones de extensión, que nos permitirán añadir nuevas funcionalidades a las clases existentes sin modificar su código original.
Curso de Programación en Kotlin
Módulo 1: Introducción a Kotlin
- Introducción a Kotlin
- Configuración del Entorno de Desarrollo
- Conceptos Básicos de Kotlin: Variables y Tipos de Datos
- Flujo de Control: Condicionales y Bucles
- Funciones y Lambdas
Módulo 2: Programación Orientada a Objetos en Kotlin
- Clases y Objetos
- Herencia e Interfaces
- Modificadores de Visibilidad
- Clases de Datos y Clases Selladas
- Declaraciones de Objetos y Objetos Compañeros
Módulo 3: Características Avanzadas de Kotlin
- Colecciones y Genéricos
- Funciones de Extensión
- Funciones de Orden Superior y Programación Funcional
- Corrutinas y Programación Asíncrona
- DSL (Lenguaje Específico de Dominio) en Kotlin
Módulo 4: Kotlin para Desarrollo Android
- Introducción al Desarrollo Android con Kotlin
- Construcción de Interfaces de Usuario
- Manejo de Entrada del Usuario
- Redes y Almacenamiento de Datos
- Pruebas y Depuración