Uendelig løkke

En uendelig sløjfe er i computerprogrammering en sløjfe, hvis udgangsbetingelse ikke er defineret eller ikke kan opfyldes. Som et resultat kan sløjfen kun afsluttes, når det program, der bruger den, afbrydes .

Hvorfor er dette et problem?

Der er sjældent noget punkt i at programmere en uendelig løkke. En sådan sløjfe gør det ikke muligt at output et resultat og forbruger computerens ressourcer.

På et system med en enkelt opgave kan en uendelig sløjfe forhindre brugeren i at foretage sig andre handlinger. Udførelsen skal derefter afbrydes med magt (du skal muligvis afbryde strømforsyningen til computeren).

Moderne systemer er generelt multitasking nok til at overlade kontrol til brugeren, som kan beordre, at programmet afbrydes. Men indtil det er gjort, ender computeren med at fungere meget mindre godt til ethvert andet job.

En uendelig løkke betragtes derfor næsten altid som en fejl .

En mulig undtagelse er den fra en programmør, der absolut vil holde sin computer kørende i hans fravær. Han kan derfor programmere en uendelig løkke ved at sørge for, at han kan afbryde den, når han ønsker det.

Eksempler på uendelige sløjfer

I mange programmeringssprog er den enkleste uendelige løkke i pseudokode  :

tant que VRAI

eller på engelsk

while TRUE

Det vil sige, instruktionerne skal udføres, så længe evalueringen af ​​det logiske udtryk "SAND" resulterer i "SAND".

I Python kan for eksempel en uendelig løkke defineres som denne:

while True: print "Boucle infinie"

Instruktionen indeholdt i sløjfen udfører så længe den betingelse, der er defineret efter while, men her er denne betingelse altid sand ( True).

Følgende situation skaber også en uendelig løkke:

i = 0 while i < 10: i = 1

Faktisk slutter sløjfen, når den iikke længere er mindre end 10, men den instruktion, der findes i sløjfen, giver altid iværdien 1 ; løkkens indgangsbetingelse er derfor altid sand.

I C , C ++ eller PHP kan vi finde:

PHP:

<?php while(true) { //Code à insérer } ?>

VS:

int i = 0; while (i < 1) { // Instructions }

Variablen $ieller ier ikke inkrementeret (vi føjer ikke til den 1), og derfor vil betingelsen altid blive verificeret, fordi $ieller i = 0 < 1.

Sløjfer med stoptilstand

Den ovenfor beskrevne struktur while trueer ikke nødvendigvis absurd. Vi kan på et sprog som C skabe en pseudo-uendelig sløjfe, hvis tilstand efter den whilealtid respekteres, mens vi bruger den instruktion, breakder går ud af sløjfen. Simpelthen skal det sikres, at betingelsen for breaknødvendigvis nås, helst efter en rimelig periode.

Vi kalder Aldersons sløjfe for det særlige tilfælde af en uendelig sløjfe, hvor sløjfen er uendelig med hensyn til dens inputtilstand, har en stoptilstand, men en designfejl gør denne tilstand utilgængelig. I dette tilfælde er det selvfølgelig en fejl. Alderson er en programmør, der havde kodet en funktion, der udførte instruktioner til brugeren om at klikke på "OK" eller "annuller" uden at vise de pågældende knapper.

Uendelig rekursion

Følgende eksempel i VBA returnerer en stackoverløbsfejl  :

Sub Test1() Call Test1 End Sub

I IT-kultur

En gammel computerjoke plejede at sige, at "en Cray er så hurtig, at den kan udføre en uendelig løkke på mindre end 2 sekunder" .

Alléen for Apple- bygninger i Cupertino kaldes Infinite Loop , "uendelig løkke" på engelsk.

Noter og referencer

  1. "Alderson Loop" -post i File Jargon , version 4.4.7.
  2. "uendelig løkke" -post , i File Jargon , version 4.4.7.