While petlja

U većini računalnih programskih jezika, while petlja je naredba upravljanja tokom koja dopušta opetovano izvršenje koda u ovisnosti o danom bulovskom uvjetu. While petlja se može shvatiti kao ponavljajuća if naredba.

While konstrukt se sastoji od bloka koda i uvjeta. Uvjet je prvo evaluiran - ako je uvjet logička istina, kod se unutar bloka izvršuje. Ovo se ponavlja sve dok uvjet ne postane lažan. S obzirom na to da while petlja provjeruje uvjet prije izvršenja bloka koda, upravljačka je struktura često poznata kao pred-test petlja. Valja je usporediti s do while petljom koja ispituje uvjet nakon izvršenja petlje.

Primjerice, u C-u (kao i u Javi i C++u, koji koriste istu sintaksu u ovom slučaju), odsječak koda

 x = 0;
 while (x < 3)
 {
    x++;
 }

prvo provjeruje je li x veći od 3, a s obzirom na to da nije, inkrementira ga za 1. Potom opet provjeruje dani uvjet, opet izvršuje, ponavljajući ovaj postupak sve dok varijabla x ne dosegne vrijednost 3.

Valja uočiti da je moguće, u nekim slučajevima čak i poželjno, da se uvjet uvijek evaluira u logičku istinu, stvarajući beskonačnu petlju. Kad se takva petlja hotimice stvori, obično postoji neka druga upravljačka struktura (poznata kao break naredba) koja upravlja terminacijom petlje.

Demonstracija while petljiUredi

Ove će petlje izračunati faktorijelu broja 5:

QBasic ili Visual BasicUredi

  'Inicijaliziraj varijable
  Dim brojac as Integer : brojac = 5
  Dim faktorijela as Long : faktorijela = 1
  Do While brojac > 0
    faktorijela = faktorijela * brojac     'Množi
    brojac = brojac - 1                    'Dekrementiraj
  Loop
  Print faktorijela                        'Ispiši rezultat.

REALbasicUredi

  Dim brojac as Integer = 5
  Dim faktorijela as Integer = 1
  While brojac > 0
    faktorijela = faktorijela * brojac     // Množi
    brojac = brojac - 1                    // Dekrementiraj
  Wend
  MsgBox Str( faktorijela )                // Ispiši rezultat.

C ili C++Uredi

  unsigned int brojac = 5;
  unsigned long faktorijela = 1;
  while (brojac > 0)
  {
    faktorijela *= brojac--;               /* Množi pa dekrementiraj. */
  } 
  printf("%i", faktorijela);

PerlUredi

  my $brojac = 5;
  my $faktorijela = 1;
  while ( $brojac > 0 ) 
  {
      $faktorijela *= $brojac--;           # Množi pa dekrementiraj
  }
  print $faktorijela;

Vrlo slično C i C++ rješenju, s tim da se while petlja mogla također napisati jednom linijom koda:

  $faktorijela *= $brojac-- while $brojac > 0;

While petlje se često koriste za čitanje podataka liniju po liniju (kao što je definirano linijskim separatorom $/) iz otvorenih datotečnih ručica:

  open ULAZ, "<test.txt";
  while ( <ULAZ> )
  {
    print;
  }
  close ULAZ;

PHPUredi

 $brojac = 5;
 $faktorijela = 1;
 while($brojac > 0) {
   $faktorijela *= $brojac--; 	          // Množi pa dekrementiraj.
 }
 echo $faktorijela;

Tcl (Tool command language)Uredi

  set brojac 5
  set faktorijela 1
  while {$brojac > 0} {
    set faktorijela [expr $faktorijela * $brojac] 
    incr brojac -1 
  }
  puts $faktorijela

Java, C#Uredi

Kod za petlju je isti kao i za Javu i C#:

  int brojac = 5;
  long faktorijela = 1;
  while (brojac > 0)
     faktorijela *= brojac--; 		 // Množi pa dekrementiraj.

Za Javu se rezultat ispisuje na sljedeći način:

  System.out.println(faktorijela);

Isto to u C#:

  System.Console.WriteLine(faktorijela);

JavaScriptUredi

var brojac = 5;
var faktorijela = 1;
while (brojac)
{
  faktorijela *= brojac--; 		// Množi pa dekrementiraj.
}
document.body.appendChild(document.createTextNode(faktorijela));

PascalUredi

  program Faktorijela;
  var
    Brojac, Faktorijela: integer;
  begin
    Brojac := 5;
    Faktorijela := 1;
    while Brojac > 0 do begin
      Faktorijela := Faktorijela * Brojac;
      Brojac := Brojac - 1;
    end;
    Write(Faktorijela);
  end.

SmalltalkUredi

Suprotno drugim jezicima, u Smalltalku while petlja nije jezični konstrukt već je definirana u klasi BlockClosure kao jednoparametarska metoda, tijelom kao zatvorenošću, rabeći samu sebe kao uvjet.

 | brojac faktorijela |
 brojac := 5.
 faktorijela := 1.
 [ brojac > 0 ] whileTrue: 
     [ faktorijela := faktorijela * (brojac := brojac - 1) ]

PythonUredi

  brojac = 5
  faktorijela = 1
  while(brojac>0):
        faktorijela *= brojac
        brojac -= 1
  print(faktorijela)

AutoItUredi

  Dim $brojac = 5, $faktorijela = 1
  While $brojac > 0
     $faktorijela *= $brojac
     $brojac -= 1
  WEnd
  MsgBox(0,"Faktorijela", $faktorijela)

Vidjeti takođerUredi