Difference between revisions of "Routine"

From Free Pascal wiki
Jump to navigationJump to search
(review: generalization)
Line 1: Line 1:
 
{{Routine}}
 
{{Routine}}
  
A routine is a piece of [[Source code|source code]] that performs some functionality. A routine may be coded directly as part of a [[Program|program]], or if it is usable by more than one piece of code, it may be defined as a [[Function|function]] if it returns a value, or as a [[Procedure|procedure]] if it does not.  A [[Property|property]] is a routine which is callable as a function in an [[Object|object]], and can be assigned a value.  A routine in an object that is callable but cannot be assigned a value is a [[Method|method]].
+
A routine is a piece of [[Source code|source code]] that performs some functionality.
 +
Pascal distinguishes between two kinds of routines:
 +
[[Procedure|procedures]] and [[Function|functions]].
 +
The latter is capable of returning a result, whilst the former does not return any value.
  
[[Category:Pascal]]
+
A routine that is part of an object or class is called [[Method|method]].
[[Category:Control Structures]]
+
[[Property|Properties]] of objects or classes redirect read and/or write access to such methods.
 +
 
 +
== parameters ==
 +
Routines can be parameterized.
 +
When introducing a new routine identifier a parameter list can be appended.
 +
For instance the following procedure signature tells the compiler, that <syntaxhighlight lang="pascal" enclose="none">doSomething</syntaxhighlight> accepts an integer as first parameter.
 +
<syntaxhighlight lang="pascal">
 +
procedure doSomething(const someParameter: integer);
 +
</syntaxhighlight>
 +
 
 +
== default values ==
 +
Parameters can become optional when they are supplied with a [[Default parameter|default value]] like so:
 +
<syntaxhighlight lang="pascal">
 +
procedure doSomething(const someParameter: integer = 42);
 +
</syntaxhighlight>
 +
Optional parameters if any, have to appear at the end of the formal parameter list.
 +
That means, mandatory parameters can not appear after any optional parameter.
 +
 
 +
== parameter hints ==
 +
While defining the formal parameters in front of each identifier(s), type tuple, the compiler can be supplied with additional hints.
 +
The compiler then can make further optimizations.
 +
* [[Const#Const Parameter|<syntaxhighlight lang="pascal" enclose="none">const</syntaxhighlight>]] informs the compiler, that the named parameter(s) won't be changed in the routine definition.
 +
* [[Constref|<syntaxhighlight lang="pascal" enclose="none">constref</syntaxhighlight>]] imposes further restrictions.
 +
 
 +
== parameter types ==
 +
By default each routine receives an own copy of each parameter (value parameter).
 +
* If the routine is supposed to work on the original, that means on the [[Variable|variable]] as it exists in the place the routine is called, the modifier [[Var#Pass by Reference|<syntaxhighlight lang="pascal" enclose="none">var</syntaxhighlight>]] will allow that. Thereby the named parameter becomes a [[Variable parameter|variable parameter]].
 +
* Furthermore, if <syntaxhighlight lang="pascal" enclose="none">{$modeswitch out on}</syntaxhighlight> (automatically set by various modes), the output parameter type <syntaxhighlight lang="pascal" enclose="none">out</syntaxhighlight> exists. The routine will not, or is not supposed to read from such parameters, but only write.
 +
 
 +
== invoking routines ==
 +
Routines are called by stating their identifiers, followed by the list of (mandatory) parameter literals or variables their types are compatible.
 +
 
 +
== routine overloading ==
 +
Routines can be overloaded.
 +
That means, one and the same identifier can be associated with varying definitions provided the formal signatures differ.

Revision as of 00:03, 13 May 2018

English (en) suomi (fi) français (fr) русский (ru)

A routine is a piece of source code that performs some functionality. Pascal distinguishes between two kinds of routines: procedures and functions. The latter is capable of returning a result, whilst the former does not return any value.

A routine that is part of an object or class is called method. Properties of objects or classes redirect read and/or write access to such methods.

parameters

Routines can be parameterized. When introducing a new routine identifier a parameter list can be appended. For instance the following procedure signature tells the compiler, that doSomething accepts an integer as first parameter.

procedure doSomething(const someParameter: integer);

default values

Parameters can become optional when they are supplied with a default value like so:

procedure doSomething(const someParameter: integer = 42);

Optional parameters if any, have to appear at the end of the formal parameter list. That means, mandatory parameters can not appear after any optional parameter.

parameter hints

While defining the formal parameters in front of each identifier(s), type tuple, the compiler can be supplied with additional hints. The compiler then can make further optimizations.

  • const informs the compiler, that the named parameter(s) won't be changed in the routine definition.
  • constref imposes further restrictions.

parameter types

By default each routine receives an own copy of each parameter (value parameter).

  • If the routine is supposed to work on the original, that means on the variable as it exists in the place the routine is called, the modifier var will allow that. Thereby the named parameter becomes a variable parameter.
  • Furthermore, if {$modeswitch out on} (automatically set by various modes), the output parameter type out exists. The routine will not, or is not supposed to read from such parameters, but only write.

invoking routines

Routines are called by stating their identifiers, followed by the list of (mandatory) parameter literals or variables their types are compatible.

routine overloading

Routines can be overloaded. That means, one and the same identifier can be associated with varying definitions provided the formal signatures differ.