Agora sim, o grande ganho do enum no Dart 2.17

Agora sim, o grande ganho do enum no Dart 2.17

Que tal usufruirmos de todas as novas possibilidades 😏

·

2 min read

Como mencionado no artigo anterior, nĂŁo era possĂ­vel declarar membros nos nossos enums e de certa forma vĂĄrios devs ficavam chateados(as) e magoados(as) đŸ˜€

Mas para nossa alegria, isso finalmente mudou, fique tranquilo(a), vocĂȘ nĂŁo leu errado, melhoria implementa e issue fechada (oiĂĄ atĂ© rimou đŸ€Ș).

Vai, bora dar aquele refactor em um cĂłdigo que estĂĄ usando uma extensions!? Eu sei que vocĂȘ quer, entĂŁo sĂł vamos...

  • VersĂŁo que causa certa tristeza ao olhar đŸ„Č
enum Transport { car, truck, airplane, train, boat }

extension TransportExt on Transport {
  int getSpeed() {
    switch (this) {
      case Transport.car:
        return 65;
      case Transport.truck:
        return 55;
      case Transport.airplane:
        return 600;
      case Transport.train:
        return 70;
      case Transport.boat:
        return 22;
    }
  }
}

Fique tranquilo, vocĂȘ ainda pode fazer assim 😼‍💹

  • VersĂŁo que causa alegria ao olhar 😆
enum Transport {
  car(65),
  truck(55),
  airplane(600),
  train(70),
  boat(22);

  final int _speed;
  const Transport(this._speed);

  int getSpeed() => _speed;
}

Como algo "simples" pode deixar tanto(a) dev feliz nĂŁo Ă© mesmo đŸ’đŸœâ€â™€ïž

Ei, calma que sĂł melhora, hĂĄ mais coisas que vĂŁo te dar uma "explosĂŁo" de felicidade đŸ„ł

  • Use com generics:
enum Transport<T extends num> {
  car<int>(65),
  truck<int>(55),
  airplane<double>(600.50),
  train<num>(70.25),
  boat(22); // A inferĂȘncia do tipo tambĂ©m funciona ;)

  final T _speed;
  const Transport(this._speed);

  T getSpeed() => _speed;
}
  • Adicione mixins e implemente interfaces:
mixin Speedometer {
  // int speed = 0; Se usado no enum, deve ser final  
  int get maxSpeed;
}

abstract class Validation {
 bool isValidSpeed(int speed);
}

enum Transport with Speedometer implements Validation {
  ...
  const Transport(this.maxSpeed);

  @override
  final int maxSpeed;

  @override
  bool isValidSpeed(int speed) => speed <= maxSpeed;
}
  • Faça Factory constructors:
enum Transport {
  ...
  const Transport(this.speed);

  factory Transport.faster() => Transport.airplane;

  factory Transport.slower() => Transport.boat;
}

SĂł nĂŁo se esqueça, o enum continua sendo uma constante, vocĂȘ nĂŁo pode estender dele, sobrescrever o index, hashCode, o operador == e nem se quer pensar em declarar um membro chamado values 😉

Sobre essa melhoria, deixo a seguinte frase do qual nĂŁo sei o seu autor(a):

"Não existe começo perfeito, a evolução é um processo."

Reflitamos đŸ€”

Se chegou atĂ© aqui, nĂŁo fique acanhado(a), deixe aquele like, compartilha com os(as) devs e me segue nas redes sociais đŸ»

Esqueci ou errei algo? NĂŁo hesite e me avise đŸ€—

Did you find this article valuable?

Support KauĂȘ Martins by becoming a sponsor. Any amount is appreciated!