Sobes.tech
Junior

¿Qué es la seguridad nula (null safety) en Dart?

sobes.tech AI

Respuesta de la IA

La seguridad nula es un sistema en Dart que ayuda a prevenir errores en tiempo de ejecución relacionados con la desreferenciación de null. El compilador analiza el código y determina si una variable puede contener un valor null. Si una variable se declara como no permitiendo null, el compilador garantiza que nunca se le asignará null.

Aspectos principales de la seguridad nula:

  • Tipo no nulo implícito: Por defecto, los tipos no permiten null (no nullable).
    // int no puede ser null
    int count = 0;
    
  • Tipo que permite null: Para indicar explícitamente que una variable puede ser null, se usa el signo de interrogación ?:
    // String? puede ser null
    String? name;
    
  • Operador ! (afirmación de no null): Se usa para afirmar que una expresión que permite null no es null. Se debe usar con precaución, ya que si es null, lanza una excepción.
    String? nullableName = 'Flutter';
    // Usamos !, sabiendo que nullableName no es null en este contexto
    print(nullableName!.length);
    
  • Operador ? (operadores seguros para null): Se usa para acceder de forma segura a miembros o llamar a métodos en expresiones que permiten null.
    • ?. (acceso seguro para null):
      String? nullableString;
      // Si nullableString no es null, se llamará a length, de lo contrario, el resultado será null
      int? length = nullableString?.length;
      
    • ?? (si es null):
      String? serverName;
      // Si serverName no es null, se usa su valor, de lo contrario, 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (asignar si es null):
      String? cache;
      // Si cache es null, se le asigna 'Loading...'
      cache ??= 'Loading...';
      
  • Análisis de flujo: El compilador Dart analiza el código y determina cuándo una variable que permite null no es null en una parte determinada del código, permitiendo usarla como no permitiendo null.
    String? greeting = getGreeting();
    // El compilador sabe que greeting no es null después de esta comprobación
    if (greeting != null) {
      print(greeting.toUpperCase()); // Se puede usar toUpperCase() de forma segura
    }
    

Ventajas de la seguridad nula:

  • Reducción de errores: Previene NullReferenceException (u otros similares) en tiempo de ejecución.
  • Mejor legibilidad: Indica explícitamente si una variable puede ser null.
  • Mayor rendimiento: El compilador puede realizar optimizaciones sabiendo qué variables no son null garantizado.

La seguridad nula fue introducida en Dart 2.12.