I tipi procedurali sono i più complessi di tutto il Pascal. In sostanza, come esistono tipi derivati che fanno riferimento ad interi, numeri reali o stringhe, esistono anche tipi che fanno riferimento a procedure o funzioni: i tipi procedurali.
Come accade per gli altri tipi, una variabile di tipo procedurale deve contenere lo stesso numero di parametri specificato nel tipo e deve restituire lo stesso valore specificato nel tipo:
L'output è:
Prima le due variabili vengono scambiate, poi scambiate ancora e moliplicate per 2.
Come si è visto la variabile e contiene una procedure intera ed è chiamata per scambiare m ed n.
Altri esempi:
Come accade per gli altri tipi, una variabile di tipo procedurale deve contenere lo stesso numero di parametri specificato nel tipo e deve restituire lo stesso valore specificato nel tipo:
(*...*) type proc=procedure(var x,y:integer); procedure scambia(var a,b:integer); var temp:integer; begin temp:=a; a:=b; b:=temp; end; procedure scambiadoppio(var z,w:integer); var temp:integer; begin temp:=2*z; z:=2*w; w:=temp; end; var e:proc; m,n:integer; begin clrscr; e:=scambia; m:=2; n:=5; writeln('m=',m,' n=',n); e(m,n); writeln('m=',m,' n=',n); e:=scambiadoppio; e(m,n); writeln('m=',m,' n=',n); readln end;
L'output è:
m=2 n=5 m=5 n=2 m=4 n=10
Prima le due variabili vengono scambiate, poi scambiate ancora e moliplicate per 2.
Come si è visto la variabile e contiene una procedure intera ed è chiamata per scambiare m ed n.
Altri esempi:
type porc:procedure(x:integer); func:function(m:integer):integer; procedure ch(var f:integer); begin f:=f*2; end; function gh(f:integer):integer; begin gh:=5*f; end; function sm(d,f:integer):integer; begin sm:=d+f; end; var a:proc; b:func; begin a:=ch; (*giusto*) b:=gh; (*giusto*) b:=sm; (*sbagliato: sm ha 2 parametri); if b(2)=b(3) then (*compara i risultati*) (*...*) if @b=@a then (*compara il corpo della funzione*) (*...*) end.
A cura di: Il Totem