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.

  1. 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)

val fruits = listOf("Apple", "Banana", "Cherry")
println(fruits) // Output: [Apple, Banana, Cherry]

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)

val numbers = setOf(1, 2, 3, 2)
println(numbers) // Output: [1, 2, 3]

Ejemplo de MutableSet

val numbers = mutableSetOf(1, 2, 3)
numbers.add(4)
println(numbers) // Output: [1, 2, 3, 4]

1.3 Mapas

Los mapas son colecciones de pares clave-valor. Kotlin ofrece Map (inmutable) y MutableMap (mutable).

Ejemplo de Map (Inmutable)

val map = mapOf("name" to "John", "age" to 30)
println(map) // Output: {name=John, age=30}

Ejemplo de MutableMap

val map = mutableMapOf("name" to "John")
map["age"] = 30
println(map) // Output: {name=John, age=30}

  1. 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

  1. 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

  1. 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.

© Copyright 2024. Todos los derechos reservados