Sobes.tech
Junior

Cos'è la sicurezza nulla (null safety) in Dart?

sobes.tech AI

Risposta dell'AI

La sicurezza null è un sistema in Dart che aiuta a prevenire errori a runtime legati alla dereferenziazione di null. Il compilatore analizza il codice e determina se una variabile può contenere un valore null. Se una variabile è dichiarata come non consentendo null, il compilatore garantisce che non le verrà mai assegnato null.

Aspetti principali della sicurezza null:

  • Tipo non nullo implicito: Per impostazione predefinita, i tipi non consentono null (non nullable).
    // int non può essere null
    int count = 0;
    
  • Tipo che consente null: Per indicare esplicitamente che una variabile può essere null, si usa il punto interrogativo ?:
    // String? può essere null
    String? name;
    
  • Operatore ! (affermazione di non null): Usato per affermare che un'espressione che consente null non è null. Deve essere usato con cautela, poiché se è null, genera un'eccezione.
    String? nullableName = 'Flutter';
    // Usando !, sapendo che nullableName non è null in questo contesto
    print(nullableName!.length);
    
  • Operatore ? (operatori null-aware): Usato per accedere in modo sicuro ai membri o chiamare metodi su espressioni che consentono null.
    • ?. (accesso null-aware):
      String? nullableString;
      // Se nullableString non è null, verrà chiamato length, altrimenti il risultato sarà null
      int? length = nullableString?.length;
      
    • ?? (se null):
      String? serverName;
      // Se serverName non è null, si usa il suo valore, altrimenti 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (se null, assegna):
      String? cache;
      // Se cache è null, le viene assegnato 'Loading...'
      cache ??= 'Loading...';
      
  • Analisi del flusso: Il compilatore Dart analizza il codice e determina quando una variabile che consente null non è null in una parte specifica del codice, permettendo di usarla come non null.
    String? greeting = getGreeting();
    // Il compilatore sa che greeting non è null dopo questa verifica
    if (greeting != null) {
      print(greeting.toUpperCase()); // Può usare in modo sicuro toUpperCase()
    }
    

Vantaggi della sicurezza null:

  • Riduzione degli errori: Previene NullReferenceException (o simili) a runtime.
  • Migliore leggibilità: Indica esplicitamente se una variabile può essere null.
  • Prestazioni aumentate: Il compilatore può eseguire ottimizzazioni sapendo quali variabili sono garantite non null.

La sicurezza null è stata introdotta in Dart 2.12.