Executando verificação de segurança...
2

Null-Safety na Linguagem Dart

Se você está aprendendo Dart e ainda não compreendeu bem a questão do null-safety, eu acredito que com essa explicação ficará mais simples!

Null-Safety é uma maneira de controlar o que pode ser null e o que não pode ser.

Atenção

Se você quer permitir que uma variável receba um valor null, basta adicionar um "?" na frente da tipagem, como isto:

String? nome;

A variável nome inicia como null e também pode receber esse valor quando quiser, agora vamos usa-lá.


String? nome;
print(nome); 

// Output: null

Existe algumas expressôes que podemos usar, entre elas estão:

  • ?? ( Recebe um valor do lado direito caso o esquerdo seja null )
  • ! ( Afirma que uma variável que pode ser null não é contém null )
  • ??= ( Atribui um valor a uma variável caso ela seja null )

Vamos aos exemplos, digamos que eu queira mostrar algo caso nome seja null, eu faria algo como:

String? nome;
print(nome ?? 'Nenhum nome foi informado');

// Output: Nenhum nome foi informado

E se eu quissese afirmar que a variável nome tem algum valor que é diferente de null?

String? nome;
print(nome!);

// Output: Uncaught TypeError: Cannot read properties of null (reading 'toString')Error: TypeError: Cannot read properties of null (reading 'toString')

Pois é! Daria um erro, isso porque nós mentimos, a variável nome era null mas nós afirmamos que não era, por isso que deu erro, o "!" é muito bom quando você quer dizer que tem certeza que uma variável não é null:

String? nome;

nome = "Carlos"; // Supondo que em algum momento eu fiz isso.

print(nome!);

// Output: Carlos

Mas e se eu quiser mudar a variável apenas se ela for null?
Simples:

String? nome;

nome ??= "Carlos";

print(nome);

// Output: Carlos

Viu como é simples?

Então você pode fazer isso com String, int, bool, e por ai vai...
Até em funções, veja exemplos:


// Não temos a chance de retornar um null aqui
String obterNome() {
    return "Nome";
}

Eu posso usar a função obterNome sem medo de receber um null


String? tentarObterNome() {
    final now = DateTime.now();
    
    if (now.day == 1) {
        return "Carlos";
    }
    
    return null;
}

Já aqui temos uma regra, o nome só será retornado caso seja dia um do mês.


É isso... espero que tenha ajudado o pessoal do Dart

Carregando publicação patrocinada...