DEV Community

Toshi Ossada for flutterbrasil

Posted on

Novos Modificadores de Classe no Dart 3

dart 3

No novo Dart 3 tivemos uma mudança bastante interessante que são os novos modificadores de classe, confesso que quando migrei para o Dart achei estranho não termos alguns modificadores de classe, como o interface, e usávamos o abstract para suprir esse déficit.

Os modificadores de classe podem ser utilizados em uma classe e antes da palavra reservada class, como já estamos acostumados.

Com o Dart 3 além dos modificadores que já estamos acostumados como abstract e mixin que era possível você construir, entender ou implementar uma classe, agora também temos a interface, final, sealed e base que trazem limitadores na c*onstrução, extensão e implementação* das classes que possuem esses modificadores, vamos entender o que cada uma traz de novo.

Interface

Se você chegou a trabalhar com outra linguagem que tem interfaces como C# ou JAVA vai perceber uma diferença com a interfaces do Dart, pois ao contrario das outras linguagens que a interface serve apenas para definir o contrato de métodos, no Dart a inteface define uma classe que pode ser implementada e construída, mas não estendida (fora da biblioteca).

Mas calma, nem tudo está perdido, se você quiser criar uma classe que defina apenas o contrato do que deve ser implementado(com o no C# ou JAVA) adicione o modificador abstract junto a interface , ficando abtract interface class.

Note que a regra de não poder estender uma interface só vale quando é uma classe externa ao arquivo, se estiver dentro do mesmo arquivo ainda assim conseguirei estender a interface (isso vale para a limitação de todos os outros modificadores que iremos falar).

Se estiver em arquivos separados a regra se mantém e não é possível estender.

Final

Uma classe que contém o modificador final limita que a classe não pode ser implementada ou estendida externamente, mas pode ser construída.

Vamos criar uma classe final Cachorro.

Se criarmos outra classe e estender de Cachorro não será possível e irá apresentar um erro.

Base

Já o modificador Base diferente da interface não permite que a classe seja implementada em uma outra classe que esteja externo ao biblioteca, mas permite que ela seja construída ou estendida.

Além do mais, as subclasses que irão estender a classe base deverão ser uma classe com os modificadores final ou sealed.

Se tentarmos estender da classe Animal irá ocorrer um erro:

Para resolver o problema a classe Cachorro deverá ser final ou sealed.

Se tentar implementar a classe Animal também não será possível.

Vale lembrar que assim como nas interfaces é possível adicionar o modificador abstract base para que não precise implementar os métodos na classe base deixando apenas os contratos.

Sealed

O modificador sealed é um dos mais restritivos dentro do Dart, com ela a classe não poderá ser implementada, estendida e nem construída externamente, o uso dela será restrito para uso interno da biblioteca e possibilitara a checagem exaustiva de suas subclasses no switch.

Agora se fizermos um switch verificando os tipos do Failure o linter já irá retornar um erro dizendo para verificar todas as subclasses de Failure.

Muito bacana esses novos modificadores né? Para mais informações procure na documentação oficial do dart https://dart.dev/language/class-modifiers ou em https://dart.dev/language/modifier-reference#valid-combinations.

Nosso querido Professor Diego também tem um vídeo bem bacana sobre esse assunto, confira abaixo:

Monorepo (Por Que Essa Estratégia Funciona em Grandes Empresas?)

Vlw! 😉

Image description

Entre em nosso discord para interagir com a comunidade: flutterbrasil.com.br

Top comments (0)