diegoRodicio

Está documentación está a túa disposición sin ningún custo económico. Sen embargo, para a súa elaboración dedico moito tempo e recursos, polo que agradecería unha colaboración co que consideres oportuno. Gracias.

View Categories

🧪 Xenéricos

Os xénericos permiten crear clases, interfaces e funcións que traballan cun tipo arbitrario, sen necesidade de duplicar código para cada tipo de dato.

Se observas a clase List na documentación, verás que realmente se define como List<E>. Isto significa que List é un tipo xenérico, onde E representa o tipo dos elementos da lista.

List<String> nomes = ['Ana', 'Brais', 'Clara'];

💡 A notación <...> permite parametrizar o tipo que se usa nese momento.

Por convención, as letras máis usadas como variables de tipo son: T, E, K, V, S.

🎯 Por que usar xénericos? #

  • ✅ Maior seguridade de tipos en tempo de compilación.
  • 🔁 Evita duplicación de código (podes usar a mesma clase ou función para distintos tipos).
  • ⚙️ Mellor rendemento (xeneración de código máis eficiente).

🧩 Evitar duplicación con xénericos #

Sen xénericos teriamos que crear unha interface por cada tipo:

abstract class StringCache {
  String getByKey(String chave);
  void setByKey(String chave, String valor);
}

abstract class IntCache {
  int getByKey(String chave);
  void setByKey(String chave, int valor);
}

Co uso de xénericos:

abstract class Cache<T> {
  T getByKey(String chave);
  void setByKey(String chave, T valor);
}

📌 Así reutilizamos a lóxica para calquera tipo (T), sen repetir código.

🧺 Coleccións con tipo #

Podes crear listas, conxuntos e mapas tipados:

var nomes = <String>['Ana', 'Brais'];
//Equivalente a: List<String> nomes = ['Ana', 'Brais'];
var únicos = <String>{'Ana', 'Brais'};
//Equivalente a: Set<String> únicos = {'Ana', 'Brais'};
var páxinas = <String, String>{
  'index.html': 'Inicio',
  'robots.txt': 'Instruccións bots',
};
/*
Equivalente a:
Map<String, String> páxinas = {
  'index.html': 'Inicio',
  'robots.txt': 'Instruccións bots',
};
*/

Exemplos #

🔗 Ver o código en DartPad

📚 Máis información #

Os xenéricos ofrecen moitas máis posibilidades, pero non se profundará máis por estar fóra do alcance dos contidos do módulo de PMDM.

Para quen desexe ampliar coñecementos, recoméndase consultar a documentación oficial de Dart sobre generics: