Основное назначение подпрограммы-функции - вычисление выходного значения. Это условно можно назвать ее главным эффектом.
Рассмотрим для примера стандартную функцию sin(x). Ее главный эффект - вычислить синус угла x, заданного в радианах. Никакой другой работы функция sin(x) в программе не выполняет. Более того, было бы нецелесообразно допустить, чтобы эта функция выполняла другую работу (например, изменяла значение переменной x).
Подпрограмма-функция может изменять значения локальных переменных, описанных в ее блоке. Однако это не оказывает влияния на работу всей программы, тем более что локальные переменные существуют лишь в период работы функции.
Тем не менее функция может выполнять действия, которые обнаруживаются вне тела этой функции, в частности, изменять значения глобальных переменных или формальных параметров-переменных со словом Var. Такие действия называются побочным эффектом функции.
Термин "побочный эффект" взят из фармакологии: многие лекарства имеют побочный эффект, который может быть полезным или вредным.
Пример.Вычисление площади n-угольника, заданного координатами его вершин.
, где ;
Program Example;
Const Nmax = 100;
Type Ar = array[1..Nmax] of real;
VarX,Y : Ar;
n : byte;
P,z,b : real;
FunctionArea(X,Y:Ar; n:byte):real;
Var i : byte; R : real;
Begin
x[n+1]:=x[1]; y[n+1]:=y[1];
P:=0;
For i:=1 to n do
P:=P+(x[i+1]-x[i])*(y[i+1]+y[i]);
Area:=0.5*R;
Z:=z+sqr(P);
End{ Area };
Begin
Увід n, X, Y
z:=10;
S:=Area(X,Y,n);
z:=z+1;
Writeln('S= ',S:12,' z= ',z:12);
End.
Из анализа текста только основной программы невозможно установить факт изменения переменной z после обращения к функции Area. Это действие скрыто в описании функции. В этой "завуалированности" проявления побочного эффекта содержится его основная опасность.
Функции, создающие побочный эффект, затрудняют понимание и отладку программы.
Процедура может иметь множество выходных значений, функция - только одно такое значение. Поэтому в общем случае нежелательно, чтобы функция выполняла в программе какую-либо другую работу, кроме вычисления выходного значения.