Una estructura de control es una herramienta que tienen los lenguajes de programación y que se utiliza para controlar el flujo de las operaciones durante el programa.

Si un programa no tuviese estructuras de control siempre haría lo mismo, sería un camino fijo con una acción detrás de otra sin posibilidad de hacer cambios dependiendo de alguna condición.

Por ponerlo con un ejemplo claro:

Imagina que estás haciendo una aplicación para vender entradas a un festival, pues ahí utilizaríamos una estructura de control por ejemplo para controlar que la edad del comprador sea mayor de 18 años.

Entonces, el programa tendrá distintos “caminos posibles” si el comprador es mayor de edad o menor de edad.

  • Si es mayor de edad, le permitimos comprar la entrada.
  • Si es menor de edad, le decimos que no tiene permiso.

Así de simple.

Si no tuviésemos estructuras de control, hacer un programa así sería imposible.

Habría que vender la entrada a todos los compradores, independientemente de su edad.

Existen varias estructuras de control distintas y cada una se utilizará en el momento oportuno.

Empecemos por la más usada de todas:

IF/ELSE

La sentencia if especifica un bloque de código que se ejecuta si una condición es cierta y da la oportunidad de ejecutar otro bloque de código distinto si resulta que no es cierta.

Su sintaxis es la siguiente:

if(condición){
    // Instrucciones si la condición es verdadera
}

Ejemplo:

var nota = 3;

if(nota >= 5){
    alert(“Has aprobado”);
}

ELSE

La parte de else es opcional, y especifica un bloque de código que se ejecuta si la condición es falsa.

Su sintaxis es la siguiente:

if(condición){
    // Instrucciones si la condición es verdadera
}else{
    // Instrucciones si la condición es falsa
}

Ejemplo:

var nota = 8;

if(nota >= 5){
    alert(“Has aprobado”);
}else{
    alert(“Has suspendido”);
}

Múltiples ELSE

También puede darse el caso de que necesitemos varias cláusulas de rebote.

Eso nos permite manejar distintas posibilidades en la misma estructura de control.

Su sintaxis es la siguiente:

if(condición){
    // Instrucciones si la condición 1 es verdadera
}else if(condición 2){
    // Instrucciones si la condición 1 es falta y la condición 2 es verdadera
}else{
    // Instrucciones si la condición 1 es falsa y la condición 2 también
}

Ejemplo:

var nota = 3;

if(nota < 5){
    alert(“Has suspendido”);
}else if (nota == 5){
    alert(“Has sacado un: suficiente”);
}else if (nota == 6){
    alert(“Has sacado un: bien”);
}else if (nota == 7 || nota == 8){
    alert(“Has sacado un: notable”);
}else{
    alert(“Has sacado un: sobresaliente”);
}

De todas formas, este tipo de estructura con múltiples else no suele usarse.

Solo se usa si hay pocas condiciones, pero cuando el número de condiciones aumenta, se recomienda usar otra estructura que es específica para dicho caso.

Esta estructura se llama switch.

SWITCH 

Se utiliza para hacer diferentes acciones basadas en diferentes condiciones.

Consiste en darle un valor y comprobar si ese valor coincide con algún caso.

En el caso que coincida, ejecutamos un bloque de código específico.

Su sintaxis es la siguiente:

switch(valor){
    case valor_1:
    // Instrucciones para el valor_1
    break;
    case valor_2:
    // Instrucciones para el valor_2
    break;
    case valor_n:
    // Instrucciones para el valor_n
    break;
    default:
    // Instrucciones en caso de que no se cumpla ninguna condición
}

Ejemplo:

var nota = 3;
var mensaje;

switch(nota){
    case 0:
    mensaje = "Suspenso";
    break;
    case 1:
    mensaje = "Suspenso";
    break;
    case 2:
    mensaje = "Suspenso";
    break;
    case 3:
    mensaje = "Suspenso";
    break;
    case 4:
    mensaje = "Suspenso";
    break;
    case 5:
    mensaje = "Suficiente";
    break;
    case 6:
    mensaje = "Bien";
    break;
    case 7:
    mensaje = "Notable";
    break;
    case 8:
    mensaje = "Notable";
    break;
    case 9:
    mensaje = "Sobresaliente";
    break;
    case 10:
    mensaje = "Sobresaliente";
    break;
    default:
    mensaje = "El valor no es válido";
}

alert(mensaje);

Habrás visto que hay código repetido, tanto para las notas suspensas como para las notables.

Nunca es bueno repetir código en programación.

Lo bueno es que switch nos permite agrupar los distitos casos en uno solo, así:

Ejemplo de agrupación de casos:

var nota = 3;
var mensaje;

switch(nota){
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    mensaje = "Suficiente";
    break;
    case 6:
    mensaje = "Bien";
    break;
    case 7:
    case 8:
    mensaje = "Notable";
    break;
    case 9:
    mensaje = "Sobresaliente";
    break;
    case 10:
    mensaje = "Sobresaliente";
    break;
    default:
    mensaje = "El valor no es válido";
}

alert(mensaje);

Si no ponemos el break en un caso, este se agrupará con el siguiente.

Perfecto.

Ahora veremos otro tipo de estructura de control que es muy útil para repetir operaciones mientras se esté dando una condición determinada.

BUCLE FOR

Nos permite ejecutar el código un número determinado de veces.

Su sintaxis es la siguiente:

for(inicialización; condición; actualización){
    // Código que se repite
}

  • inicialización: Se ejecuta antes de que empiece el bloque de código a repetir.
  • condición: Define la condición por la que el bloque de código se va a ejecutar.
  • actualización: Se ejecuta después de que acabe el bloque de código a repetir.

Ejemplo:

var contador;

for (contador = 0; contador <= 5; contador++){
    alert("Valor del contador = " + contador);
}

Nota: es común darle a la variable contandor un nombre de una sola letra, ya que solo es una variable de uso temporal.

En este caso sería algo así:

var i;

for (i = 0; i<= 5; i++){
    alert("Valor del contador = " + i);
}

No tiene por qué ser la letra i, pero es la que se usa habitualmente.

Variaciones:

1. Si omitimos la primera sentencia. Debemos haber inicializado la variable con anterioridad.

var j = 1;

for ( ; j <= 5; j++){
    alert("j = " + j);
}

2. Si omitimos la segunda sentencia, dentro del código a repetir debemos incluir una instrucción break.

var k;

for (k = 1; ; k++){
    alert("k = " + k);

    if(k == 5){
    break;
    }
}

3. Si omitimos la tercera sentencia. Debemos incrementar o decrementar el valor de la variable dentro del bucle.

var l;
for (l = 1; l<=5; ){
    alert("l = " + l);
    l++;
}

4. Podemos trabajar con dos o más valores dentro del bucle for

var m, n;
for (m=1, n=10; m<=10, n>=1; m++, n--){
    alert("m = " + m + ", n = " + n);
}

BUCLE WHILE

Permite ejecutar un bloque de código mientras se cumpla una condición que indicamos entre paréntesis.

Su sintaxis es la siguiente:

while(condición){
    // Código a ejecutar
}

Ejemplo:

var i = 0;

while(i < 10){
    alert("i = " + i);
    i++;
}

BUCLE DO/WHILE

Tiene como diferencia sobre el bucle while, que obligatoriamente siempre se ejecuta 1 vez, luego puede ejecutarse más de una vez, si se dan las condiciones.

Su sintaxis es la siguiente:

do{
    // Código a ejecutar
}while(condición);

Ejemplo:

var i = 0;

do{
    alert("i = " + i);
    i++;
}while(i < 10);

Sentencias break y continue:

Permiten manipular la secuencia normal de un programa.

Lo normal es que vayamos leyendo de manera secuencial de arriba a abajo un programa.

Pero si nos encontramos con un break o un continue, estos van a realizar una serie de acciones dependiendo si usamos el break o el continue.

Break: Salir o saltar fuera un bucle, finalizándolo.

Continue: Saltar hasta la siguiente iteración del bucle. Permite saltar una o más iteraciones.

Ejemplo de bucle con break:

var i = 0;
for(i = 0; i < 10; i++){
    if (i == 3){ // Cuando llega al 3 se ejecuta el break y sale del bucle for
    break;
    }

    alert("i = " + i);
}

Ejemplo de bucle con continue:

var j = 0;
for(j = 0; j < 10; j++){
    if (j == 3 || j == 5){
    continue; // Saltar iteración si j vale 3 o 5 (no ejecutará el alert)
    }

    alert("j = " + j);
}

Así de bien.