Kotlin Academy · Lección

Funciones y clases genéricas

Parametrice los tipos

Lección 1 de 413 pasos

Funciones y clases genéricas es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué son los genéricos?

Los genéricos permiten escribir código que funciona con muchos tipos y mantiene la seguridad de tipos. En lugar de fijar un tipo concreto, se utiliza un parámetro de tipo, normalmente T, como marcador de posición.

Una función genérica

Una función genérica declara su parámetro de tipo entre corchetes angulares antes del nombre de la función. Aquí, T puede ser cualquier tipo.

fun <T> identity(value: T): T {
    return value
}

fun main() {
    println(identity(42))
    println(identity("hello"))
}

Inferencia de tipos

Rara vez tendrá que especificar el tipo explícitamente: el compilador infiere T a partir de los argumentos. Aun así, puede escribirlo como identity<Int>(42) si es necesario.

fun <T> firstOf(a: T, b: T): T = a

fun main() {
    val x = firstOf(10, 20)
    val y = firstOf("a", "b")
    println("$x $y")
}

Varios parámetros de tipo

Una función puede tener varios parámetros de tipo, lo que resulta útil para trabajar con pares de tipos no relacionados.

fun <A, B> makePair(first: A, second: B): Pair<A, B> {
    return Pair(first, second)
}

fun main() {
    val p = makePair("age", 30)
    println(p)
}

Una clase genérica

Las clases también pueden ser genéricas. El parámetro de tipo se declara después del nombre de la clase y se puede utilizar para propiedades y funciones.

class Box<T>(val value: T) {
    fun get(): T = value
}

fun main() {
    val intBox = Box(123)
    val strBox = Box("Kotlin")
    println(intBox.get())
    println(strBox.get())
}

Clase genérica con comportamiento

Las clases genéricas pueden contener un estado mutable y operar sobre el parámetro de tipo, como un contenedor sencillo.

class Stack<T> {
    private val items = mutableListOf<T>()
    fun push(item: T) { items.add(item) }
    fun pop(): T = items.removeAt(items.size - 1)
    fun isEmpty() = items.isEmpty()
}

fun main() {
    val stack = Stack<Int>()
    stack.push(1)
    stack.push(2)
    println(stack.pop())
}

Interfaces genéricas

Las interfaces también pueden declarar parámetros de tipo, lo que permite a las implementaciones elegir el tipo concreto.

interface Container<T> {
    fun item(): T
}

class StringContainer : Container<String> {
    override fun item(): String = "fixed"
}

fun main() {
    println(StringContainer().item())
}

¿Por qué no utilizar Any?

Podría almacenar los valores como Any, pero perdería la información de tipo y necesitaría conversiones de tipo. Los genéricos conservan el tipo exacto, de modo que el compilador detecta los errores y no se necesitan conversiones.

fun main() {
    val box: Box<String> = Box("text")
    val s: String = box.get()
    println(s.uppercase())
}

class Box<T>(val value: T) { fun get(): T = value }

Funciones de extensión genéricas

Las funciones de extensión pueden ser genéricas, lo que permite crear utilidades reutilizables para todos los tipos.

fun <T> T.printAndReturn(): T {
    println("Value: $this")
    return this
}

fun main() {
    val x = 5.printAndReturn()
    "hi".printAndReturn()
    println(x)
}

Convenciones de nombres

Por convención, las letras mayúsculas individuales se utilizan para nombrar parámetros de tipo: T para un tipo genérico, E para un elemento, K y V para las claves y los valores de un mapa, y R para un resultado.

Genéricos en todas partes

La biblioteca estándar de Kotlin se basa en genéricos: List<T>, Map<K, V>, Pair<A, B>. Comprender los genéricos le ayudará a leer y utilizar estos tipos con confianza.

Comprobación rápida

¿Cuál es la principal ventaja de los genéricos frente a utilizar Any?

Resumen

Los genéricos utilizan parámetros de tipo como T para escribir funciones, clases e interfaces reutilizables y con seguridad de tipos. El compilador infiere los tipos y garantiza la seguridad, evitando las conversiones. A continuación, controlará cómo se relacionan los tipos genéricos mediante la varianza en el sitio de declaración con in y out.

Gratis para empezar

Aprende Kotlin con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
51
Lecciones
203

Preguntas frecuentes

¿La lección «Funciones y clases genéricas» es gratis?

Sí — el texto completo de «Funciones y clases genéricas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Funciones y clases genéricas»?

Parametrice los tipos Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Kotlin Academy?

No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Funciones y clases genéricas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?

Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Funciones y clases genéricas
  2. Varianza en el punto de declaración
  3. Varianza en el punto de uso
  4. Restricciones de genéricos
← Volver a Kotlin Academy