En Dart, los constructores son métodos especiales que se utilizan para inicializar objetos de una clase. Los constructores permiten establecer el estado inicial de un objeto cuando se crea. En esta sección, aprenderemos sobre los diferentes tipos de constructores en Dart, cómo definirlos y cómo utilizarlos.
Tipos de Constructores
- Constructor por Defecto
- Constructores Nombrados
- Constructores Constantes
- Constructores de Redirección
- Constructor por Defecto
El constructor por defecto es un constructor sin parámetros que se llama automáticamente cuando se crea una instancia de una clase. Si no defines ningún constructor en una clase, Dart proporciona un constructor por defecto implícito.
Ejemplo:
class Persona { String nombre; int edad; // Constructor por defecto Persona() { nombre = 'Desconocido'; edad = 0; } } void main() { Persona p = Persona(); print('Nombre: ${p.nombre}, Edad: ${p.edad}'); }
- Constructores Nombrados
Los constructores nombrados permiten definir múltiples constructores para una clase, cada uno con un nombre diferente. Esto es útil cuando necesitas diferentes formas de inicializar un objeto.
Ejemplo:
class Persona { String nombre; int edad; // Constructor por defecto Persona() { nombre = 'Desconocido'; edad = 0; } // Constructor nombrado Persona.conNombre(this.nombre) { edad = 0; } // Otro constructor nombrado Persona.conEdad(this.edad) { nombre = 'Desconocido'; } } void main() { Persona p1 = Persona(); Persona p2 = Persona.conNombre('Juan'); Persona p3 = Persona.conEdad(25); print('p1 - Nombre: ${p1.nombre}, Edad: ${p1.edad}'); print('p2 - Nombre: ${p2.nombre}, Edad: ${p2.edad}'); print('p3 - Nombre: ${p3.nombre}, Edad: ${p3.edad}'); }
- Constructores Constantes
Los constructores constantes se utilizan para crear objetos inmutables. Para definir un constructor constante, se utiliza la palabra clave const
.
Ejemplo:
class Punto { final int x; final int y; // Constructor constante const Punto(this.x, this.y); } void main() { const Punto p1 = Punto(2, 3); const Punto p2 = Punto(2, 3); print(p1 == p2); // true, porque ambos puntos son constantes e iguales }
- Constructores de Redirección
Los constructores de redirección permiten que un constructor llame a otro constructor de la misma clase. Esto es útil para evitar la duplicación de código.
Ejemplo:
class Cuadrado { double lado; // Constructor principal Cuadrado(this.lado); // Constructor de redirección Cuadrado.unidad() : this(1.0); } void main() { Cuadrado c1 = Cuadrado(2.0); Cuadrado c2 = Cuadrado.unidad(); print('c1 - Lado: ${c1.lado}'); print('c2 - Lado: ${c2.lado}'); }
Ejercicios Prácticos
Ejercicio 1: Constructor por Defecto
Define una clase Animal
con un constructor por defecto que inicialice el nombre del animal a "Desconocido" y la edad a 0. Luego, crea una instancia de Animal
y muestra sus propiedades.
Solución:
class Animal { String nombre; int edad; // Constructor por defecto Animal() { nombre = 'Desconocido'; edad = 0; } } void main() { Animal a = Animal(); print('Nombre: ${a.nombre}, Edad: ${a.edad}'); }
Ejercicio 2: Constructores Nombrados
Define una clase Vehiculo
con un constructor por defecto y dos constructores nombrados: uno que inicialice solo la marca y otro que inicialice solo el modelo. Crea instancias de Vehiculo
utilizando cada constructor y muestra sus propiedades.
Solución:
class Vehiculo { String marca; String modelo; // Constructor por defecto Vehiculo() { marca = 'Desconocido'; modelo = 'Desconocido'; } // Constructor nombrado Vehiculo.conMarca(this.marca) { modelo = 'Desconocido'; } // Otro constructor nombrado Vehiculo.conModelo(this.modelo) { marca = 'Desconocido'; } } void main() { Vehiculo v1 = Vehiculo(); Vehiculo v2 = Vehiculo.conMarca('Toyota'); Vehiculo v3 = Vehiculo.conModelo('Corolla'); print('v1 - Marca: ${v1.marca}, Modelo: ${v1.modelo}'); print('v2 - Marca: ${v2.marca}, Modelo: ${v2.modelo}'); print('v3 - Marca: ${v3.marca}, Modelo: ${v3.modelo}'); }
Conclusión
En esta sección, hemos aprendido sobre los diferentes tipos de constructores en Dart y cómo utilizarlos para inicializar objetos de una clase. Los constructores son una parte fundamental de la programación orientada a objetos y permiten establecer el estado inicial de los objetos de manera flexible y eficiente. En la próxima sección, exploraremos la herencia en Dart y cómo se puede utilizar para crear jerarquías de clases.
Curso de Programación en Dart
Módulo 1: Introducción a Dart
- Introducción a Dart
- Configuración del Entorno de Desarrollo
- Tu Primer Programa en Dart
- Sintaxis y Estructura Básica