Introdução
Mixins são semelhantes às classes, mas não podem ser instanciados. Em vez disso, eles usam seus métodos e atributos para adicionar funcionalidades a outras classes.
Vantagens de usar mixins em Dart
Mixins são uma forma de compartilhar código entre classes em Dart. Contudo em vez disso, são usados para adicionar métodos ou atributos a outras classes.
Mixins oferecem uma série de vantagens, incluindo:
- Reuso de código: Mixins permitem que você compartilhe código comum entre classes, sem precisar duplicar o código em cada classe. Enfim isso pode ajudar a reduzir o tamanho e a complexidade do seu código.
- Flexibilidade: Mixins permitem que você combine funcionalidades de várias classes em uma única classe. Porque isso pode ser útil para criar classes personalizadas com funcionalidades específicas.
- Testabilidade: Mixins podem ser usados para adicionar funcionalidades de teste a classes. Isso pode facilitar a escrita de testes para suas classes.
Alguns exemplos de uso de mixins:
- Adicionar funcionalidades comuns a várias classes: Um mixin pode ser usado para adicionar um método de log a todas as classes. Isso pode ser útil para depurar seu código ou para fins de auditoria.
- Criar classes personalizadas com base em classes existentes: Um mixin pode ser usado para adicionar funcionalidades a uma classe existente. Por exemplo, um mixin pode ser usado para adicionar um método de validação a uma classe que representa dados.
- Testar classes: Um mixin pode ser usado para adicionar métodos de teste a uma classe. Da mesma forma isso pode facilitar a escrita de testes para suas classes.
Usando o on
Contudo para compartilhar um método de uma classe com um mixin, use o on
. Bem como o on
especifica a classe da qual o método é herdado.
No exemplo a seguir, o mixin Cacar
compartilha o método cacar()
da classe Reptil
.
mixin Cacar on Reptil {
void cacar(String presa){
print ('${this.runtimeType}-------');
nadar();
rastejar();
morder();
print('Comeu $presa');
}
}
A classe Crocodilo
estende a classe Reptil
e o mixin Cacar
. Porque isso significa que a classe Crocodilo
tem acesso ao método cacar()
.
class Crocodilo extends Reptil with Cacar{}
Da mesma forma no exemplo a seguir, o método cacar()
é chamado para um objeto da classe Crocodilo
.
Crocodilo().cacar('Zebra');
Saída:
Crocodilo-------
Nadando ...
Rastejando ...
Nhac!
Comeu Zebra
Outras palavras-chave
Além do on
, também é possível usar outras palavras-chave para compartilhar métodos de uma classe com um mixin.
with
: Esta palavra-chave é equivalente aoon
.implements
: Esta palavra-chave especifica que a classe implementa os métodos do mixin.
Exemplo
No exemplo a seguir, o mixin Nadar
é implementado pela classe Peixe
. Isso significa que a classe Peixe
tem acesso aos métodos nadar()
e morder()
do mixin.
mixin Nadar{
void nadar() => print('Nadando ...');
}
class Peixe implements Nadar{
void alimentar(){
print('Peixe ------');
nadar();
morder();
}
}
Primeiramente no exemplo a seguir, o método alimentar()
é chamado para um objeto da classe Peixe
.
Peixe().alimentar();
Saída:
Peixe ------
Nadando ...
Nhac!
Conclusão
Enfim Mixins são uma ferramenta poderosa para compartilhar código entre classes. Sendo usados para simplificar o código e melhorar sua reusabilidade. Contudo como mostrei neste artigo como compartilhar método de uma classe com Mixin.