Dart – Seguridad nula

Seguridad nula en palabras simples significa que una variable no puede contener un valor ‘nulo’ a menos que haya inicializado con nulo a esa variable. Con seguridad nula, todos los errores de desreferencia nula en tiempo de ejecución ahora se mostrarán en tiempo de compilación.

String name = null ; // This means the variable name has a null value.

Ejemplo :

Dart

class Car {
String carName = "Aston Martin";
}
 
void main() {
  Car cars;
  print(cars.carName);
}

En el código dart anterior, hemos creado una clase y dentro de ella, hemos inicializado una variable llamada carName. En la función main() hemos declarado un tipo de variable de coche, es decir, coches. Pero cuando ejecutamos el código anterior, se produce un error. 

Producción: 

Error: Non-nullable variable 'cars' must be assigned before it can be used.

 En el código anterior, el objeto no se inicializó. Para solucionar este problema tenemos que hacer: 

Dart

class Car {
String carName = "Aston Martin";
}
 
void main() {
  Car cars = new Car();
  print(cars.carName);
}

Producción: 

Aston Martin

En el código simple anterior, es fácil identificar qué variable no está inicializada, pero en una gran base de código puede ser muy difícil y llevar mucho tiempo identificar tales errores. Este problema se resuelve con seguridad nula.

Principio de seguridad nula

  • No aceptan valores NULL de forma predeterminada: de forma predeterminada, las variables de Dart no aceptan valores NULL a menos que especifique explícitamente que pueden ser valores NULL. Esto se debe a que no nulo fue, con mucho, la opción más común en la investigación de API.
  • Adoptable incrementalmente: la migración a la seguridad nula depende completamente de usted. Puede elegir qué migrar a seguridad nula y cuándo. Puede migrar de forma incremental, combinando código seguro para nulos y no seguro para nulos dentro del mismo proyecto.
  • Completamente sólido: como resultado de la seguridad nula de sonido de Dart, las optimizaciones del compilador son posibles. Si el sistema de tipos determina que algo no es nulo, entonces no puede ser nulo. La seguridad nula genera menos errores, archivos binarios más pequeños y una ejecución más rápida una vez que todo el proyecto y sus dependencias se migran a la seguridad nula.

Tipos no anulables

Cuando usamos seguridad nula, todos los tipos son no anulables por defecto. Por ejemplo, cuando declaramos una variable de tipo int, la variable contendrá algún valor entero.  

Dart

void main() {
  int marks;
   
  // The value of type `null` cannot be
  // assigned to a variable of type 'int'
  marks = null;
}
Non-nullable variables must always be initialized with non-null values.

Tipos anulables

Para especificar si la variable puede ser nula, puede usar el  ?        operador de tipo anulable. Veamos un ejemplo:

String? carName;  // initialized to null by default
int? marks = 36;  // initialized to non-null
marks = null; // can be re-assigned to null

Nota: No necesita inicializar una variable anulable antes de usarla. Se inicializa en nulo de forma predeterminada.

El operador de aserción (!)

Utilice el operador de aserción nula ( ! ) para que Dart trate una expresión anulable como no anulable si está seguro de que no es nula.

Ejemplo:

int? someValue = 30;
int data = someValue!; // This is valid as value is non-nullable

En el ejemplo anterior, le decimos a Dart que la variable  algún valor      es nula, y es seguro asignarla a una variable que no acepta valores NULL, es decir data

Tipo Promoción 

El analizador de Dart, que le dice qué errores y advertencias en tiempo de compilación, es lo suficientemente inteligente como para determinar si se garantiza que una variable anulable tiene valores que no son nulos. Dart utiliza el análisis de flujo en tiempo de ejecución para la promoción de tipos (el análisis de flujo es un mecanismo que determina el flujo de control de un programa).

Ejemplo:

Dart

int checkValue(int? someValue) {
  if (someValue == null) {
    return 0;
  }
  // At this point the value is not null.
  return someValue.abs();
}
 
void main(){
  print(checkValue(5));
  print(checkValue(null));
}

En el código anterior, la instrucción if verifica si el valor es nulo o no. Después de la instrucción if, el valor no puede ser nulo y se trata (promociona) como un valor que no acepta valores NULL. Esto nos permite usar de forma segura  someValue.abs()      en lugar de  someValue?.abs()      (con el operador nulo). Aquí  .abs()      la función devolverá un valor absoluto. 

Palabra clave tardía

Como sabíamos que todas las variables no son nulas de forma predeterminada, podemos usar el ? operador o la palabra clave tardía

Ejemplo:

Dart

String? carName;       // using ? operator
late String bikeName;  // using "late" keyword

 Beneficios de la seguridad nula:

  • Proporciona un mejor entorno de desarrollo con menos errores de tiempo de ejecución.
  • Dart Compiler puede optimizar nuestro código, lo que conducirá a programas más pequeños y rápidos.

Publicación traducida automáticamente

Artículo escrito por 477harshz y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *