# Routine

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

A routine is a re-usable 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. In consequence functions can appear in expressions, but procedures can not.

A routine that is part of an object or class is called method. Properties of objects or classes can redirect read and/or write access to such methods, if their signatures have a certain structure.

## routine declarations and definitions

### 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.