Infinite loop: Difference between revisions
From Lazarus wiki
Jump to navigationJump to search
No edit summary |
(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).