関数の説明と演算子 'return'
プログラム内に関数を指定する必要性については、プログラムに記述されていない関数と、プログラムに記述しなければならない関数の2つのグループに分けられます。 標準機能はプログラムには記載されていません。 ユーザー定義関数は、任意のプログラムで記述する必要があります。 特別な機能があれば、それもプログラムに記述する必要があります。
関数の記述形式
関数の説明は、関数ヘッダーと関数本体という2つの基本部分で構成されています。
関数ヘッダーには、戻り値の型、関数名、および仮引数のリストが括弧で囲まれています。 関数が値を返す必要がない場合、その型の名前はvoidでなければなりません。
関数本体は、単純演算子や複合演算子、および他の関数への呼び出しで構成され、かっこで囲まれています。
1 2 3 4 5 6 |
<span class="notranslate"> Return_value_type Function_name <b>(</b>仮パラメータのリスト<b>)</b> //ヘッダ</span> <span class="notranslate"> <b>{</b> //オープニングブレース</span> <span class="notranslate">プログラムコード//関数本体は次のようになります。</span> <span class="notranslate">オペレータの関数を作成する// ..</span> <span class="notranslate"> body // ..他の関数への呼び出し</span> <span class="notranslate"> <b>}</b> //中括弧を閉じる</span> |
リストのパラメータはカンマで区切って指定します。 関数に渡されるパラメーターの量は制限されており、64を超えることはできません。関数ヘッダーの仮パラメーターとしては、変数のみを指定できます(ただし、定数、その他の関数呼び出しまたは式は指定できません)。 関数呼び出しで渡されたパラメータの量、型および順序は、関数の説明で指定されている仮パラメータのものと同じでなければなりません(唯一の例外は、デフォルト値のパラメータを持つ関数への呼び出しです)。
1 2 3 4 5 6 7 8 9 10 |
<span class="notranslate"> <span class="hl-reserved">int</span> <span class="hl-identifier">My_function</span> <span class="hl-brackets">(</span> <span class="hl-reserved">int</span> <span class="hl-identifier">a</span> <span class="hl-code">、</span> <span class="hl-reserved">double</span> <span class="hl-identifier">b</span> <span class="hl-brackets">)</span> <span class="hl-comment">//関数の記述例</span></span> <span class="notranslate"> <span class="hl-brackets">{</span></span> <span class="notranslate"> <span class="hl-reserved">int</span> <span class="hl-identifier">c</span> <span class="hl-code">=</span> <span class="hl-identifier">a</span> <span class="hl-code">*</span> <span class="hl-identifier">b</span> <span class="hl-code">+</span> <span class="hl-number">3</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">//関数本体演算子</span></span> <span class="notranslate"> <span class="hl-reserved">return</span> <span class="hl-brackets">(</span> <span class="hl-identifier">c</span> <span class="hl-brackets">)</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">//関数の終了演算子</span></span> <span class="notranslate"> <span class="hl-brackets">}</span></span> <span class="notranslate"> <span class="hl-comment">//ここで(ヘッダの左から右へ):</span></span> <span class="notranslate"> <span class="hl-reserved">int</span> <span class="hl-comment">//戻り値の型</span></span> <span class="notranslate"> <span class="hl-identifier">My_function</span> <span class="hl-comment">//関数名</span></span> <span class="notranslate"> <span class="hl-reserved">int</span> <span class="hl-identifier">a</span> <span class="hl-comment">// <i>int</i>型の最初の仮パラメータa</span></span> <span class="notranslate"> <span class="hl-reserved">double</span> <span class="hl-identifier">b</span> <span class="hl-comment">// <i>double</i>型の第2形式パラメータb</span></span> |
関数に渡されるパラメータは、対応する型の定数で定義されるデフォルト値を持つことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="notranslate"> <span class="hl-reserved">int</span> <span class="hl-identifier">My_function</span> <span class="hl-brackets">(</span> <span class="hl-reserved">int</span> <span class="hl-identifier">a</span> <span class="hl-code">、</span> <span class="hl-reserved">bool</span> <span class="hl-identifier">b</span> <span class="hl-code">=</span> <span class="hl-reserved">true</span> <span class="hl-code">、</span> <span class="hl-reserved">int</span> <span class="hl-identifier">c</span> <span class="hl-code">=</span> <span class="hl-number">1</span> <span class="hl-code">、</span> <span class="hl-reserved">double</span> <span class="hl-identifier">d</span> <span class="hl-code">=</span> <span class="hl-number">0.5</span> <span class="hl-brackets">)</span> <span class="hl-comment">//</span> <span class="hl-comment">関数の記述例</span></span> <span class="notranslate"> <span class="hl-brackets">{</span></span> <span class="notranslate"> <span class="hl-identifier">a</span> <span class="hl-code">=</span> <span class="hl-identifier">a</span> <span class="hl-code">+</span> <span class="hl-identifier">b</span> <span class="hl-code">*</span> <span class="hl-identifier">c</span> <span class="hl-code">+</span> <span class="hl-identifier">d</span></span> <span class="notranslate"> <span class="hl-number">2</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">//</span> <span class="hl-comment">関数本体演算子</span></span> <span class="notranslate"> <span class="hl-reserved">int</span> <span class="hl-identifier">k</span> <span class="hl-code">=</span> <span class="hl-identifier">a</span> <span class="hl-code">*</span> <span class="hl-number">3</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">//</span> <span class="hl-comment">関数本体演算子</span></span> <span class="notranslate"> <span class="hl-reserved">return</span> <span class="hl-brackets">(</span> <span class="hl-identifier">k</span> <span class="hl-brackets">)</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">//</span> <span class="hl-comment">関数の終了演算子</span></span> <span class="notranslate"> <span class="hl-brackets">}</span></span> <span class="notranslate"> <span class="hl-comment">//</span> <span class="hl-comment">ここで(ヘッダの左から右へ)</span> <span class="hl-comment">:</span></span> <span class="notranslate"> <span class="hl-reserved">int</span> <span class="hl-comment">//</span> <span class="hl-comment">戻り値の型</span></span> <span class="notranslate"> <span class="hl-identifier">My_function</span> <span class="hl-comment">//</span> <span class="hl-comment">関数名</span></span> <span class="notranslate"> <span class="hl-reserved">int</span> <span class="hl-identifier">a</span> <span class="hl-comment">//</span> <span class="hl-comment"><i>int</i>型の最初の仮パラメータa</span></span> <span class="notranslate"> <span class="hl-reserved">bool</span> <span class="hl-identifier">b</span> <span class="hl-comment">//</span> <span class="hl-comment"><i>double</i>型の第2形式パラメータb</span></span> <span class="notranslate"> <span class="hl-reserved">true</span> <span class="hl-comment">// bのデフォルト値である定数</span></span> <span class="notranslate"> <span class="hl-reserved">int</span> <span class="hl-identifier">c</span> <span class="hl-comment">//</span> <span class="hl-comment"><i>int</i>型の</span> <span class="hl-comment">3番目の</span> <span class="hl-comment">仮引数c</span></span> <span class="notranslate"> <span class="hl-number">1</span> <span class="hl-comment">//</span> <span class="hl-comment">定数、</span> <span class="hl-comment">cの</span> <span class="hl-comment">デフォルト値</span></span> <span class="notranslate"> <span class="hl-reserved">double</span> <span class="hl-identifier">d</span> <span class="hl-comment">//</span> <span class="hl-comment"><i>double</i>型の</span> <span class="hl-comment">第4の</span> <span class="hl-comment">仮引数d</span></span> <span class="notranslate"> <span class="hl-number">0.5</span> <span class="hl-comment">//</span> <span class="hl-comment">dの</span> <span class="hl-comment">デフォルト値である定数</span></span> <span class="notranslate"> <span class="hl-identifier">a</span> <span class="hl-code">、</span> <span class="hl-identifier">b</span> <span class="hl-code">、</span> <span class="hl-identifier">c</span> <span class="hl-code">、</span> <span class="hl-identifier">d</span> <span class="hl-code">、</span> <span class="hl-identifier">k</span> <span class="hl-comment">//ローカル変数</span></span> |
デフォルト値を持つ関数の呼び出しで実際のパラメータが指定されている場合、実際のパラメータの値は関数で計算されます。 デフォルト値を持つ関数の呼び出しで実際のパラメータが指定されていない場合、対応するデフォルト値が計算されます。
特別な関数もパラメータを持つことができます。 しかし、クライアント端末は、これらの関数を呼び出すときに外部からパラメータを渡すことはなく、デフォルト値を使用するだけです。 特別な関数は、他の関数と同じように、一般的な規則に従ってモジュールの任意の場所から呼び出すことができます。
関数の実行規則
プログラム内の関数記述の場所:
関数の説明は、他の関数の外で別々にプログラムに配置する必要があります(つまり、別の関数に配置してはいけません)。 |
関数の実行:
関数本体を構成するコードに従って、実行のために呼び出される関数が実行されます。 |
演算子 'return'の形式
関数が返す値は、演算子 'return'のカッコで指定されたパラメータの値です。 演算子 'return'は、キーワード 'return'、カッコで囲まれた式、および「;」の文字で終了します。 (セミコロン)。 フルフォーマットの演算子 'return':
1 |
<span class="notranslate"> <b>return(</b>式<b>);</b></span> <b> </b> <span class="notranslate"> //演算子return</span> |
かっこ内の式は、定数、変数、または関数呼び出しです。 演算子 'return'を使用して返される値の型は、関数ヘッダーで指定された関数戻り値の型と同じでなければなりません。 これが当てはまらない場合、演算子 'return'で指定された式の値は、関数の説明のヘッダーで指定された戻り値の型にキャストする必要があります。 型キャスティングが不可能な場合、MetaEditorはプログラムのコンパイル時にエラーメッセージを表示します。
演算子 'return'の実行ルール
演算子 'return'は、最も近い外部関数の実行を停止し、関数呼び出しのために定義された規則に従って呼び出しプログラムに制御を渡します。 関数が返す値は、演算子 'return'で指定された式の値です。 演算子 'return'で指定されたパラメータ値の型が、関数ヘッダで指定された戻り値の型以外である場合、値はヘッダで指定された戻り値の型にキャストされなければなりません。 |
値を返す演算子 'return'を使用する方法の例:
1 2 3 4 5 6 7 8 9 |
<span class="notranslate"> <span class="hl-reserved">bool</span> <span class="hl-identifier">My_function</span> <span class="hl-brackets">(</span> <span class="hl-reserved">int</span> <span class="hl-identifier">Alpha</span> <span class="hl-brackets">)</span> <span class="hl-comment">//ユーザ定義関数の説明</span></span> <span class="notranslate"> <span class="hl-brackets">{</span> <span class="hl-comment">//関数本体の開始</span></span> <span class="notranslate"> <span class="hl-reserved">if</span> <span class="hl-brackets">(</span> <span class="hl-identifier">Alpha</span> <span class="hl-code">></span> <span class="hl-number">0</span> <span class="hl-brackets">)</span> <span class="hl-comment">//演算子 'if'</span></span> <span class="notranslate"> <span class="hl-brackets">{</span> <span class="hl-comment">//演算子の開始 - 'if '本文</span></span> <span class="notranslate"> Alert <span class="hl-brackets">(</span> <span class="hl-quotes">"</span> <span class="hl-string">値は正の値です</span> <span class="hl-quotes">"</span> <span class="hl-brackets">)</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">//標準の関数呼び出し</span></span> <span class="notranslate"> <span class="hl-reserved">return</span> <span class="hl-brackets">(</span> <span class="hl-reserved">true</span> <span class="hl-brackets">)</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">//関数からの最初の終了</span></span> <span class="notranslate"> <span class="hl-brackets">}</span> <span class="hl-comment">//演算子の最後 - 'if '本文</span></span> <span class="notranslate"> <span class="hl-reserved">return</span> <span class="hl-brackets">(</span> <span class="hl-reserved">false</span> <span class="hl-brackets">)</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">//関数からの2番目の終了</span></span> <span class="notranslate"> <span class="hl-brackets">}</span> <span class="hl-comment">//関数本体の終わり</span></span> |
関数の戻り値がvoid型であれば、式なしで演算子 'return'を使うべきです:
1 |
<span class="notranslate"> <b>return;</b></span> <b> </b> <span class="notranslate"> //かっこ内の式のない演算子 'return'</span> |
戻り値なしの演算子 'return'の使用例:
1 2 3 4 5 6 |
<span class="notranslate"> <span class="hl-reserved">void</span> <span class="hl-identifier">My_function</span> <span class="hl-brackets">(</span> <span class="hl-reserved">double</span> <span class="hl-identifier">Price_Sell</span> <span class="hl-brackets">)</span> <span class="hl-comment">//ユーザー定義関数の説明</span></span> <span class="notranslate"> <span class="hl-brackets">{</span> <span class="hl-comment">//関数本体の開始</span></span> <span class="notranslate"> <span class="hl-reserved">if</span> <span class="hl-brackets">(</span> <span class="hl-identifier">Price_Sell</span> <span class="hl-code">-</span> <span class="hl-code">></span> <span class="hl-number">100</span> <span class="hl-code">*</span> <span class="hl-predvars">Point</span> <span class="hl-brackets">)</span> <span class="hl-comment">//演算子 'if'</span></span> <span class="notranslate"> <span class="hl-predfunc">アラート</span> <span class="hl-brackets">(</span> <span class="hl-quotes">"</span> <span class="hl-string">この注文の利益は100,000を超えます</span> <span class="hl-quotes">"</span> <span class="hl-brackets">)</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">//標準の関数呼び出し</span></span> <span class="notranslate"> <span class="hl-reserved">return</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">// Exit関数</span></span> <span class="notranslate"> <span class="hl-brackets">}</span> <span class="hl-comment">//関数本体の終わり</span></span> |
関数の説明に演算子 'return'を含めることはできません。 この場合、関数は最後の演算子が関数本体で実行されると(実行アルゴリズムに従って)自動的に演算を終了します。 演算子 'return'のない関数の記述例:
1 2 3 4 5 6 7 8 |
<span class="notranslate"> <span class="hl-reserved">void</span> <span class="hl-identifier">My_function</span> <span class="hl-brackets">(</span> <span class="hl-reserved">int</span> <span class="hl-identifier">Alpha</span> <span class="hl-brackets">)</span> <span class="hl-comment">//</span> <span class="hl-comment">ユーザ定義関数の説明</span></span> <span class="notranslate"> <span class="hl-brackets">{</span> <span class="hl-comment">//</span> <span class="hl-comment">関数本体の開始</span></span> <span class="notranslate"> <span class="hl-reserved">for</span> <span class="hl-brackets">(</span> <span class="hl-reserved">int</span> <span class="hl-identifier">i</span> <span class="hl-code">=</span> <span class="hl-number">1</span> <span class="hl-code">;</span> <span class="hl-identifier">i</span> <span class="hl-code"><=</span> <span class="hl-identifier">Alpha</span> <span class="hl-code">;</span> <span class="hl-identifier">i</span> <span class="hl-code">++</span> <span class="hl-brackets">)</span> <span class="hl-comment">//サイクル演算子</span></span> <span class="notranslate"> <span class="hl-brackets">{</span> <span class="hl-comment">//サイクル本体の開始</span></span> <span class="notranslate"> <span class="hl-reserved">int</span> <span class="hl-identifier">a</span> <span class="hl-code">=</span> <span class="hl-number">2</span> <span class="hl-code">*</span> <span class="hl-identifier">i</span> <span class="hl-code">+</span> <span class="hl-number">3</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">//代入演算子</span></span> <span class="notranslate"> <span class="hl-predfunc">アラート</span> <span class="hl-brackets">(</span> <span class="hl-quotes">"</span> <span class="hl-string">a =</span> <span class="hl-quotes">"</span> <span class="hl-code">、</span> <span class="hl-identifier">a</span> <span class="hl-brackets">)</span> <span class="hl-code">;</span></span> <span class="notranslate"> <span class="hl-comment">//標準の関数呼び出し演算子</span></span> <span class="notranslate"> <span class="hl-brackets">}</span> <span class="hl-comment">//サイクルボディの終わり</span></span> <span class="notranslate"> <span class="hl-brackets">}</span> <span class="hl-comment">//関数本体の終わり</span></span> |
この場合、関数forは、サイクル演算子forが実行を終了した時点で演算を完了します。 関数実行時の最後の動作は、サイクル演算子の条件テストになります。 サイクル演算子 'for'のヘッダーのConditionがfalseになるとすぐに、コントロールはサイクル演算子の外に渡されます。 しかし、サイクル演算子がMy_function()という名前の関数の本体で実行可能な最後の演算子であるため、ユーザー定義関数はその演算を終了しますが、制御は関数の外に渡されます。この関数は実行のために呼び出されました。