OSDN Git Service

2ee2ec64c88e332c4db0eadb4983c65d30709664
[ring-lang-081/ring.git] / docs / build / html / functions3.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5 <html xmlns="http://www.w3.org/1999/xhtml">
6   <head>
7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8     
9     <title>関数 - 第三形式 &mdash; プログラミング言語 Ring 1.12 取扱説明書</title>
10     
11     <link rel="stylesheet" href="_static/bootstrap-astropy.css" type="text/css" />
12     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
13     
14     <script type="text/javascript">
15       var DOCUMENTATION_OPTIONS = {
16         URL_ROOT:    './',
17         VERSION:     '1.12',
18         COLLAPSE_INDEX: false,
19         FILE_SUFFIX: '.html',
20         HAS_SOURCE:  true
21       };
22     </script>
23     <script type="text/javascript" src="_static/jquery.js"></script>
24     <script type="text/javascript" src="_static/underscore.js"></script>
25     <script type="text/javascript" src="_static/doctools.js"></script>
26     <script type="text/javascript" src="_static/translations.js"></script>
27     <link rel="top" title="プログラミング言語 Ring 1.12 取扱説明書" href="index.html" />
28     <link rel="next" title="プログラムの構造" href="programstructure.html" />
29     <link rel="prev" title="関数 - 第二形式" href="functions2.html" />
30     <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,600' rel='stylesheet' type='text/css'/>
31
32   </head>
33   <body role="document">
34 <div class="topbar">
35   <a class="brand" title="Documentation Home" href="index.html"><span id="logotext1">&#x1f369;Ring</span><span id="logotext2"> 1.12</span><span id="logotext3">:docs</span></a>
36   <ul>
37     
38     <li><a href="http://ring-lang.sourceforge.net/news.html">News</a></li>
39     <li><a href="http://ring-lang.sourceforge.net/download.html">Download</a></li>
40     <li><a href="https://groups.google.com/forum/#!forum/ring-lang">Get Help</a></li>
41     <li><a href="https://github.com/ring-lang/ring">Contribute</a></li>
42     <li><a href="http://ring-lang.sourceforge.net/resources.html">Resources</a></li>
43     <li><a href="http://ring-lang.sourceforge.net/team.html">Team</a></li>
44     
45     <li><a title="Ring Homepage" href="http://ring-lang.net/">Website</a></li>
46     <li><a title="総合索引" href="genindex.html">Index</a></li>
47     <li>
48       
49       
50 <form action="search.html" method="get">
51   <input type="text" name="q" placeholder="Search" />
52   <input type="hidden" name="check_keywords" value="yes" />
53   <input type="hidden" name="area" value="default" />
54 </form>
55       
56     </li>
57   </ul>
58 </div>
59
60 <div class="related">
61     <h3>ナビゲーション</h3>
62     <ul>
63       <li class="right">
64         <a href="programstructure.html" title="プログラムの構造">
65           next &raquo;
66         </a>
67       </li>
68       <li class="right">
69         <a href="functions2.html" title="関数 - 第二形式">
70           &laquo; previous
71         </a>
72          |
73       </li>
74       <li>
75         <a href="index.html">プログラミング言語 Ring 1.12 取扱説明書</a>
76          &raquo;
77       </li>
78       
79       <li>関数 - 第三形式</li> 
80     </ul>
81 </div>
82   
83
84     <div class="document">
85       <div class="documentwrapper">
86         <div class="bodywrapper">
87           <div class="body" role="main">
88             
89   <div class="section" id="index-0">
90 <span id="id1"></span><h1>関数 - 第三形式<a class="headerlink" href="#index-0" title="このヘッドラインへのパーマリンク">¶</a></h1>
91 <p>第三形式による関数の用法を学びます。</p>
92 <ul class="simple">
93 <li>関数の定義</li>
94 <li>関数の呼び出し</li>
95 <li>仮引数の宣言</li>
96 <li>仮引数の送信</li>
97 <li>メイン関数</li>
98 <li>変数のスコープ</li>
99 <li>返値</li>
100 <li>再帰処理</li>
101 </ul>
102 <div class="section" id="index-1">
103 <span id="id2"></span><h2>関数の定義<a class="headerlink" href="#index-1" title="このヘッドラインへのパーマリンク">¶</a></h2>
104 <p>新しい関数を定義するには</p>
105 <p>文法:</p>
106 <div class="highlight-ring"><div class="highlight"><pre>func &lt;関数名&gt; [仮引数] [&#39;{&#39;]
107         ステートメント・ブロック
108 [&#39;}&#39;]
109 </pre></div>
110 </div>
111 <p>用例:</p>
112 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">&quot;stdlib.ring&quot;</span>
113 <span class="k">func</span> <span class="n">hello</span> <span class="p">{</span>
114         <span class="n">print</span><span class="p">(</span><span class="s">&quot;Hello from function </span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
115 <span class="p">}</span>
116 </pre></div>
117 </div>
118 </div>
119 <div class="section" id="index-2">
120 <span id="id3"></span><h2>関数の呼び出し<a class="headerlink" href="#index-2" title="このヘッドラインへのパーマリンク">¶</a></h2>
121 <p>仮引数を指定せずに関数を呼び出すには、関数名末尾に () を入力します。</p>
122 <div class="admonition tip">
123 <p class="first admonition-title">ちなみに</p>
124 <p class="last">関数の定義、および関数のコードの記述前に関数を呼び出せます。</p>
125 </div>
126 <p>用例:</p>
127 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">&quot;stdlib.ring&quot;</span>
128
129 <span class="n">hello</span><span class="p">()</span>
130
131 <span class="k">func</span> <span class="n">hello</span> <span class="p">{</span>
132         <span class="n">print</span><span class="p">(</span><span class="s">&quot;Hello from function </span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
133 <span class="p">}</span>
134 </pre></div>
135 </div>
136 <p>用例:</p>
137 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">&quot;stdlib.ring&quot;</span>
138
139 <span class="n">first</span><span class="p">()</span>  <span class="n">second</span><span class="p">()</span>
140
141 <span class="k">func</span> <span class="n">first</span> <span class="p">{</span>  <span class="n">print</span><span class="p">(</span><span class="s">&quot;message from the first function </span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>  <span class="p">}</span>
142
143 <span class="k">func</span> <span class="n">second</span> <span class="p">{</span> <span class="n">print</span><span class="p">(</span><span class="s">&quot;message from the second function </span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span> <span class="p">}</span>
144 </pre></div>
145 </div>
146 </div>
147 <div class="section" id="index-3">
148 <span id="id4"></span><h2>仮引数の宣言<a class="headerlink" href="#index-3" title="このヘッドラインへのパーマリンク">¶</a></h2>
149 <p>関数へ仮引数を宣言するには、関数名末尾に仮引数のリストとしてカンマで区切った
150 識別子のグループを記述します。</p>
151 <p>用例:</p>
152 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">&quot;stdlib.ring&quot;</span>
153
154 <span class="k">func</span> <span class="n">sum</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)</span> <span class="p">{</span>
155         <span class="n">print</span><span class="p">(</span><span class="n">x</span><span class="o">+</span><span class="n">y</span><span class="p">)</span>
156 <span class="p">}</span>
157 </pre></div>
158 </div>
159 </div>
160 <div class="section" id="index-4">
161 <span id="id5"></span><h2>仮引数の送信<a class="headerlink" href="#index-4" title="このヘッドラインへのパーマリンク">¶</a></h2>
162 <p>関数へ仮引数を送信するには、関数名末尾に () の内側で仮引数を入力します。</p>
163 <p>文法:</p>
164 <div class="highlight-ring"><div class="highlight"><pre><span class="n">関数名</span><span class="p">(</span><span class="n">仮引数</span><span class="p">)</span>
165 </pre></div>
166 </div>
167 <p>用例:</p>
168 <div class="highlight-ring"><div class="highlight"><pre><span class="o">/*</span> <span class="n">実行結果</span>
169 <span class="o">**</span> <span class="mi">8</span>
170 <span class="o">**</span> <span class="mi">3000</span>
171 <span class="o">*/</span>
172
173 <span class="k">load</span> <span class="s">&quot;stdlib.ring&quot;</span>
174
175 <span class="n">sum</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> <span class="n">sum</span><span class="p">(</span><span class="mi">1000</span><span class="p">,</span><span class="mi">2000</span><span class="p">)</span>
176
177 <span class="k">func</span> <span class="n">sum</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)</span> <span class="p">{</span> <span class="n">print</span><span class="p">(</span><span class="n">x</span><span class="o">+</span><span class="n">y</span><span class="p">)</span> <span class="p">}</span>
178 </pre></div>
179 </div>
180 </div>
181 <div class="section" id="main">
182 <span id="index-5"></span><h2>Main 関数<a class="headerlink" href="#main" title="このヘッドラインへのパーマリンク">¶</a></h2>
183 <p>Ring では、 Main (メイン) 関数はオプション扱いです。 Main 関数が定義された場合は、
184 ほかのステートメント実行後にメイン関数が実行されます。</p>
185 <p>ほかのステートメントが存在しない場合に限り、メイン関数は最初の <a class="reference external" href="https://ja.wikipedia.org/wiki/エントリーポイント">エントリーポイント</a> となります。</p>
186 <p>用例:</p>
187 <div class="highlight-ring"><div class="highlight"><pre><span class="c"># このプログラムは、 Hello World メッセージを表示した後にメイン関数を実行します。</span>
188
189 <span class="k">load</span> <span class="s">&quot;stdlib.ring&quot;</span>
190
191 <span class="n">print</span><span class="p">(</span><span class="s">&quot;Hello, World! </span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
192
193 <span class="k">func</span> <span class="n">main</span> <span class="p">{</span>
194         <span class="n">print</span><span class="p">(</span><span class="s">&quot;Message from the main function </span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
195 <span class="p">}</span>
196 </pre></div>
197 </div>
198 </div>
199 <div class="section" id="index-6">
200 <span id="id7"></span><h2>変数のスコープ<a class="headerlink" href="#index-6" title="このヘッドラインへのパーマリンク">¶</a></h2>
201 <p>Ring は変数のスコープの決定で <a class="reference external" href="https://ja.wikipedia.org/wiki/静的スコープ">静的スコープ</a> を使用します。</p>
202 <p>関数の内側で定義される変数は、ローカル変数になります (関数の仮引数も該当します)。
203 関数の外側で定義される変数は、グローバル変数になります (関数の前にあるのは全て該当します)。</p>
204 <p>この関数内で定義されたグローバル変数は、別の関数内にある変数としてもアクセスできます。</p>
205 <p>用例:</p>
206 <div class="highlight-ring"><div class="highlight"><pre><span class="c"># このプログラムでは 1 ~ 10 までの数値を表示します。</span>
207
208 <span class="k">load</span> <span class="s">&quot;stdlib.ring&quot;</span>
209
210 <span class="n">x</span> <span class="o">=</span> <span class="mi">10</span>                          <span class="c"># x はグローバル変数です。</span>
211
212 <span class="k">func</span> <span class="n">main</span> <span class="p">{</span>
213         <span class="k">for</span> <span class="n">t</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">to</span> <span class="mi">10</span> <span class="p">{</span>       <span class="c"># t はローカル変数です。</span>
214                 <span class="n">mycounter</span><span class="p">()</span>     <span class="c"># 関数の呼び出し</span>
215         <span class="p">}</span>
216 <span class="p">}</span>
217
218 <span class="k">func</span> <span class="n">mycounter</span> <span class="p">{</span>
219         <span class="n">print</span><span class="p">(</span><span class="s">&quot;#{x}</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>         <span class="c"># グローバル変数の値を表示します。</span>
220         <span class="n">x</span><span class="o">--</span>                     <span class="c"># 減分します。</span>
221 <span class="p">}</span>
222 </pre></div>
223 </div>
224 <div class="admonition note">
225 <p class="first admonition-title">注釈</p>
226 <p class="last">for ループの変数 t をローカル変数として宣言する前に、 Main 関数を使用してください。
227 つまり、新しい変数のスコープをローカルとして設定するために、命令を直接入力するのではなく、
228 Main 関数では自動的にローカルとして設定することが推奨されます。</p>
229 </div>
230 </div>
231 <div class="section" id="index-7">
232 <span id="id9"></span><h2>返値<a class="headerlink" href="#index-7" title="このヘッドラインへのパーマリンク">¶</a></h2>
233 <p>Return 命令は、関数の値を返します。</p>
234 <p>文法:</p>
235 <div class="highlight-ring"><div class="highlight"><pre><span class="k">Return</span> <span class="o">[</span><span class="n">式</span><span class="o">]</span>
236 </pre></div>
237 </div>
238 <div class="admonition tip">
239 <p class="first admonition-title">ちなみに</p>
240 <p class="last">Return 命令の後にある式はオプションであり、
241 Return 命令で値を返さずに関数の実行を終了することもできます。</p>
242 </div>
243 <div class="admonition note">
244 <p class="first admonition-title">注釈</p>
245 <p class="last">関数が明示的な値を返さない場合は、 NULL (空の文字列 = &#8220;&#8221;) を返します。</p>
246 </div>
247 <p>用例:</p>
248 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">&quot;stdlib.ring&quot;</span>
249
250 <span class="k">if</span> <span class="n">novalue</span><span class="p">()</span> <span class="o">=</span> <span class="kp">NULL</span> <span class="p">{</span>
251         <span class="n">print</span><span class="p">(</span><span class="s">&quot;the function doesn&#39;t return a value</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
252 <span class="p">}</span>
253
254 <span class="k">func</span> <span class="n">novalue</span> <span class="p">{</span> <span class="p">}</span>
255 </pre></div>
256 </div>
257 </div>
258 <div class="section" id="index-8">
259 <span id="id10"></span><h2>再帰処理<a class="headerlink" href="#index-8" title="このヘッドラインへのパーマリンク">¶</a></h2>
260 <p>Ring は <a class="reference external" href="https://ja.wikipedia.org/wiki/再帰">再帰</a>
261 に対応しており、異なる引数を使用して関数が関数自身を再帰的に呼び出せます。</p>
262 <p>用例:</p>
263 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">&quot;stdlib.ring&quot;</span>
264
265 <span class="n">print</span><span class="p">(</span> <span class="n">fact</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="p">)</span>        <span class="c"># 実行結果 = 120</span>
266
267 <span class="k">func</span> <span class="n">fact</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span> <span class="n">x</span> <span class="o">=</span> <span class="mi">0</span> <span class="p">{</span> <span class="k">return</span> <span class="mi">1</span> <span class="k">else</span> <span class="k">return</span> <span class="n">x</span> <span class="o">*</span> <span class="n">fact</span><span class="p">(</span><span class="n">x</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span>
268 </pre></div>
269 </div>
270 </div>
271 </div>
272
273
274           </div>
275         </div>
276       </div>
277       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
278         <div class="sphinxsidebarwrapper"><h3>ページの内容</h3>
279 <ul>
280 <li><a class="reference internal" href="#">関数 - 第三形式</a><ul>
281 <li><a class="reference internal" href="#index-1">関数の定義</a></li>
282 <li><a class="reference internal" href="#index-2">関数の呼び出し</a></li>
283 <li><a class="reference internal" href="#index-3">仮引数の宣言</a></li>
284 <li><a class="reference internal" href="#index-4">仮引数の送信</a></li>
285 <li><a class="reference internal" href="#main">Main 関数</a></li>
286 <li><a class="reference internal" href="#index-6">変数のスコープ</a></li>
287 <li><a class="reference internal" href="#index-7">返値</a></li>
288 <li><a class="reference internal" href="#index-8">再帰処理</a></li>
289 </ul>
290 </li>
291 </ul>
292
293
294   <h4>前のトピックへ</h4>
295   <p class="topless"><a href="functions2.html"
296                         title="前の章へ">関数 - 第二形式</a></p>
297   <h4>次のトピックへ</h4>
298   <p class="topless"><a href="programstructure.html"
299                         title="次の章へ">プログラムの構造</a></p>
300   <div role="note" aria-label="source link">
301     <h3>このページ</h3>
302     <ul class="this-page-menu">
303       <li><a href="_sources/functions3.txt"
304             rel="nofollow">ソースコードを表示</a></li>
305     </ul>
306    </div>
307       
308 <form action="search.html" method="get">
309   <input type="text" name="q" placeholder="Search" />
310   <input type="hidden" name="check_keywords" value="yes" />
311   <input type="hidden" name="area" value="default" />
312 </form>
313       
314         </div>
315       </div>
316       <div class="clearer"></div>
317     </div>
318 <footer class="footer">
319   <p class="pull-right">
320     <a href="_sources/functions3.txt"
321        rel="nofollow">Page Source</a> &nbsp;
322     <a href="#">Back to Top</a></p>
323   <p>
324     &copy; Copyright 2016-2020, Ring Team.<br/>
325     Created using <a href="http://www.sphinx-doc.org/en/stable/">Sphinx</a> 1.3.6. / astropy-sphinx-theme 1.1 (isVowel)
326   </p>
327 </footer>
328   </body>
329 </html>