Null Safety em Dart: como utilizar?

Com a atualização do Dart 2.0, o Null Safety surgiu, transformando a forma como escrevemos código. Veja em que situações podemos usar o Null Safety e como ele impacta no dia a dia dos desenvolvedores.
Kevin Santos | 4 de maio de 2021

O Null Safety veio junto com a atualização do Dart 2.0, o que mudou o jeito de se escrever código. Neste post iremos nos aprofundar mais em que situações podemos usá-lo e como isso impacta no nosso dia a dia como devs.

O que é Null Safety e como utilizá-lo?

No meu post anterior, eu expliquei um pouco sobre o que é e para o que serve o Null Safety. Como uma maneira de validar seu código, o Null Safety trouxe mais confiança na hora de escrevê-lo, permitindo o Sound Null Safety avisar o compilador sobre quais variáveis precisam de null check.

Para exemplificar o uso no Null Safety, podemos pensar na seguinte situação:

Blog post _ 04.05.2021_ Dart e Null Safety_1.png

Você possui um usuário e ele precisa ter um nome e um sobrenome, se rodarmos esses códigos, o resultado disso será uma String John Doe. Porém, o resultado poderá ser uma String vazia se não a preenchermos, o que gera a necessidade de verificarmos se as variáveis estão nulas.

Blog post _ 04.05.2021_ Dart e Null Safety_2.png

Até então nada de novo. Porém, nem sempre lembramos de verificar se todas as variáveis estão com algum valor. Para isso serve o Null Safety: ter a garantia de que suas variáveis terão valor quando necessário. Ativando o Null Safety no código acima, podemos validar a variável mesmo antes de utilizarmos ela, não permitindo rodar esse código sem que estes problemas sejam resolvidos.

Blog post _ 04.05.2021_ Dart e Null Safety_3.png

Sendo assim, no caso do nosso requisito, nós permitirmos que os nomes sejam nulos, mudamos o tipo do objeto de String para String?, avisando ao compilador de que essas variáveis vão ser nulas e nós sabemos disso.

Blog post _ 04.05.2021_ Dart e Null Safety_4.png

Null Safety em funções

Outro caso que podemos nos deparar é em funções onde a nossa variável pode ser nula e a nossa chamada da função não permitir que passemos valores nulos, como o exemplo abaixo:

Blog post _ 04.05.2021_ Dart e Null Safety_5.png

Nesse caso, podemos utilizar de algumas técnicas para resolvermos o problema.

A primeira é avisar para o compilador que temos certeza de que essas variáveis não serão nulas, adicionando uma exclamação na frente da variável da seguinte forma:

Blog post _ 04.05.2021_ Dart e Null Safety_6.png

Mas para isso, devemos ter 100% de certeza que as variáveis serão preenchidas, caso contrário, a aplicação irá retornar uma exceção!

A segunda técnica é validar anteriormente se as variáveis são nulas ou não, mantendo a segurança da função, da seguinte forma:

Blog post _ 04.05.2021_ Dart e Null Safety_7.png

O que faz com que o código retorne à forma que escrevemos anteriormente sem null safety

E por fim, a terceira técnica é utilizar valores default caso o valor seja nulo da seguinte forma:

Blog post _ 04.05.2021_ Dart e Null Safety_8.png

Vale comentar também que se você optar por aceitar nulos em sua função, o Dart te lembra caso você esqueça de verificar se sua variável é nula ou não, como no exemplo abaixo:

Blog post _ 04.05.2021_ Dart e Null Safety_9.png

Mas, o que acontece se você quer definir uma variável como non-nullable, porém só irá definir o valor dela mais a frente no código? Para isso utilizamos o operador late.

O operador Late

Quando você tem a certeza que irá definir a variável,  como em um construtor de classe, por exemplo, o Dart irá apontar como um erro a variável estar nula mesmo atribuindo ela ao construtor. Veja:

Blog post _ 04.05.2021_ Dart e Null Safety_10.png

Para avisar o Dart de que essa variável será preenchida e que temos certeza disso, usamos o operador Late, ficando dessa maneira:

Blog post _ 04.05.2021_ Dart e Null Safety_11.png

Assim, continuamos usando o Null Safety e tendo a confiança de que a variável será preenchida.

Conclusão

Com operadores ?, ! e late, agora podemos utilizar Null Safety em nosso código de uma forma simples e intuitiva em nossas variáveis, facilitando na hora da escrita e leitura, além de automaticamente melhorarmos a performance da nossa aplicação. Lembre-se de continuar estudando o Null Safety para conseguir usar todo o potencial dele.

  • Leia também: Tudo o que você precisa saber sobre o Flutter 2.0
  • Kevin Santos
    Software Engineer | Arquitetura de software, infraestrutura, desenvolvimento web e mobile. Procurando a solução certa pra cada problema. Programador até nas horas vagas.