Difference between revisions of "Infinite loop"
From Free Pascal wiki
Jump to navigationJump to search (code unification, add →Optimization) |
|||
Line 20: | Line 20: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == [[Break|<syntaxhighlight lang="pascal" | + | == [[Break|<syntaxhighlight lang="pascal" inline>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, | “[[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 is a way to escape the loop through the <syntaxhighlight lang="pascal" inline>break</syntaxhighlight> statement. |
Revision as of 17:17, 6 August 2022
│
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).