Difference between revisions of "Infinite loop"
From Free Pascal wiki
Jump to navigationJump to search (code unification, add →Optimization) |
|||
Line 1: | Line 1: | ||
{{Infinite loop}} | {{Infinite loop}} | ||
− | An infinite loop (also known as an endless loop or unproductive loop or a continuous loop) is a loop which never ends. | + | An '''infinite loop''' (also known as an endless loop or unproductive loop or a continuous loop) is a loop which never ends. |
− | Inside loop, [[statement]]s are repeated forever. | + | Inside a loop, [[statement]]s are repeated forever. |
− | |||
− | |||
+ | There are two implementations of an infinite loop: | ||
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
− | + | while true do | |
− | + | begin | |
− | + | // loop body repeated forever | |
− | + | end; | |
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
− | + | repeat | |
− | + | begin | |
− | + | // loop body repeated forever | |
− | + | end | |
+ | until false; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== [[Break|<syntaxhighlight lang="pascal" enclose="none">Break</syntaxhighlight>]] statement == | == [[Break|<syntaxhighlight lang="pascal" enclose="none">Break</syntaxhighlight>]] statement == | ||
− | + | “[[While|<syntaxhighlight lang="pascal" inline>While</syntaxhighlight>]] [[True|<syntaxhighlight lang="pascal" inline>true</syntaxhighlight>]] [[Do|<syntaxhighlight lang="pascal" inline>do</syntaxhighlight>]]” or “[[Repeat|<syntaxhighlight lang="pascal" inline>repeat</syntaxhighlight>]] [[Until|<syntaxhighlight lang="pascal" inline>until</syntaxhighlight>]] [[False|<syntaxhighlight lang="pascal" inline>false</syntaxhighlight>]]” loops look infinite at first glance, | |
− | + | but there is a way to escape the loop through the <syntaxhighlight lang="pascal" inline>break</syntaxhighlight> statement. | |
− | but there | ||
− | |||
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
− | |||
var | var | ||
i:integer; | i:integer; | ||
Line 41: | Line 35: | ||
end; | end; | ||
end; | end; | ||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 54: | Line 47: | ||
until false; | until false; | ||
end; | end; | ||
+ | </syntaxhighlight> | ||
− | + | == Optimization == | |
− | </syntaxhighlight> | + | If you really need an infinite loop, it is better to use <syntaxhighlight lang="pascal" inline>repeat … until false;</syntaxhighlight>, since it shifts all instructions of the body “less” to the right (at least, if there is more than one statement in the loop). |
== See also == | == See also == | ||
− | * [[True|<syntaxhighlight lang="pascal" | + | * [[True|<syntaxhighlight lang="pascal" inline>true</syntaxhighlight>]] |
− | * [[False|<syntaxhighlight lang="pascal" | + | * [[False|<syntaxhighlight lang="pascal" inline>false</syntaxhighlight>]] |
− | * [[Repeat|<syntaxhighlight lang="pascal" | + | * [[Repeat|<syntaxhighlight lang="pascal" inline>repeat</syntaxhighlight>]] [[Until|<syntaxhighlight lang="pascal" inline>until</syntaxhighlight>]] |
− | * [[While|<syntaxhighlight lang="pascal" | + | * [[While|<syntaxhighlight lang="pascal" inline>while</syntaxhighlight>]] [[Do|<syntaxhighlight lang="pascal" inline>do</syntaxhighlight>]] |
− | * [[Break|<syntaxhighlight lang="pascal" | + | * [[Break|<syntaxhighlight lang="pascal" inline>break</syntaxhighlight>]] |
Revision as of 18:04, 5 July 2020
│
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
An infinite loop (also known as an endless loop or unproductive loop or a continuous loop) is a loop which never ends. Inside a loop, statements are repeated forever.
There are two implementations of an infinite loop:
while true do
begin
// loop body repeated forever
end;
repeat
begin
// loop body repeated forever
end
until false;
Break
statement
“While
true
do
” or “repeat
until
false
” loops look infinite at first glance,
but there is a way to escape the loop through the break
statement.
var
i:integer;
begin
i := 0;
while true do
begin
i := i + 1;
if i = 100 then break;
end;
end;
var
i:integer;
begin
i := 0;
repeat
i := i + 1;
if i = 100 then break;
until false;
end;
Optimization
If you really need an infinite loop, it is better to use repeat … until false;
, since it shifts all instructions of the body “less” to the right (at least, if there is more than one statement in the loop).