Nekonečné smyčce je v programování , je smyčka jejíž exit podmínka nebyla definována ani nemohou být uspokojeny. Výsledkem je, že smyčku lze ukončit, pouze když je program, který ji používá, přerušen .
Programování nekonečné smyčky málokdy má smysl. Taková smyčka neumožňuje odeslat výsledek a spotřebovává prostředky počítače.
V systému s jedním úkolem může nekonečná smyčka zabránit uživateli v jakékoli jiné akci. Spuštění pak musí být násilně přerušeno (možná budete muset vypnout napájení počítače).
Moderní systémy jsou obecně dostatečně multitaskingové , aby ponechaly kontrolu uživateli, který může nařídit přerušení programu. Dokud to ale není hotové, počítač při jakékoli jiné práci skončí mnohem méně dobře.
Nekonečná smyčka je proto téměř vždy považována za chybu .
Jednou z možných výjimek je programátor, který by absolutně rád udržel svůj počítač spuštěný v jeho nepřítomnosti. Může tedy naprogramovat nekonečnou smyčku tím, že se ujistí, že ji může přerušit, kdykoli si přeje.
V mnoha programovacích jazycích je nejjednodušší nekonečná smyčka v pseudokódu :
tant que VRAInebo v angličtině
while TRUETo znamená, že instrukce musí být provedeny, pokud vyhodnocení logického výrazu „TRUE“ povede k „TRUE“.
Například v Pythonu lze nekonečnou smyčku definovat takto:
while True: print "Boucle infinie"Instrukce obsažená ve smyčce se provádí tak dlouho, dokud bude splněna podmínka definovaná po while, ale zde je tato podmínka vždy true ( True).
Následující situace také vytvoří nekonečnou smyčku:
i = 0 while i < 10: i = 1Smyčka ve skutečnosti končí, když iuž není menší než 10, ale instrukce přítomná ve smyčce vždy dává ihodnotu 1 ; podmínka vstupu smyčky je tedy vždy pravdivá.
V C , C ++ nebo PHP můžeme najít:
PHP:
<?php while(true) { //Code à insérer } ?>VS:
int i = 0; while (i < 1) { // Instructions }Proměnná $inebo ise nezvyšuje (nepřidáváme k ní 1) a následně bude podmínka vždy ověřena, protože $inebo i = 0 < 1.
Struktura popsaná výše while truenemusí být nutně absurdní. Můžeme v jazyce, jako je C, vytvořit pseudo-nekonečnou smyčku, jejíž podmínka po whileje vždy respektována, zatímco ve smyčce používáme instrukci, breakkterá smyčku opouští. Jednoduše musíme zajistit, že stavu breakbude nutně dosaženo, nejlépe po přiměřené době.
Aldersonovu smyčku nazýváme speciální případ nekonečné smyčky, pro kterou je smyčka nekonečná, pokud jde o její vstupní podmínku, má podmínku zastavení, ale kvůli konstrukční chybě je tato podmínka nepřístupná. V tomto případě je to samozřejmě chyba. Alderson je programátor, který kódoval funkci, která prováděla pokyny pro uživatele, aby klikli na „OK“ nebo „zrušit“, aniž by zobrazil dotyčná tlačítka.
Následující příklad ve VBA vrací chybu přetečení zásobníku :
Sub Test1() Call Test1 End SubStarý počítačový vtip říkával, že „ Cray je tak rychlý, že dokáže provést nekonečnou smyčku za méně než 2 sekundy“ .
Třída budov Apple v Cupertinu se nazývá Infinite Loop , v angličtině „nekonečná smyčka“.