Condiciones anidadas
Otra solución posible en este caso es poner un if anidado. Anidado quiere decir que escribimos un if dentro de otro if. De esta manera podemos comprobar también una (o varias) condiciones adicionales no excluyentes de la primera:
better_score_error_2.zig |
|
const std = @import("std"); const print = std.debug.print; pub fn main() void { const n_record = 1200; const n_score = 5000; const n_maximum_score = 4000; if (n_record < n_score) { print("Tu puntuación {} es mejor que el récord ( {} )\n", .{ n_score, n_record }); if (n_score > n_maximum_score) { print("Tu puntuación {} es imposible.\n¡Has hecho trampas!\n", .{n_score}); } } } |
|
$ zig run better_score_error_2.zig |
|
Tu puntuación 5000 es mejor que el récord ( 1200 ) Tu puntuación 5000 es imposible. ¡Has hecho trampas! |
Podemos anidar tantos if, if/else, o if/else if como queramos pero no es una práctica recomendable. Es muy fácil crear auténticos “monstruos de código” con demasiadas condiciones anidadas.
Para crear y mantener el código limpio podemos:
- planificar previamente los árboles de decisión,
- usar llamadas a funciones (lo veremos más adelante),
- refactorizar (el término técnico que significa mejorar el estilo y la estructura del código eliminando partes confusas, redundantes o innecesarias).
Si lo que queremos es comprobar varias condiciones en una sola expresión booleana, podemos usar operadores booleanos:
Tabla de operadores booleanos en Zig
|
and |
Y lógico |
verdadero sólo si todas las condiciones lo son |
true and false = false |
|
or |
O lógico |
verdadero si una de las condiciones lo es |
true or false = true |
|
xor |
O exclusivo |
verdadero si una de las condiciones es verdad, pero no ambas |
true xor true = false true xor false = true |
|
! |
Negación (NOT) |
invierte el valor lógico |
!true = false !false = true |
Los operadores que más se suelen usar para combinar expresiones booleanas suelen ser and, or y !
Al igual que en matemáticas, las operaciones que están entre paréntesis tienen prioridad. Veamos un ejemplo paso a paso:
true and !(true or false) =
true and !(true) =
true and false =
false