Difference between revisions of "Forward Referencing"

From Lazarus wiki
(New page: 4F - Forward Referencing After all these confusing topics, here's something easy. Remember that procedures/functions can only see variables and other subprograms that have already been d...)
 
m (Fixed syntax highlighting)
 
(8 intermediate revisions by 5 users not shown)
Line 1: Line 1:
4F - Forward Referencing
+
{{Forward Referencing}}
 +
{{TYNavigator|Recursion|Programming_Assignment_4}}
 +
 
 +
4F - Forward Referencing (author: Tao Yue, state: unchanged)
  
 
After all these confusing topics, here's something easy.
 
After all these confusing topics, here's something easy.
Line 9: Line 12:
 
To resolve this chicken-and-the-egg problem, use ''forward referencing''.
 
To resolve this chicken-and-the-egg problem, use ''forward referencing''.
  
<font color="#000000">  1:</font> <font color="#006699"><strong>procedure</strong></font> Later <font color="#000000"><strong>(</strong></font>parameter list<font color="#000000"><strong>)</strong></font><font color="#000000"><strong>;</strong></font> <font color="#009966"><strong>forward</strong></font><font color="#000000"><strong>;</strong></font>
+
<syntaxhighlight lang=pascal>
<font color="#000000">  2:</font>
+
procedure Later (parameter list); forward;
<font color="#000000">  3:</font> <font color="#006699"><strong>procedure</strong></font> Sooner <font color="#000000"><strong>(</strong></font>parameter list<font color="#000000"><strong>)</strong></font><font color="#000000"><strong>;</strong></font>
+
 
<font color="#000000">  4:</font> <font color="#006699"><strong>begin</strong></font>
+
procedure Sooner (parameter list);
<font color="#990066">  5:</font>   <font color="#000000"><strong>.</strong></font><font color="#000000"><strong>.</strong></font><font color="#000000"><strong>.</strong></font>
+
begin
<font color="#000000">  6:</font>   Later <font color="#000000"><strong>(</strong></font>parameter list<font color="#000000"><strong>)</strong></font><font color="#000000"><strong>;</strong></font>
+
   ...
<font color="#000000">  7:</font> <font color="#006699"><strong>end</strong></font><font color="#000000"><strong>;</strong></font>
+
   Later (parameter list);
<font color="#000000">  8:</font> <font color="#000000"><strong>.</strong></font><font color="#000000"><strong>.</strong></font><font color="#000000"><strong>.</strong></font>
+
end;
<font color="#000000">  9:</font> <font color="#006699"><strong>procedure</strong></font> Later<font color="#000000"><strong>;</strong></font>
+
...
<font color="#990066">  10:</font> <font color="#006699"><strong>begin</strong></font>
+
procedure Later;
<font color="#000000">  11:</font>   <font color="#000000"><strong>.</strong></font><font color="#000000"><strong>.</strong></font><font color="#000000"><strong>.</strong></font>
+
begin
<font color="#000000">  12:</font>   Sooner <font color="#000000"><strong>(</strong></font>parameter list<font color="#000000"><strong>)</strong></font><font color="#000000"><strong>;</strong></font>
+
   ...
<font color="#000000">  13:</font> <font color="#006699"><strong>end</strong></font><font color="#000000"><strong>;</strong></font>
+
   Sooner (parameter list);
 +
end;
 +
</syntaxhighlight>
  
 
The same goes for functions. Just stick a forward; at the end of the heading.
 
The same goes for functions. Just stick a forward; at the end of the heading.
  
{|style=color-backgroud="white" cellspacing="20"
+
{{TYNavigator|Recursion|Programming_Assignment_4}}
|[[Recursion|previous]] 
 
|[[op_contents|contents]]
 
|[[Programming_Assignment_4|next]]
 
|}
 

Latest revision as of 01:56, 16 February 2020

български (bg) English (en) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

 ◄   ▲   ► 

4F - Forward Referencing (author: Tao Yue, state: unchanged)

After all these confusing topics, here's something easy.

Remember that procedures/functions can only see variables and other subprograms that have already been defined? Well, there is an exception.

If you have two subprograms, each of which calls the other, you have a dilemma that no matter which you put first, the other still can't be called from the first.

To resolve this chicken-and-the-egg problem, use forward referencing.

procedure Later (parameter list); forward;

procedure Sooner (parameter list);
begin
  ...
  Later (parameter list);
end;
...
procedure Later;
begin
  ...
  Sooner (parameter list);
end;

The same goes for functions. Just stick a forward; at the end of the heading.

 ◄   ▲   ►