Guida Pascal
Capitolo 29° - Appendice 10 Tipi procedurali
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: (*...*) 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.
C#, TypeScript, java, php, EcmaScript (JavaScript), Spring, Hibernate, React, SASS/LESS, jade, python, scikit, node.js, redux, postgres, keras, kubernetes, docker, hexo, etc...
|