27. Els bucles: while() i for()

 

Índex

Els bucles

Un bucle és una seqüència d'instruccions que s'executa repetides vegades, amb variants o sense, fins que hi posa fi una condició preestablerta directament o indirectament.

El JavaScript disposa de diverses estructures de control dels bucles, de les quals les més importants són while() i for() i les variants d'aquestes.

En principi, for() s'aplica quan d'antuvi coneixem el nombre de vegades que s'ha de repetir el bucle, i while() quan no ho sabem. Però la flexibilitat del plantejament d'ambdues fa que, en molts casos, aquestes estructures siguin intercanviables, i la tria d'una o altra respongui a subtils diferències de simplicitat en la programació, i fins i tot a preferències personals.

 

L'estructura while()

L'estructura while() produeix la repetició d'una instrucció o d'un conjunt d'instruccions fins que hi posa fi l'evolució del valor d'una variable que canvia de valor a mesura que s'executen les instruccions del bucle. L'estructura és

on comparació és una expressió de comparació formada per un operador de comparació i dos termes, un dels quals almenys ha de ser una variable:

En el primer cas el bucle s'executarà mentre a sigui igual o superior a 5, i deixarà d'executar-se en el cas contrari. En el segon cas el bucle s'executarà mentre c sigui inferior a d, i deixarà d'executar-se quan sigui igual o superior. Si en accedir-hi per primera vegada la condició no es compleix, el bucle no arriba a executar-se. En tots els casos el programa es reprèn en la línia següent al final del bucle.

El bloc d'instruccions condicionades ha de produir variacions de manera que la condició imposada sigui false a partir d'algun moment. Així, en el primer cas dels que acabem d'esmentar, c, que inicialment és superior a 5, ha d'anar minvant fins a un punt en què esdevingui igual o inferior a 5; en aquest moment el bucle deixarà de funcionar i continuarà la resta del programa. En el segon cas, han d'anar variant c o d - o tots dos - fins que arribi un moment en què l'expressió c<d doni false.

A més de fer evolucionar les variables, el cos del while() pot dur a terme qualsevol altra tasca: executar document.write(), canviar imatges, omplir caselles de formularis, etc.

Exemple

 

La variant do...while()

Hi ha una variant de while(), que és l'estructura do{ ... } while(). En aquesta estructura primer s'executen les instruccions i després es fa la comprovació sobre si cal continuar:

Exemple

Notem que el bucle s'executa sempre almenys una vegada, a diferència del while() simple, en què és possible que, d'acord amb la condició, el bucle no arribi a executar-se ni una sola vegada.

 

L'estructura for()

L'estructura for() comporta la repetició d'una instrucció o d'un conjunt d'instruccions d'acord amb un comptador. La seva sintaxi és

on

Així

significa que hi ha un comptador i que inicialment té el valor 1, que el procés durarà mentre i<=5 (i per tant quan i sigui 5 ja no s'executaran les instruccions dependents), i que i s'incrementarà d'un en un.

En les instruccions condicionades és habitual fer servir el propi comptador per a alguna finalitat altra que la de comptar, però això no és pas obligatori. Podríem per exemple repetir n vegades una mateixa frase: en la instrucció condicionada no apareixeria cap vegada el comptador.

Exemple

Cal notar que tot bucle condicionat per un for() pot ésser condicionat també per un while(), segons aquesta estructura:

 

La variant for...in...

L'ús de for() exigeix conèixer d'antuvi, d'una manera més o menys directa, el nombre de vegades que s'ha de repetir el bucle. Això significa que si volem aplicar-lo a una matriu, ens cal determinar abans el nombre d'elements que té aquesta.

L'ús de for...in... simplifica aquest problema: el bucle s'atura just en el moment que s'acaba de fer una lectura exhaustiva dels elements d'una matriu (o també de les propietats d'un objecte), sense necessitat de conèixer prèviament el nombre d'aquestes.

Exemple

 

Les instruccions break i continue

Sovint convé interrompre un bucle en el precís moment en què es realitza una determinada condició. Això s'aconsegueix amb les instruccions break i continue.

La instrucció break fa saltar l'execució del programa a la primera instrucció posterior al bucle; continue, en canvi, torna a començar el bucle.

Exemple