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
while true do
+
begin
  begin
+
// loop body repeated forever
  end;
+
end;
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
 
+
repeat
repeat
+
begin
until false;
+
// 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,  
"[[While|<syntaxhighlight lang="pascal" enclose="none">While</syntaxhighlight>]] [[True|<syntaxhighlight lang="pascal" enclose="none">true</syntaxhighlight>]] [[Do|<syntaxhighlight lang="pascal" enclose="none">do</syntaxhighlight>]]" or "[[Repeat|<syntaxhighlight lang="pascal" enclose="none">repeat</syntaxhighlight>]] [[Until|<syntaxhighlight lang="pascal" enclose="none">until</syntaxhighlight>]] [[False|<syntaxhighlight lang="pascal" enclose="none">false</syntaxhighlight>]]" loops looks infinite at first glance,  
+
but there is a way to escape the loop through the <syntaxhighlight lang="pascal" inline>break</syntaxhighlight> statement.
but there may be a way to escape the loop through <syntaxhighlight lang="pascal" enclose="none">break</syntaxhighlight>.
 
 
 
  
 
<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" enclose="none">true</syntaxhighlight>]]
+
* [[True|<syntaxhighlight lang="pascal" inline>true</syntaxhighlight>]]
* [[False|<syntaxhighlight lang="pascal" enclose="none">false</syntaxhighlight>]]
+
* [[False|<syntaxhighlight lang="pascal" inline>false</syntaxhighlight>]]
* [[Repeat|<syntaxhighlight lang="pascal" enclose="none">repeat</syntaxhighlight>]] [[Until|<syntaxhighlight lang="pascal" enclose="none">until</syntaxhighlight>]]
+
* [[Repeat|<syntaxhighlight lang="pascal" inline>repeat</syntaxhighlight>]] [[Until|<syntaxhighlight lang="pascal" inline>until</syntaxhighlight>]]
* [[While|<syntaxhighlight lang="pascal" enclose="none">while</syntaxhighlight>]] [[Do|<syntaxhighlight lang="pascal" enclose="none">do</syntaxhighlight>]]
+
* [[While|<syntaxhighlight lang="pascal" inline>while</syntaxhighlight>]] [[Do|<syntaxhighlight lang="pascal" inline>do</syntaxhighlight>]]
* [[Break|<syntaxhighlight lang="pascal" enclose="none">break</syntaxhighlight>]]
+
* [[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).

See also