Sobes.tech
Junior

O que é segurança nula (null safety) em Dart?

sobes.tech IA

Resposta da IA

A segurança nula é um sistema no Dart que ajuda a prevenir erros em tempo de execução relacionados com a desreferenciação de null. O compilador analisa o código e determina se uma variável pode conter um valor null. Se uma variável for declarada como não permitindo null, o compilador garante que ela nunca receberá null.

Principais aspetos da segurança nula:

  • Tipo não nulo implícito: Por padrão, os tipos não permitem null (não nullable).
    // int não pode ser null
    int count = 0;
    
  • Tipo que permite null: Para indicar explicitamente que uma variável pode ser null, usa-se o ponto de interrogação ?:
    // String? pode ser null
    String? name;
    
  • Operador ! (afirmação de não null): Usado para afirmar que uma expressão que permite null não é null. Deve ser usado com precaução, pois se for null, lança uma exceção.
    String? nullableName = 'Flutter';
    // Usamos !, sabendo que nullableName não é null neste contexto
    print(nullableName!.length);
    
  • Operador ? (operadores seguros para null): Usado para aceder de forma segura a membros ou chamar métodos em expressões que permitem null.
    • ?. (acesso seguro para null):
      String? nullableString;
      // Se nullableString não for null, será chamado length, caso contrário, o resultado será null
      int? length = nullableString?.length;
      
    • ?? (se null):
      String? serverName;
      // Se serverName não for null, usa o seu valor, caso contrário, 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (atribuir se null):
      String? cache;
      // Se cache for null, atribui-lhe 'Loading...'
      cache ??= 'Loading...';
      
  • Análise de fluxo: O compilador Dart analisa o código e determina quando uma variável que permite null não é null numa determinada parte do código, permitindo usá-la como não permitindo null.
    String? greeting = getGreeting();
    // O compilador sabe que greeting não é null após esta verificação
    if (greeting != null) {
      print(greeting.toUpperCase()); // Pode usar safely toUpperCase()
    }
    

Vantagens da segurança nula:

  • Redução de erros: Previna NullReferenceException (ou similares) em tempo de execução.
  • Melhor legibilidade: Indica explicitamente se uma variável pode ser null.
  • Desempenho aumentado: O compilador pode fazer otimizações sabendo quais variáveis garantidamente não são null.

A segurança nula foi introduzida no Dart 2.12.