Javascript: controlar la ejecución de programas

El orden en que se ejecutan las instrucciones de un programa es, por defecto, secuencial: se ejecutan instrucción tras instrucción.

Así un programa se escribirá como una sucesión de instrucciones o sentencias, utilizando un punto y coma opcional, o un cambio de línea, para indicar el final de cada instrucción.

Un grupo de sentencias se puede agrupar como un bloque encerrándolas entre llaves.

A veces es necesario alterar este orden de ejecución para ello se utilizan las instrucciones de control de flujo: 

Control de flujo

Un script en Javascript es una serie de secuencias una a continuacion de otra y se ejecutan en el orden en que están escritas.

Pra alterar este orden de ejecución se usan las estructuras de control de flujo de programa.

Todos los lenguajes de programación poseen este tipo de intrucciones, con más o menos variantes.

Como mínimo un lenguaje de programación debe ofrecer al menos una instrucción condicional y otra para ejecutar bucles de código.

 

Sentencia condicional if ... else

Una sentencia condicional es una instrucción para alterar la ejecución de instrucciones en función del resultado de una comparación.

La sentencia condiconal más simple que podemos escribir es la sentencia if else que sirve para que se ejecue ose omita una serie de sentencias dependiendo de si la comparación da verdadero o falso.

La sintáxis de la sentencia if ... else es:

if (condición)
    {bloque a ejecutar si la condición es true}
else
    {bloque a ejecutar si la condición es false}


Si no escribimos la parte del else tendremos una condicional simple. Esta sintáxis en algunos casos puede simplificarse utilizando la siguiente forma:

resultado = (condición) ?(valor si cierto) : (valor si falso)

O incluso se pude usar un acortador para ejecutar en función de una condición sin escribir explicitamente el if

(condicion) && accion()

El funcionamiento es sencillo: el motor de javascript comprueba la condición, si es false no pasa al segundo operando de&& ( and lógio ), pero si es verdad pasa a evaluar la segunda parte (acción() )  y la ejecuta.

En el siguiente ejemplo evitamos realizar una división por cero

if (div == 0){

      alert('No se puede dividir por 0');

      }

else{

      alert(num / div); 

      }

Observa las llaves, en este caso son opcionales porque el bloque solo tiene una instrucción. Por claridad del codigo es bueno usarlas aunque no sean necesarias.

Un ejemplo de uso de la versión reducida de if..else para ver si un número es par

var tipo, numero = 15;

tipo = (numero%2 == 0) ? "Par" : "Impar";

console.log(numero+" es "+ tipo)

El operador % me da el resto de dividir dos números, en este ejemplo si ese resto es 0 el número es divisible por 2, o sea, par.

Las sentencias if pueden anidarse, es decir, dentro de una sentencia if pueden meterse más sentencias if.

Las condiciones pueden ser sencillas, como en estos ejemplos, o pueden combinarse varias comparaciones usando los operadores && y || (AND y OR lógicos).

Veamos un ejemplo en el que comprobamos si un número está comprendido entre 1 y 5:

var nota, aptos=0, total=0;

nota = 4;

if ((nota>=5) && (nota < 11))

      {

       console.log("Aprobado");

       aptos++;

      }

total++

En este ejemplo si nota está entre 5 y 10 se indica aprobado y se actualiza un contador. El bloque tiene más de una instrucción, es en este caso las llaves son obligatorias

En este ejemplo no se ha usado la instrucción else para que veas como puede ser una condiconal simple.

Si nota no cumple la condición el programa se salta este bloque, no lo ejecuta. En cualquier caso la siguiente instrucción que se ejecute tras el condicional será la que incrementa el valor de total.

Ejemplos

Vamos a convertir notas en niveles usando un if anidados. Notas menor de 5 suspenso, 5-6 aprobados, 7-8 notables, 9-10 sobresalientes.

var nota;

if (nota < 5)

   {

   nivel = "suspenso" ;

   }

else{

   if (nota <7){

         nivel = "aprobado" ;

      }

   else{

         if(nota <9){

            nivel = "notable" ;

            }

          else

            nivel="sobresaliente"

         }

    }

concole.log(nivel);

Fíjate como el indentado ayuda a seguir el código. Caba bloque if compelto está indentado para identificarlo más fácilmente.

Vamos a aplicar un descuento del 20% a las compras mayores de 50 euros y escribimos un aviso

var total;

var cobrar, dto;

var nota;

if (total > 50){

    dto = total*0.2

    cobrar = total - descto;

     nota ="Total: " + cobrar+ " Rebaja " + dto

}

else {

    cobrar = total;

    nota= "Total: "+total;

}

console.log(nota)

Otro ejemplito sencillo, averiguar si un número positivo es múltiplo de otro, o sea, que al dividirlos el resto es 0. Solo vamos a

var numero, divisor;

if (divisor >0 && numero >0){

    texto = (numero%divisor == 0)?" es":" no es";

    texto = numero + texto + " multiplo de "+divisor;

        }

else{

    texto = "Los dos números deben ser mayor que cero"

}

console.log(texto);

Ejemplo ilustrativo de uso de if y del if resumido

Incluso hay una forma aún más curiosa de acortar un algunas sentencias if

edad>18&&alert("Eres mayor de edad")

Esta linea ejecuta el alert si edad es mayor de 18