Clases en Dart: objetos y propiedades

Clase 17 de 29Curso de Dart

Resumen

Comprender cómo funcionan las clases en Dart es fundamental, ya que todo en este lenguaje está definido en base a clases. Desde representar una persona hasta modelar un empleado, las clases son el plano que define qué atributos tiene un objeto y qué acciones puede realizar. A continuación se explica paso a paso cómo declarar una clase, crear objetos y aprovechar funcionalidades como la notación en cascada.

¿Qué es una clase y cómo se define en Dart?

Una clase es el plano o modelo a partir del cual se crean objetos. Un objeto puede representar cualquier cosa: una casa, un carro o una persona. En Dart, para definir una clase se utiliza la palabra reservada class seguida del nombre [0:44].

Dentro de la clase se declaran variables de instancia (los atributos del objeto) y métodos (las funciones que puede ejecutar). Veamos un ejemplo básico:

dart class Empleado { int? id; String? nombre;

bool cumplioHorario() { return true; }

void trabajar() { print('El empleado con nombre $nombre realizó su trabajo'); } }

  • id y nombre son las variables de instancia del empleado.
  • cumplioHorario() regresa un valor booleano que indica si la persona trabajó.
  • trabajar() imprime un mensaje en pantalla usando interpolación de cadenas con $nombre.

¿Cómo se crea un objeto e instancia una clase?

Para usar una clase es necesario instanciarla, es decir, crear un objeto a partir de ella. Esto se logra asignando una nueva instancia a una variable [2:10]:

dart void main() { var empleadoMP = Empleado() ..id = 1 ..nombre = 'Roberto';

if (empleadoMP.cumplioHorario()) { empleadoMP.trabajar(); } }

  • Se accede a las propiedades del objeto con el operador punto: empleadoMP.id = 1.
  • La palabra new ya no es necesaria desde Dart 2.1 [3:08].
  • Se pueden invocar los métodos del objeto de la misma forma: empleadoMP.trabajar().

¿Qué es la notación en cascada y por qué usarla?

La notación en cascada (..) permite encadenar múltiples asignaciones o llamadas sobre el mismo objeto en una sola expresión [3:27]. En lugar de escribir línea por línea:

dart var empleado2 = Empleado(); empleado2.id = 2; empleado2.nombre = 'Pedro';

Se puede condensar así:

dart var empleado2 = Empleado() ..id = 2 ..nombre = 'Pedro';

Ambas declaraciones son completamente equivalentes, pero la cascada resulta más compacta y legible.

¿Cómo manejar condiciones con objetos de forma legible?

Cuando se evalúa si un empleado cumplió su horario, se puede usar un condicional estándar o una versión más concisa [4:40]:

dart // Forma extendida if (empleadoMP.cumplioHorario()) { empleadoMP.trabajar(); }

// Forma concisa con operador ternario empleadoMP.cumplioHorario() ? empleadoMP.trabajar() : print('El empleado no se presentó a trabajar hoy');

La segunda opción mantiene toda la lógica en una sola línea, lo que hace el código más legible y óptimo.

¿Qué elementos componen una clase en Dart?

Para recapitular la estructura fundamental:

  • Variables de instancia: almacenan los datos propios del objeto (id, nombre).
  • Métodos: definen el comportamiento del objeto; pueden retornar valores o simplemente ejecutar acciones.
  • Instanciación: proceso de crear un objeto concreto a partir de la clase.
  • Interpolación de strings: permite insertar variables dentro de cadenas de texto con $variable.
  • Notación en cascada: simplifica la asignación múltiple de propiedades usando ...

Esta es la base sobre la cual se construyen funcionalidades más avanzadas. Si quieres profundizar en constructores, herencia o mixins, comparte tus dudas en los comentarios.