En Dart, assert es una herramienta de depuración que permite verificar si una condición es verdadera en tiempo de desarrollo. Si la condición de un assert es falsa, el programa lanzará un error, lo cual ayuda a detectar problemas de lógica o valores inesperados durante la fase de desarrollo. Los assert se eliminan en la versión de producción, por lo que no afectan el rendimiento del programa una vez que este es lanzado.
El assert es una función que verifica que una expresión o condición sea verdadera. Si es verdadera, el programa continúa ejecutándose normalmente; si es falsa, se lanza una excepción AssertionError y se detiene la ejecución en modo de desarrollo. Esto ayuda a los desarrolladores a detectar y corregir errores en tiempo de desarrollo.
La sintaxis básica de assert consiste en escribir la palabra clave assert seguida de la condición que quieres evaluar.
void main() {
int edad = 18;
assert(edad >= 18, "La edad debe ser 18 o mayor");
print("Acceso permitido");
}
En este ejemplo, si edad es menor que 18, se lanzará un error con el mensaje "La edad debe ser 18 o mayor". Si edad es 18 o más, el programa continuará y se imprimirá "Acceso permitido".
Puedes usar assert para validar los parámetros de entrada de una función.
void establecerEdad(int edad) {
assert(edad > 0, "La edad debe ser mayor que 0");
print("Edad establecida a: $edad");
}
void main() {
establecerEdad(25); // Imprime: Edad establecida a: 25
establecerEdad(-5); // Lanza un AssertionError
}
Aquí, el assert asegura que edad sea positiva. Si no es así, el programa lanza un error.
El assert es útil para validar los valores de las propiedades al crear instancias de una clase, asegurando que los objetos siempre tengan valores válidos.
class Persona {
final String nombre;
final int edad;
Persona({required this.nombre, required this.edad})
: assert(nombre.isNotEmpty, "El nombre no puede estar vacío"),
assert(edad >= 0, "La edad debe ser positiva o cero");
}
void main() {
Persona p = Persona(nombre: "Juan", edad: 30); // Crea el objeto correctamente
Persona pInvalida = Persona(nombre: "", edad: -5); // Lanza AssertionError
}
En este ejemplo, el assert se usa en el constructor de Persona para verificar que nombre no esté vacío y que edad sea no negativa.
Puedes usar assert para asegurarte de que ciertas condiciones se cumplan en diferentes puntos del código, como verificaciones intermedias.
void calcularDescuento(double precio) {
assert(precio > 0, "El precio debe ser mayor que cero");
double descuento = precio * 0.1;
assert(descuento < precio, "El descuento no puede exceder el precio");
print("Descuento calculado: $descuento");
}
void main() {
calcularDescuento(100); // Imprime: Descuento calculado: 10.0
calcularDescuento(-50); // Lanza AssertionError
}
Este ejemplo verifica que el precio sea positivo antes de calcular el descuento y que el descuento sea menor que el precio original.
Los assert solo están activos en modo de depuración. Cuando el programa se compila en modo de producción, los assert se eliminan automáticamente, lo cual evita cualquier impacto en el rendimiento.
Para ejecutar un programa en modo de producción, usa:
dart run --release
assert no afectan el rendimiento de la versión de producción.
Para más detalles sobre assert, consulta la documentación oficial de Dart.
Jorge García
Fullstack developer