Menu
Coddy logo textTech

Constructores nombrados

Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 11 de 110.

Los constructores con nombre le permiten crear múltiples constructores para una clase, cada uno con un nombre descriptivo que aclara su propósito. Esto es especialmente útil cuando necesita diferentes formas de inicializar un objeto.

La sintaxis utiliza el nombre de la clase seguido de un punto y el nombre del constructor:

class Point {
  int x;
  int y;

  // Constructor regular
  Point(this.x, this.y);

  // Constructor nombrado para el punto de origen
  Point.origin() : x = 0, y = 0;

  // Constructor nombrado a partir de un solo valor
  Point.diagonal(int value) : x = value, y = value;
}

Cada constructor nombrado proporciona una forma clara y legible de crear objetos:

Point p1 = Point(3, 5);
Point p2 = Point.origin();
Point p3 = Point.diagonal(10);

print('p1: (${p1.x}, ${p1.y})'); // p1: (3, 5)
print('p2: (${p2.x}, ${p2.y})'); // p2: (0, 0)
print('p3: (${p3.x}, ${p3.y})'); // p3: (10, 10)

Los constructores con nombre hacen que tu código sea más expresivo. En lugar de adivinar qué significa Point(0, 0), Point.origin() comunica inmediatamente la intención. Este patrón es común en las librerías de Dart y ayuda a crear código autodocumentado.

challenge icon

Desafío

Fácil

Vamos a construir un convertidor de temperatura que muestre el poder de los constructores nombrados. Crearás una clase Temperature que puede ser inicializada de diferentes maneras dependiendo de la unidad con la que estés comenzando.

Organizarás tu código en dos archivos:

  • temperature.dart: Define una clase Temperature con una variable de instancia double celsius. Tu clase debe proporcionar tres formas de crear una temperatura:
    • Un constructor regular Temperature(this.celsius) que toma un valor Celsius directamente
    • Un constructor nombrado Temperature.fromFahrenheit que acepta un valor Fahrenheit y lo convierte a Celsius usando la fórmula: (fahrenheit - 32) * 5 / 9
    • Un constructor nombrado Temperature.freezing() que crea una temperatura en el punto de congelación (0 grados Celsius)
    Añade un método display() que imprima: [celsius]C
  • main.dart: Importa tu clase de temperatura y crea tres objetos de temperatura:
    • Uno usando el constructor regular con 25.0
    • Uno usando fromFahrenheit con 98.6
    • Uno usando freezing()
    Llama a display() en cada temperatura en el orden listado anteriormente.

Formato de salida esperado:

25.0C
37.0C
0.0C

Hoja de referencia

Los constructores con nombre te permiten crear múltiples constructores para una clase con nombres descriptivos que aclaran su propósito.

La sintaxis utiliza el nombre de la clase seguido de un punto y el nombre del constructor:

class Point {
  int x;
  int y;

  // Constructor regular
  Point(this.x, this.y);

  // Constructor con nombre para el punto de origen
  Point.origin() : x = 0, y = 0;

  // Constructor con nombre a partir de un solo valor
  Point.diagonal(int value) : x = value, y = value;
}

Uso de constructores con nombre:

Point p1 = Point(3, 5);
Point p2 = Point.origin();
Point p3 = Point.diagonal(10);

print('p1: (${p1.x}, ${p1.y})'); // p1: (3, 5)
print('p2: (${p2.x}, ${p2.y})'); // p2: (0, 0)
print('p3: (${p3.x}, ${p3.y})'); // p3: (10, 10)

Los constructores con nombre hacen que el código sea más expresivo y autodocumentado al comunicar claramente la intención.

Pruébalo tú mismo

import 'temperature.dart';

void main() {
  // TODO: Crea una Temperature usando el constructor regular con 25.0
  
  // TODO: Crea una Temperature usando fromFahrenheit con 98.6
  
  // TODO: Crea una Temperature usando freezing()
  
  // TODO: Llama a display() en cada temperatura en orden
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos