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

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay