Agora sim, o grande ganho do enum no Dart 2.17
Que tal usufruirmos de todas as novas possibilidades đ
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 implementeinterfaces
:
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 đ€
Links Ășteis
Did you find this article valuable?
Support KauĂȘ Martins by becoming a sponsor. Any amount is appreciated!