Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
October 12, 2021 03:31 pm GMT

Entendendo o null safety

Ol pra voc que est chegando de paraquedas nesse artigo, ou est seguindo um link que eu provavelmente publiquei em alguma das minhas redes! Espero que esteja muito bem hidratado(a), por que nesse artigo vamos buscar entender de uma forma simplificada o null safety, que abalou muitos coraes na atualizao do flutter 2.0.

Este um artigo beginner friendly, ento j fiquem avisados que no h o que temer e depois desse artigo espero que vocs olhem para essa feature de uma maneira mais simptica, pois ela veio para te ajudar.

Antes de comearmos, sugiro que voc abra o DartPad (https://dartpad.dev/) e v testando cdigos com e sem null safety pra voc entender melhor e ver na prtica as coisas acontecendo!

O que null

Antes de falar propriamente sobre o null safety, precisamos primeiramente entender o conceito de null:

Uma varivel tem o valor null quando nenhum valor foi atribudo ela, ou seja, literalmente nada. Por exemplo:

Se eu inicializar uma varivel sem passar um valor referente ela:

String nome;
print(nome);

Em um ambiente sem o null safety habilitado poderemos ver que imprimimos 'null' no console, justamente por no termos atribudo nenhum valor aquela varivel.

Assim, se quisssemos tratar situaes em que uma varivel pode ser nula, poderamos fazer da seguinte maneira:

if(variavel == null){<br>print('no temos um valor para essa varivel');<br>} else {<br>print(variavel);<br>}

Agora, se voc for iniciante (como eu sou), voc deve estar tendo alguma dificuldade em entender as implicaes prticas disso, e normal no incio a gente no ter uma dimenso do que significa isso dentro de um sistema real, afinal, s tratarmos como no exemplo acima que t tudo certo n? Bom, na teoria sim, mas vou contar pra vocs que erros de null so os mais comuns em sistemas do mundo todo, so to comuns que a primeira pessoa que criou o null, Tony Hoare, pediu publicamente desculpas por t-lo criado e o chamou de "billion dollar mistake", o erro de um bilho de dlares.

Tempo de compilao vs Tempo de execuo

At aqui conseguimos definir o que null e entender que variveis com valores null so a causa de um dos bugs mais comuns em programas no mundo.
Vamos agora entender a diferena entre tempo de compilao e tempo de execuo no processo de desenvolvimento de software, pois isso foi um conceito crucial para que eu entendesse a importncia e praticidade que null safety traz para os nossos programas.

Quando estamos escrevendo cdigo em linguagens de alto nvel, ou seja, que so mais prximas da linguagem humana e mais afastadas da linguagem de mquina (como por exemplo Java, JavaScript, Python e nosso querido Dart), necessitamos de um compilador, que como se fosse um tradutor, um conversor que vai fazer com que a mquina o compreenda.

O tempo em que estamos escrevendo esse cdigo podemos chamar de tempo de compilao, nesse tempo o computador pode reconhecer erros de sintaxe e semntica sem que seja necessria a execuo do programa.

O tempo de execuo exatamente isso que o nome diz, quando um programa entra em execuo, e nesse estgio o programa consegue detectar comportamentos que durante o tempo de compilao no puderam ser previstos, podendo assim gerar erros que muitas vezes quebram o programa.

Sendo assim, eu posso escrever a seguinte funo para definir o nome completo de um membro da famlia Martins:

 String sobrenome = 'Martins';<br>  String nomeCompleto(String nome) {<br>    return nome + ' ' + sobrenome;<br>  } nomeCompleto(null)

Sem o null safety esse cdigo compilaria, causando um erro somente em tempo de execuo, porm quando habilitamos o null safety, j em tempo de compilao o computador nos avisa que um parmetro do tipo null no pode ser atribudo a um parmetro do tipo String, isso se deve ao fato de que com o null safety por padro as variveis nunca podem ter um valor null, evitando assim que nosso programa quebre.

Null Safety

O nome j diz: segurana null. Essa feature chegou para fazer nossos cdigos mais seguros e a prova de erros, e agora vamos entender o null safety de uma maneira que a gente poder trabalhar com ou sem ele, assim no importa se voc estiver vendo um tutorial ou artigo sobre dart e flutter que foi feito antes do null safety, voc saber exatamente o que fazer para adaptar o cdigo para as verses mais atuais do flutter.

Operador "?"

Por padro, depois do null safety, todas as variveis nunca podero ser nulas, ou seja, elas so "non nullable". Mas a vocs me perguntam: "mas Rafa, como fazemos ento quando a gente QUER que aquela varivel seja nula pelo menos durante um determinado momento do programa?" Isso simples, basta sinalizar com um "?" logo aps a tipagem dela, dessa maneira:

final String? nome;

Esse padro muito utilizado na criao de classes:

class Pessoa{<br>  Pessoa({required this.nome, required this.idade, <br>  this.pet});<br>  final String nome;<br>  final String idade;<br>  final String? pet;<br>}

Todas as pessoas tem um nome e idade, mas nem todo mundo tem um bichinho de estimao, assim eu sinalizei para o programa que o campo "pet" no obrigatrio, e coloquei a palavra reservada required para dizer que os campos "nome" e "idade" so obrigatrios na criao de uma varivel do tipo Pessoa.

Ok, mas e se quisssemos realizar operaes com uma varivel sem saber se ela nula ou no?

Se escrevssemos o seguinte cdigo:

void main(){<br>  int num1;<br>  int num2 = 10;<br>  int soma(int a, int b){<br>   return a +b;}<br> print(soma(num1, num2));}

Com o null safety, em tempo de compilao j saberamos que nosso cdigo no est seguro e conseguiramos consertar esse erro bem facilmente mesmo a varivel num1 podendo ser nula, da seguinte forma:

void main(){<br>  int? num1;<br>  int num2 = 10;<br>  int soma(int a, int b){<br>    return a +b;}<br> if(num1 != null){<br>  print(soma(num1, num2));}}

E por incrvel que parea o Dart vai ficar feliz com esse cdigo sim, pois ele bem inteligente e j sabe que a funo s ser executada caso a varivel num1 no seja nula!

Tambm podemos utilizar o operador "??" para executarmos alguma ao caso algum valor seja nulo:

int? x;<br> int y = x ?? 0;<br>print(y);//0

Operador "!"

Usamos esse operador quando temos certeza de que uma varivel que pode ser nula tem um valor naquele momento do programa, permitindo assim que a gente execute funes e atribuies envolvendo aquela varivel:

  int banana = 10;<br>  int? abacaxi;<br>  if (banana > 0) {<br>    abacaxi = 2;}<br>  int frutas = banana + abacaxi!;<br>  print(frutas);

Sem o "!" o Dart iria reclamar, mas esse sinal como se a gente falasse pra ele "fica sussa fiote, eu sei o que eu estou fazendo!", e ele confia na gente fcil assim! S cuidado pra no vacilar e ele mandar uma de "eu avisei!"...

Concluso

Voc chegou at aqui?! Que maravilha, estou muito feliz e espero que voc tenha conseguido compreender melhor o null safety e escrever cdigos mais confiveis e seguros!

Existem vrias outras situaes que poderamos nos deparar durante a criao dos nossos cdigos com null safety e que eu no cobri nesse artigo, pelo fato de que iria ficar muito longo e cansativo, mas espero ter esclarecido o uso dos operadores, o porqu do null safety e como trabalhar com ele.

Hoje ouvi uma pessoa muito querida dizer num podcast que programar como um super poder, eu achei a analogia fantstica, e como se a cada coisa nova que aprendemos, adicionamos mais algo especial nesse super poder, algo que vai fazer a diferena pra algum em contato com a tecnologia que criamos!

Vamos ento salvar o dia com nossos super poderes :)

Happy coding!

*Esse artigo foi feito com muita ajuda das explicaes do curso de Dart do Andrea Bizzotto na Udemy alm de outras fontes diversas na internet. Pra quem entende ingls e quer um curso com explicaes claras e projetinhos mo na massa, eu recomendo fortemente o curso do Andrea!


Original Link: https://dev.to/rrafush/entendendo-o-null-safety-437k

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To