Volver a la página principal
jueves 31 octubre 2024
7

Cómo usar Extension Methods en Dart

En Dart, los Extension Methods permiten agregar nuevas funcionalidades a clases existentes sin modificar su código original. Esta funcionalidad es especialmente útil cuando deseas añadir métodos a clases de bibliotecas externas, facilitando el enriquecimiento de las APIs sin herencia o envolturas adicionales.

¿Qué son los Extension Methods en Dart?

Los Extension Methods en Dart te permiten definir métodos adicionales para cualquier tipo, ya sea un tipo propio o uno de una biblioteca. La sintaxis utiliza la palabra clave extension seguida del nombre de la extensión y la declaración de los métodos. Esto ofrece una forma segura y estructurada de extender clases con métodos específicos y personalizados.

Sintaxis básica de un Extension Method

Para crear un método de extensión, usa la palabra clave extension, define un nombre para la extensión, y especifica el tipo que deseas extender.

extension StringExtension on String {
  String capitalizarPrimeraLetra() {
    return this[0].toUpperCase() + this.substring(1);
  }
}

En este ejemplo, se agrega el método capitalizarPrimeraLetra a la clase String, que transforma la primera letra en mayúscula.

Ejemplos de uso de Extension Methods en Dart

Extender una clase existente

Este ejemplo amplía la clase String con un método para contar las palabras de una cadena.

extension ContadorDePalabras on String {
  int contarPalabras() {
    return this.trim().split(RegExp(r'\s+')).length;
  }
}

void main() {
  String frase = "Hola, este es un ejemplo de extensión";
  print("Número de palabras: ${frase.contarPalabras()}");
}

Extender tipos numéricos

Puedes crear métodos para tipos numéricos como int y double:

extension OperacionesEntero on int {
  int cuadrado() => this * this;
  bool esPar() => this % 2 == 0;
}

void main() {
  int numero = 5;
  print("Cuadrado de $numero: ${numero.cuadrado()}"); // Imprime: Cuadrado de 5: 25
  print("¿$numero es par? ${numero.esPar()}");       // Imprime: ¿5 es par? false
}

En este ejemplo, se agregan los métodos cuadrado y esPar a la clase int.

Extensión en clases de bibliotecas externas

Si estás usando bibliotecas externas, puedes agregarles métodos de utilidad sin modificar la biblioteca.

import 'dart:math';

extension RadianesExtension on num {
  double aRadianes() => this * (pi / 180);
}

void main() {
  double grados = 90;
  print("90 grados en radianes: ${grados.aRadianes()}");
}

Este ejemplo extiende el tipo num con un método que convierte grados a radianes.

Extensiones sin nombre

Las extensiones también pueden definirse sin un nombre específico, lo cual es útil cuando solo necesitas usar la extensión en un archivo específico y no planeas reutilizarla en otros lugares.

extension on List<int> {
  int sumaTotal() => this.reduce((a, b) => a + b);
}

void main() {
  List<int> numeros = [1, 2, 3, 4, 5];
  print("Suma total: ${numeros.sumaTotal()}"); // Imprime: Suma total: 15
}

Ventajas de los Extension Methods

  • No modifican la clase original: Permiten añadir métodos sin alterar el código fuente de la clase.
  • Reutilización y legibilidad: Simplifican el código y permiten el uso de funcionalidades personalizadas directamente.
  • Flexibilidad: Se pueden aplicar a cualquier tipo, facilitando la extensión de APIs externas.

Referencia oficial

Para más detalles, puedes consultar la documentación oficial de Dart sobre Extension Methods.

Etiquetas:
dart
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer