Volver a la página principal de HTML en castellano
HTML en castellano recomienda...

Curso de Javascript 1.2


En esta página:


Estructuras de control

Ningún programa es una secuencia lineal de instrucciones. En todo lenguaje de programación existen estructuras que nos permiten variar el orden de ejecución dependiendo de ciertas condiciones. Estas estructuras se pueden clasificar en dos grandes grupos: bifurcaciones condicionales y bucles.

Aparte de los dos tipos clásicos de estructuras de control, en Javascript disponemos de algunas estructuras adicionales para facilitar el manejo de objetos. Dispone de algunas estructuras más de las que explicaremos en esta página (el soporte de etiquetas), pero debido a que no son más que un recuerdo de lenguajes desfasados y su utilidad resulta escasa he preferido no incluirlas.

Bifurcaciones condicionales

Una bifurcación condicional en una estructura que realiza una tarea u otra dependiendo del resultado de evaluar una condición. La primera que vamos a estudiar es la estructura if...else. Esta estructura es la más sencilla y antigua (es posible que se utilizara con los ábacos y todo...) de todas:

if (bso.compositor == "Manuel Balboa")
  alert(¡Hombre, una banda sonora española!');
else
  alert('Seguro que es una americanada');

Hay que indicar que el else es opcional..

La siguiente estructura bifurca según los distintos valores que pueda tomar una variable específica. Es la sentencia switch:

switch(directorPreferido) {
  case "John Ford":
    alert('Eso es tener buen gusto, sí señor');
    break;
  case "Joel Coen":
    alert('Parece que te gustan las cosas raras');
    break;
  default:
    alert('¿Y ese quien es?');
}

Hay que indicar que no es compatible con estándar ECMA y no es soportado por el Explorer 3.

Bucles

Un bucle es una estructura que permite repetir una tarea un número de veces, determinado por una condición. Para hacer bucles podemos utilizar las estructuras while y do...while. Estos bucle iteran indefinidamente mientras se cumpla una condición. La diferencia entre ellas es que la primera comprueba dicha condición antes de realizar cada iteración y la segunda lo hace después:

var numero=0;
while (numero==1) {
  alert('Soy un while');
}
do {
  alert('Soy un do...while');
} while (numero==1);

En este caso solo veríamos aparecer un ventana diciendo que es un do...while. ¿Qué por qué? Veamos. El while comprueba primero si numero es igual a 1 y, como no lo es, no ejecutaría el código que tiene dentro del bucle. En cambio, el do...while primero ejecuta el código y luego, viendo que la condición es falsa, saldría. Hay que resaltar que do...while no pertenece al estándar y no es soportado por el Explorer 3.

En Javascript, el bucle for es singularmente potente. No se reduce a casos numéricos como en muchos otros lenguajes sino que nos da mucha más libertad. Tiene la siguiente estructura:

for (inicio; condición; incremento)
  código

El código contenido en el bucle se ejecutará mientras la condición se cumpla. Antes de comenzar la primera iteración del bucle se ejecutará la sentencia inicio y en cada iteración lo hará incremento. La manera más habitual de usar estas posibilidades es, claro está, la numérica:

var numero = 4;
for (n = 2, factorial = 1; n <= numero; n++)
  factorial *= n;

Por último, hay que decir que la ejecución de la sentencia break dentro de cualquier parte del bucle provoca la salida inmediata del mismo. Aunque a veces no hay más remedio que utilizarlo, es mejor evitarlo para mejorar la legibilidad y elegancia del código (toma ya, la frase que me ha salido).

Estructuras de manejo de objetos

JavaScript dispone de dos bien distintas. La primera es el bucle for...in, que nos permitirá recorrer todas las propiedades de un objeto. Se usa principalmente con vectores. Por ejemplo:

var vector = [1, 2, 2, 5];
for (i in vector)
  vector[i] += 2;

Este ejemplo sumaría dos a todos los elementos del vector. Sin embargo, conviene tener cuidado ya que, de los navegadores de Microsoft, sólo la versión 5 lo soporta.

La otra estructura es with, que nos permitirá una mayor comodidad cuando tengamos que tratar con muyas propiedades de un mismo objeto. En lugar de tener que referirnos a todas ellas con un objeto.propiedad podemos hacer:

with (objeto) {
  propiedad1 = ...
  propiedad2 = ...
  ...
}

Que resulta más cómodo (tenemos que teclar menos) y legible.