Un programa se ejecuta de modo secuencial, una instrucción tras otra, pero para poder implementar casos de lógica es preciso el uso de instrucciones que sepan evaluar una condición para decidir bifurcaciones del código. De esta manera un programa tiene capacidad lógica para determinar qué instrucciones se ejecutan o no al cumplirse una determinada condición.
JavaScript posee varias sentencias para controlar condiciones, que para los programadores PHP resultan conocidas:
- if
- if/else
- switch
if
Su forma más simple es la siguiente:
if (var1 > 2) var1 = var2 + 3400;
La condición que se evalúa se encierra entre paréntesis y siempre da un resultado de tipo booleano: true o false. Cuando la condición que se cumple requiere que se ejecute un bloque de sentencias (y no simplemente una instrucción) se utilizan las llaves:
if (var1 > 2) { var1 = var2 + 3400; var3 = "Total"; }
Operadores utilizados al comparar valores
El lenguaje proporciona una serie de operadores de comparación:
- ==: Igualdad (no confundir con =, que es un operador de asignación)
- !=: Desigualdad
- >: Mayor que
- <: Menor que
- >=: Mayor o igual
- <=: Menor o igual
El resultado de una comparación condicional, por más compleja que sea, siempre da uno de dos valores posibles: true o false (verdadero o falso).
Combinación de condiciones (operadores lógicos Y – O)
Las condiciones que se evalúan pueden ser simples o complejas y, en este caso, se unen mediante los operadores lógicos Y u O:
- &&: Indica un operador lógico Y.
- ||: Indica un operador lógico O.
if ((var1 > 2) && ( var2 == 0)) { // se deben cumplir las dos condiciones ... } if ((var1 > 2) || ( var2 == 0)) { // se ejecuta si se cumple cualquiera de las dos condiciones ... }
La cantidad de condiciones que se pueden definir en una evaluación no está limitada. Sólo tiene la limitación propia del sentido común que indica que una condición demasiado compleja no es fácil de leer y, por lo tanto, deberíamos buscar modos de simplificarla subdividiendo el problema.
if/else
Para definir una sentencia o un bloque de sentencias que se ejecutará cuando no se cumple la condición se utiliza if/else:
Su forma más simple es la siguiente:
if (var1 > 2) var1 = var2 + 3400; else var1 = 0;
Esto se lee de la siguiente manera: si var1 es mayor a 2 se suma 3400 a var2 y el resultado se asigna a var1, en caso contrario, se asigna 0 a var1.
Cuando la condición que se cumple requiere que se ejecute un bloque de sentencias se utilizan las llaves:
if (var1 > 2) { var1 = var2 + 3400; var3 = "Total"; } else { var1 = var2 + 3500; var3 = "Subtotal "; }
switch
Para comparar una variable con diferentes valores se utiliza la sentencia switch que presenta una sintaxis muy fácil de comprender:
var var1; ... switch(var1) { case (1): document.write("Página principal"); break; case (2): document.write("Popup"); break; ... default: document.write("valor no esperado"); }
La variable se compara con los distintos valores de las cláusulas case(), cada cláusula case sólo puede definir un valor de comparación, y cuando se cumple la condición se ejecutan las sentencias que aparecen después de los dos puntos (:) y hasta encontrar la sentencia break. La ejecución continua con la instrucción que sigue al bloque switch.
Si no se cumple ninguna cláusula case() se ejecutará el código de la cláusula default.
Operador ternario
Se puede definir una condición de modo muy compacto:
condición ? acción si TRUE : acción si FALSE;
Por ejemplo:
iLínea = iLínea < 60 ? iLínea+ : 0;
Esto es lo mismo a:
if (iLínea < 60) iLínea+; else iLínea = 0;
La principal ventaja del operador ternario es que resulta un código más compacto y conciso que la opción if/else. Para quienes no estén acostumbrados a este operador puede resultar más confuso que el uso de if/else pero lo cierto es que no cuesta mucho adaptarse a esta sintaxis.