Sobes.tech
Middle

¿Qué son las genéricos?

sobes.tech AI

Respuesta de la IA

Las genéricos son un mecanismo que permite escribir clases, interfaces y métodos que trabajan con datos de diferentes tipos, pero garantizando la seguridad de tipos en tiempo de compilación. Permiten crear componentes reutilizables que pueden trabajar con cualquier tipo de dato, sin perder información sobre el tipo, lo que minimiza errores de conversión de tipos en tiempo de ejecución.

Ventajas principales:

  • Seguridad de tipos: El compilador verifica la correcta utilización de los tipos en las estructuras genéricas.
  • Reducción de código: Una sola clase o método genérico puede trabajar con múltiples tipos.
  • Legibilidad del código: Es claro con qué tipos trabaja el componente.
  • Mejora del rendimiento (en algunos casos): La ausencia de necesidad de conversiones de tipos en tiempo de ejecución puede mejorar ligeramente el rendimiento.

Ejemplo (Java):

// Ejemplo de clase genérica
class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

// Uso de la clase genérica con diferentes tipos
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Seguridad de tipos, no es necesario convertir a int

Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Seguridad de tipos, no es necesario convertir a String

Ejemplo (Python - Type Hinting, aproximado a Generics):

from typing import TypeVar, Generic

T = TypeVar('T')

class Box(Generic[T]):
    def __init__(self) -> None:
        self._content: T | None = None

    def set_content(self, content: T) -> None:
        self._content = content

    def get_content(self) -> T | None:
        return self._content

# Uso con type hinting
integer_box: Box[int] = Box()
integer_box.set_content(10)
value: int | None = integer_box.get_content() # Ayuda a las herramientas de análisis estático

string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Ayuda a las herramientas de análisis estático