pascalabcnet/PABCNetHelp/LangGuide/ProcFunc/procdef.html

137 lines
6.1 KiB
HTML

<html>
<head>
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="procedure">
<param name="Keyword" value="function">
<param name="Keyword" value="Result">
<param name="Keyword" value="Ïðîöåäóðà">
<param name="Keyword" value="Ôóíêöèÿ">
<param name="Keyword" value="Ïîäïðîãðàììà">
</object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
<link rel="StyleSheet" href="../../default.css">
</head>
<body>
<H1>Ïðîöåäóðû è ôóíêöèè: îáçîð</H1>
<h2>×òî òàêîå ïðîöåäóðû è ôóíêöèè</h2>
<p>Ïðîöåäóðà èëè ôóíêöèÿ ïðåäñòàâëÿåò ñîáîé ïîñëåäîâàòåëüíîñòü
îïåðàòîðîâ, êîòîðàÿ èìååò èìÿ, ñïèñîê ïàðàìåòðîâ è ìîæåò áûòü âûçâàíà èç
ðàçëè÷íûõ ÷àñòåé ïðîãðàììû. Ôóíêöèè, â îòëè÷èå îò ïðîöåäóð, â ðåçóëüòàòå ñâîåãî
âûïîëíåíèÿ âîçâðàùàþò çíà÷åíèå, êîòîðîå ìîæåò áûòü èñïîëüçîâàíî
â âûðàæåíèè. Äëÿ åäèíîîáðàçèÿ ôóíêöèè è ïðîöåäóðû íàçûâàþòñÿ
<i>ïîäïðîãðàììàìè</i>.</p>
<h2>Îïèñàíèå ïðîöåäóð è ôóíêöèé</h2>
<p>Ëþáàÿ èñïîëüçóåìàÿ â ïðîãðàììå ïðîöåäóðà èëè ôóíêöèÿ äîëæíà áûòü
ïðåäâàðèòåëüíî îïèñàíà â ðàçäåëå îïèñàíèé.</p>
<p>Îïèñàíèå ïðîöåäóðû èìååò âèä:</p>
<blockquote>
<p><code><b>procedure</b> </code><code class="codeit">èìÿ</code><code>(</code><code class="codeit">ñïèñîê
ôîðìàëüíûõ ïàðàìåòðîâ</code><code>);<br>
</code><code class="codeit">ðàçäåë îïèñàíèé </code><code><br>
<b>begin</b><br>
&nbsp; </code><code class="codeit">îïåðàòîðû </code><code><br>
<b>end</b>;</code></p>
</blockquote>
<p>Îïèñàíèå ôóíêöèè èìååò âèä:</p>
<blockquote>
<p><code><b>function</b> </code><code class="codeit">èìÿ</code><code>(</code><code class="codeit">ñïèñîê
ôîðìàëüíûõ ïàðàìåòðîâ</code><code>):
</code><code class="codeit">òèï âîçâðàùàåìîãî çíà÷åíèÿ</code><code>;<br>
</code><code class="codeit">ðàçäåë îïèñàíèé </code><code><br>
<b>begin</b><br>
&nbsp; </code><code class="codeit">îïåðàòîðû </code><code><br>
<b>end</b>;</code></p>
</blockquote>
<p> Îïåðàòîðû ïîäïðîãðàììû, îêàéìëåííûå
îïåðàòîðíûìè ñêîáêàìè <code><b>begin</b></code>/<code><b>end</b></code>,
íàçûâàþòñÿ <i>òåëîì</i> ýòîé ïîäïðîãðàììû.</p>
<p class="ptprogramup">Ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ âìåñòå ñ
îêðóæàþùèìè ñêîáêàìè ìîæåò îòñóòñòâîâàòü. Îí ñîñòîèò èç îäíîé èëè íåñêîëüêèõ
ñåêöèé, ðàçäåëåííûõ ñèìâîëîì &quot;<code>;</code>&quot;.
Êàæäàÿ ñåêöèÿ ñîñòîèò èç ñïèñêà ïåðåìåííûõ, ïåðå÷èñëÿåìûõ ÷åðåç çàïÿòóþ, ïîñëå
êîòîðîãî ñëåäóþò äâîåòî÷èå è òèï. Êàæäàÿ ñåêöèÿ ìîæåò ïðåäâàðÿòüñÿ êëþ÷åâûì
ñëîâîì <code><b>var</b></code> èëè <code><b>const</b></code>, ÷òî óêàçûâàåò íà òî, ÷òî ïàðàìåòðû
ïåðåäàþòñÿ ïî ññûëêå (ñì.ï. <a href="params.html">Ïàðàìåòðû ïðîöåäóð è ôóíêöèé</a>).
Òèï ôîðìàëüíîãî ïàðàìåòðà äîëæåí áûòü ëèáî èìåíåì, ëèáî äèíàìè÷åñêèì ìàññèâîì,
ëèáî ìíîæåñòâîì, ëèáî ïðîöåäóðíîé ïåðåìåííîé (äëÿ ïîñëåäíèõ òðåõ òèïîâ èìååò
ìåñòî <a href="../Types/typecompatibility.html">ñòðóêòóðíàÿ ýêâèâàëåíòíîñòü òèïîâ</a>).</p>
<p>Ðàçäåë îïèñàíèé ïðîöåäóðû
èëè ôóíêöèè óñòðîåí òàê æå, êàê è <a href="../_ProgrStruct_Defs/index_progrstruct.html">ðàçäåë îïèñàíèé</a> îñíîâíîé
ïðîãðàììû. Çäåñü îïèñûâàþòñÿ òàê íàçûâàåìûå
<b><font color="#FF0000">
<i>ëîêàëüíûå</i></font></b> ïåðåìåííûå è êîíñòàíòû, òèïû (çà èñêëþ÷åíèåì êëàññîâ - êëàññû
ìîæíî îïèñûâàòü òîëüêî ãëîáàëüíî)
à òàêæå
âëîæåííûå ïðîöåäóðû è ôóíêöèè. Âñå òàêèå ëîêàëüíûå îáúåêòû äîñòóïíû ëèøü âíóòðè
äàííîé ïîäïðîãðàììû è íå âèäíû èçâíå.</p>
<p >Â ðàçäåëå îïèñàíèé ïîäïðîãðàììû ìîæíî îïèñûâàòü äðóãèå
ïîäïðîãðàììû. Èñêëþ÷åíèå ñîñòàâëÿþò ìåòîäû êëàññà, îïèñûâàåìûå íåïîñðåäñòâåííî â
òåëå êëàññà: â íèõ íåëüçÿ îïèñûâàòü âëîæåííûå ïîäïðîãðàììû ââèäó ñèíòàêñè÷åñêîé
íåîäíîçíà÷íîñòè.</p>
<p>Íàïðèìåð:</p>
<blockquote>
<p><code><b>procedure</b> DoAdd(a,b: real; <b>var</b> res: real);<br>
<b>begin<br>
</b>&nbsp; res := a + b;<br>
<b>end</b>;</code></p>
</blockquote>
<h2>Âûçîâ ïîäïðîãðàììû</h2>
<p>Ïîäïðîãðàììà îäèí ðàç îïèñûâàåòñÿ è ìîæåò áûòü ìíîãîêðàòíî âûçâàíà. Äëÿ
âûçîâà ïðîöåäóðû èñïîëüçóåòñÿ <a href="../Operators/proccall.html">îïåðàòîð
âûçîâà ïðîöåäóðû</a>:</p>
<blockquote>
<p><code>
<b>begin<br>
</b>&nbsp; <strong>var</strong> x := ReadInteger;<br>&nbsp; <strong>var</strong>
y := ReadInteger;<br>&nbsp; var res: integer;<br>&nbsp; DoAdd(x,y,res);<br>&nbsp;
Print(res);&nbsp; <br>&nbsp; DoAdd(2*x,y,res);<br>&nbsp; Print(res);&nbsp;
<br><b>end</b>;</code></p>
</blockquote>
<p>&nbsp;Äëÿ âûçîâà ôóíêöèè èñïîëüçóåòñÿ
<a href="../Operations_Expressions/funccall.html">âûðàæåíèå âûçîâà ôóíêöèè</a>.</p>
<h2>Ïåðåìåííàÿ Result</h2>
<p>Âíóòðè òåëà ëþáîé ôóíêöèè îïðåäåëåíà ñïåöèàëüíàÿ ïåðåìåííàÿ ñ èìåíåì <code>Result</code>,
êîòîðàÿ õðàíèò ðåçóëüòàò âû÷èñëåíèÿ ôóíêöèè. Åå òèï ñîâïàäàåò ñ òèïîì
âîçâðàùàåìîãî çíà÷åíèÿ ôóíêöèè. Íàïðèìåð:</p>
<blockquote>
<p ><code><b>function </b>Sum(a,b: real): real;<br>
<b>begin<br>
&nbsp; </b>Result := a + b;<br>
<b>end;</b></code></p>
<p ><code><b>function</b> MinElement(a: <b>
array of</b> real): real;<br>
<b>begin</b><br>
&nbsp; Result := real.MaxValue;<br>
&nbsp; <b>foreach</b> <strong>var </strong>x <b>in</b>
a <b>do</b><br>
&nbsp;&nbsp;&nbsp; <b>if</b> x &lt; Result <b>then</b>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result := x;<br>
<b>end</b>;</code></p>
<p ><code><strong>begin</strong><br>&nbsp; var a := Seq(1,5,3);<br>&nbsp;
writeln(MinElement(a) + Sum(2,3));<br><strong>end</strong>.</code></p>
</blockquote>
<p >Åñëè âíóòðè ôóíêöèè íå ïðèñâîèòü ïåðåìåííîé <code>Result</code> íåêîòîðîå
çíà÷åíèå, òî ôóíêöèÿ âåðíåò â ðåçóëüòàòå ñâîåãî âûçîâà íåïðåäñêàçóåìîå çíà÷åíèå.</p>
<h2 >Óïðîùåííûé ñèíòàêñèñ îïèñàíèÿ ïîäïðîãðàìì</h2>
<p >Â <span lang="en-us">PascalABC.NET </span>èìååòñÿ óïðîùåííûé ñèíòàêñèñ
îïèñàíèÿ îäíîîïåðàòîðíûõ ïðîöåäóð: </p>
<blockquote>
<p><code><b>procedure</b> <span lang="en-us">WriteStar := write('*');</span></code></p>
</blockquote>
<p >Àíàëîãè÷íûé ñèíòàêñèñ èìååòñÿ äëÿ ôóíêöèé, âû÷èñëÿþùèõ îäíî âûðàæåíèå:</p>
<blockquote>
<p ><code><b>function</b> Add(a,b: real): real<span lang="en-us"> := </span>a + b;</code></p>
</blockquote>
<p >Ïðè ýòîì â ðÿäå ñëó÷àåâ äëÿ âîçâðàùàåìîãî çíà÷åíèÿ ôóíêöèè âîçìîæåí àâòîâûâîä òèïîâ:</p>
<blockquote>
<p ><code><b>function</b> Add(a,b: real)<span lang="en-us"> := </span>a + b;</code></p>
</blockquote>
</body>
</html>