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

Image of Docusign

Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

AWS Security LIVE!

Hosted by security experts, AWS Security LIVE! showcases AWS Partners tackling real-world security challenges. Join live and get your security questions answered.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️