DART - Operadores para NULL

 Neste artigo veremos como usar os operadores de reconhecimento de NULL na linguagem Dart.

DART(tradução: dardo, pequeno míssel) é a linguagem da Google usada pelo Flutter.

O Flutter é um SDK de aplicativo móvel do Google que ajuda a criar aplicativos móveis modernos para iOS e Android usando uma única (quase) base de código.

Se você não conhece o Flutter veja o meu artigo :  Flutter - Primeiros contatos e impressões

O objetivo dos artigos sobre o DART é abordar recursos específicos da linguagem que são uma característica do DART de forma a ajudar programadores C# a entender esses recursos.

DART - Operadores para tratamento de NULL

O DART possui alguns operadores que podemos usar para verificar o NULL e realizar o tratamento conforme o operador.

1 - Operador ??


  expressao_1 ?? expressao_2
  x = y ?? z

 

- Avalia expressao_1 e caso for NULL atribui a expressao_2
- Atribui z a x se y for NULL

// expressao1 é null
var expressao1;
String expressao2 = "expressao1 é null";

// retorna expressao2 pois expressao1 é null
print(expressao1 ?? expressao2);

//retorna true pois espressao1 é null
var isExpessao1Null = expressao1 ?? true;
print(isExpessao1Null);

Se você quiser assegurar que o valor de um objeto não será null faça assim: objeto = objeto ?? 1;

2 - Operador ??=


 objeto ??= valor

 

- Atribui valor ao objeto se o objeto for NULL

// expressao1 é null
var expressao1;
String expressao2 = "expressao1 é null";

// atribui expressao2 a expressao1
print(expressao1 ??= expressao2);

// atribui true a espressao3

var expressao3;

var isExpessao3Null = expressao3 ??= true;
print(isExpessao3Null);
 

3 - Operador ?.

 
  objeto?.valor

  objeto?.metodo() 
  objeto?.valor1?.valor2?.metodo()

 

- Se objeto for não for NULL avalia valor;
- Chama um método de um objeto se o objeto Não for NULL;
- Se objeto ou valor1 ou valor2 forem NULL a expressão inteira é null caso contrário executa o método;

// executa calculaPreco somente se pessoa, endereco e cep não forem null
final valor = pessoa?.endereco?.cep?.calculaPreco();

class Gato {
  String nome;
  ola(){
    print('sou um gato ');
  }
}
void main() {
  Gato gato1 = Gato();
  print(gato1?.ola());   //imprime 'sou um gato'
}

4 - Operador ... e ...?

 
  objeto?.valor

  objeto?.metodo() 
  objeto?.valor1?.valor2?.metodo()

 

A partir da versão 2.3 do Dart foi introduzido o operador (...) que se desdobra em um novo operador ...? para tratamento de NULL.

Colocando ... antes de uma expressão dentro de uma coleção o resultado da expressão será descompactado e seus elementos serão inseridos dentro da coleção.

void main() {
  List<int> impares = [1, 3, 5, 7, 9];
  List<int> pares = [2, 4, 6, 8]; 
  final numeros = [0, ...impares, ...pares];
  print(numeros);   //imprime [0, 1, 3, 5, 7, 9, 2, 4, 6, 8]  
}

O operador ...? apenas vai realizar essa operação se a expressão não for null.

void main() {
  List<int> impares = [1, 3, 5, 7, 9];
  List<int> pares;
  final numeros = [0, ...impares, ...?pares];
  print(numeros);    //imprime    [0, 1, 3, 5, 7, 9]
}

Você pode testar todos os códigos on-line neste link: https://dartpad.dartlang.org/

Porque a lei foi dada por Moisés; a graça e a verdade vieram por Jesus Cristo.
Deus nunca foi visto por alguém. O Filho unigênito, que está no seio do Pai, esse o revelou.
João 1:17,18


Referências:


José Carlos Macoratti