Subprogramo
En programlingvoj, subprogramo aŭ proceduro aŭ funkcio estas grupo da ordonoj (programpeco), plenumebla per vokoj el diversaj partoj de komputila programo. Terminologia notoEstas 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 (angle subroutine). 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 (angle procedure); oni parolas pri deklaro de proceduro, pri procedurvoko — tamen se oni vokas proceduron liverantan rezulton ene de esprimo, tiam oni nomas la vokon funkcia (angle function designator). 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 (angle void function). Ĉi-sube ni, laŭ la Algola tradicio, uzos supernocie la terminon proceduro. ProcedurdeklaroPor 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. EkzemploJen estas ekzempla programpeco en esprantigita Paskala pseŭdokodo, entenanta deklaron de funkcio 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 proceduroEn la ĉi-supra ekzemplo la ĉapo de proceduro (ĉi-okaze, de funkcio) okupas la linion 03. Ĝi indikas:
Korpo de proceduroLa 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 subprogramoVoko de funkcioVoko de funkcio (aŭ funkcivoko) havas tradician sintakson matematikan; ĝi povas aperi en esprimo: q := Maks(V, k div 2); Voko de proceduroVoko 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 Transponu(M, k, n) |