1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 <html xmlns="http://www.w3.org/1999/xhtml">
7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9 <title>関数 - 第三形式 — プログラミング言語 Ring 1.12 取扱説明書</title>
11 <link rel="stylesheet" href="_static/bootstrap-astropy.css" type="text/css" />
12 <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
14 <script type="text/javascript">
15 var DOCUMENTATION_OPTIONS = {
18 COLLAPSE_INDEX: false,
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'/>
33 <body role="document">
35 <a class="brand" title="Documentation Home" href="index.html"><span id="logotext1">🍩Ring</span><span id="logotext2"> 1.12</span><span id="logotext3">:docs</span></a>
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>
45 <li><a title="Ring Homepage" href="http://ring-lang.net/">Website</a></li>
46 <li><a title="総合索引" href="genindex.html">Index</a></li>
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" />
64 <a href="programstructure.html" title="プログラムの構造">
69 <a href="functions2.html" title="関数 - 第二形式">
75 <a href="index.html">プログラミング言語 Ring 1.12 取扱説明書</a>
84 <div class="document">
85 <div class="documentwrapper">
86 <div class="bodywrapper">
87 <div class="body" role="main">
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>
102 <div class="section" id="index-1">
103 <span id="id2"></span><h2>関数の定義<a class="headerlink" href="#index-1" title="このヘッドラインへのパーマリンク">¶</a></h2>
106 <div class="highlight-ring"><div class="highlight"><pre>func <関数名> [仮引数] ['{']
112 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">"stdlib.ring"</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">"Hello from function </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
115 <span class="p">}</span>
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>
127 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">"stdlib.ring"</span>
129 <span class="n">hello</span><span class="p">()</span>
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">"Hello from function </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
133 <span class="p">}</span>
137 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">"stdlib.ring"</span>
139 <span class="n">first</span><span class="p">()</span> <span class="n">second</span><span class="p">()</span>
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">"message from the first function </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span> <span class="p">}</span>
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">"message from the second function </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span> <span class="p">}</span>
147 <div class="section" id="index-3">
148 <span id="id4"></span><h2>仮引数の宣言<a class="headerlink" href="#index-3" title="このヘッドラインへのパーマリンク">¶</a></h2>
149 <p>関数へ仮引数を宣言するには、関数名末尾に仮引数のリストとしてカンマで区切った
152 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">"stdlib.ring"</span>
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>
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>
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>
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>
173 <span class="k">load</span> <span class="s">"stdlib.ring"</span>
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>
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>
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>
187 <div class="highlight-ring"><div class="highlight"><pre><span class="c"># このプログラムは、 Hello World メッセージを表示した後にメイン関数を実行します。</span>
189 <span class="k">load</span> <span class="s">"stdlib.ring"</span>
191 <span class="n">print</span><span class="p">(</span><span class="s">"Hello, World! </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
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">"Message from the main function </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
195 <span class="p">}</span>
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>
206 <div class="highlight-ring"><div class="highlight"><pre><span class="c"># このプログラムでは 1 ~ 10 までの数値を表示します。</span>
208 <span class="k">load</span> <span class="s">"stdlib.ring"</span>
210 <span class="n">x</span> <span class="o">=</span> <span class="mi">10</span> <span class="c"># x はグローバル変数です。</span>
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>
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">"#{x}</span><span class="se">\n</span><span class="s">"</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>
224 <div class="admonition note">
225 <p class="first admonition-title">注釈</p>
226 <p class="last">for ループの変数 t をローカル変数として宣言する前に、 Main 関数を使用してください。
227 つまり、新しい変数のスコープをローカルとして設定するために、命令を直接入力するのではなく、
228 Main 関数では自動的にローカルとして設定することが推奨されます。</p>
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>
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>
238 <div class="admonition tip">
239 <p class="first admonition-title">ちなみに</p>
240 <p class="last">Return 命令の後にある式はオプションであり、
241 Return 命令で値を返さずに関数の実行を終了することもできます。</p>
243 <div class="admonition note">
244 <p class="first admonition-title">注釈</p>
245 <p class="last">関数が明示的な値を返さない場合は、 NULL (空の文字列 = “”) を返します。</p>
248 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">"stdlib.ring"</span>
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">"the function doesn't return a value</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
252 <span class="p">}</span>
254 <span class="k">func</span> <span class="n">novalue</span> <span class="p">{</span> <span class="p">}</span>
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>
263 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">"stdlib.ring"</span>
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>
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>
277 <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
278 <div class="sphinxsidebarwrapper"><h3>ページの内容</h3>
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>
295 <p class="topless"><a href="functions2.html"
296 title="前の章へ">関数 - 第二形式</a></p>
298 <p class="topless"><a href="programstructure.html"
299 title="次の章へ">プログラムの構造</a></p>
300 <div role="note" aria-label="source link">
302 <ul class="this-page-menu">
303 <li><a href="_sources/functions3.txt"
304 rel="nofollow">ソースコードを表示</a></li>
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" />
316 <div class="clearer"></div>
318 <footer class="footer">
319 <p class="pull-right">
320 <a href="_sources/functions3.txt"
321 rel="nofollow">Page Source</a>
322 <a href="#">Back to Top</a></p>
324 © 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)