Subprogramo

En programlingvoj, subprogramo aŭ proceduro aŭ funkcio estas grupo da ordonoj (programpeco), plenumebla per vokoj el diversaj partoj de komputila programo.

 Terminologia noto 
Estas pluraj programadaj skoloj, estiĝintaj ĉirkaŭ pluraj familioj programlingvaj, kaj por la koncepto pri kiu temas ĉi tiu artikolo ili uzas malsamajn terminojn.

En Fortrano kaj ĝia familio oni preferas la terminon subprogramo (). La termino estas intuicie klara kaj radikŝpara; bedaŭrinde, ĝi povas esti misgvida, ĉar ekzistas ankaŭ aliaj programpartoj (ekz-e la programmoduloj, la kunprogramoj), kiuj rajtus pretendi je tiu nomo. Krome, pro la Fortrana deveno, iuj supozas, ke subprogramoj ne povas esti rekursiaj.

En la tradicio de la Algola skolo la koncepton oni nomas proceduro (); oni parolas pri deklaro de proceduro, pri procedurvoko — tamen se oni vokas proceduron liverantan rezulton ene de esprimo, tiam oni nomas la vokon funkcia ().

En Paskalo (kiu ja devenas el la Algola familio) la proceduroj senrezultaj restis proceduroj, dum la proceduroj liverantaj rezulton ricevis la nomon funkcio.

Aliflanke, en la programlingvo C la supernocia termino estas funkcio; se C-funkcio ne liveras rezulton (kiel la Paskalaj proceduroj), oni nomas ĝin senrezulta funkcio ().

Ĉi-sube ni, laŭ la Algola tradicio, uzos supernocie la terminon proceduro.

 Procedurdeklaro 
Por ebligi uzadon de proceduro oni devas ĝin deklari. Procedurdeklaro entenas la algoritmon realigatan de la proceduro (ĝuste tion, kio pravigas la nomo subprogramo), kaj la interfacon, difinantan la manieron, kiel oni voku la proceduron.

La algoritman parton oni nomas korpo de proceduro; la interfacon, ĉapo de proceduro.

 Ekzemplo 
Jen estas ekzempla programpeco en esprantigita Paskala pseŭdokodo, entenanta deklaron de funkcio Maks:

  01  konst n = 1000;
  02  tipo Vektoro = tabelo [1..n] el reelaj;

  03  funkcio Maks(var A: Vektoro; m: entjera): reela;
  04     var x: reela; i: entjera;
  05     starto
  06        x := A[1];
  07        por i := 1 supre n faru
  08           se A[i] < x tiam x := A[i];
  09        Maks := x;
  10     fino {Maks};

 Ĉapo de proceduro 
En la ĉi-supra ekzemplo la ĉapo de proceduro (ĉi-okaze, de funkcio) okupas la linion 03. Ĝi indikas:
 specon de proceduro (funkcio),
 ĝian nomon (Maks),
 la du formalajn parametrojn (A kaj m),
 la manierojn de ilia pasigo (variable por A, per valoro por i), 
 iliajn datumtipojn (Vektoro, entjera) kaj la tipon de la liverota rezulto (reela).

 Korpo de proceduro 
La korpo (linioj 04–10) entenas la deklarojn de la lokaj variabloj (04) kaj la ordonojn. La valorizo en la linio 09 estas maniero indiki la rezulton liverotan de la funkcio.

 Voko de subprogramo 
 Voko de funkcio 
Voko de funkcio (aŭ funkcivoko) havas tradician sintakson matematikan; ĝi povas aperi en esprimo:

  q := Maks(V, k div 2);

 Voko de proceduro 
Voko de proceduro senrezulta (aŭ procedurvoko) kutime havas la saman «funkcian» sintakson, tamen aperas en la pozicio de ordono — ĉu nude (kiel en Paskalo kaj plimulto da altnivelaj programlingvoj):

   se k < n tiam Transponu(M, k, n);

aŭ kun anoncvorto call (voku), gosub (iri al sub[programo]) aŭ simile (tiel en Fortrano, BASIC kaj asemblaj lingvoj):

    call Transponu(M, k, n)


Kategorio: Programadaj konstruoj
Kategorio:Stirfluo
Kategorio:Fontkodo
Kategorio:Holismo