Functional-programming-functions-overview

提供:Dev Guides
移動先:案内検索

機能の概要

プログラミング用語では、*関数*は特定のタスクを実行するステートメントのブロックです。 関数はデータを受け入れて処理し、結果を返します。 関数は、主に再利用性の概念をサポートするために書かれています。 関数を作成すると、同じコードを何度も作成することなく、簡単に呼び出すことができます。

異なる関数型言語は、異なる構文を使用して関数を記述します。

関数を書くための前提条件

関数を書く前に、プログラマは次の点を知っている必要があります-

  • 機能の目的はプログラマーに知られている必要があります。
  • 関数のアルゴリズムはプログラマーに知られている必要があります。
  • 関数データ変数とその目標は、プログラマーに知られている必要があります。
  • 関数のデータは、ユーザーが呼び出すプログラマーに知られている必要があります。

関数のフロー制御

機能が「呼び出される」と、プログラムは機能を実行するために制御を「転送」し、その「制御の流れ」は以下のようになります-

  • プログラムは、「関数呼び出し」を含むステートメントに到達します。
  • 関数内の最初の行が実行されます。
  • 関数内のすべてのステートメントは、上から下に実行されます。
  • 関数が正常に実行されると、制御は開始元のステートメントに戻ります。
  • 関数によって計算されて返されたデータは、元のコード行の関数の代わりに使用されます。

関数の構文

関数の一般的な構文は次のように見えます-

returnType functionName(type1 argument1, type2 argument2, . . . ) {
  //function body
}

C ++での関数の定義

オブジェクト指向プログラミング言語であるC ++で関数を定義する方法を理解するための例を見てみましょう。 次のコードには、2つの数値を追加し、その結果を出力として提供する関数があります。

#include <stdio.h>

int addNum(int a, int b);    //function prototype

int main() {
   int sum;
   sum = addNum(5,6);        //function call
   printf("sum = %d",sum);
   return 0;
}
int addNum (int a,int b) {   //function definition
   int result;
   result = a + b;
   return result;            //return statement
}

それは次の出力を生成します-

Sum = 11

Erlangで関数を定義する

関数型プログラミング言語であるErlangで同じ関数を定義する方法を見てみましょう。

-module(helloworld).
-export([add/2,start/0]).

add(A,B) ->
   C = A + B,
   io:fwrite("~w~n",[C]).
start() ->
   add(5,6).

それは次の出力を生成します-

11

関数プロトタイプ

関数プロトタイプは、return-type、function-name、arguments-listを含む関数の宣言です。 これは、関数本体のない関数定義に似ています。

-一部のプログラミング言語は関数プロトタイプをサポートしていますが、一部はサポートしていません。

C ++では、このような関数「sum」の関数プロトタイプを作成できます-

int sum(int a, int b)

-Python、Erlangなどのプログラミング言語は関数プロトタイプをサポートしていません。関数全体を宣言する必要があります。

関数プロトタイプの使用とは何ですか?

関数のプロトタイプは、関数が呼び出されるときにコンパイラーによって使用されます。 コンパイラはこれを使用して、正しい戻り型、適切な引数リストが渡されること、およびその戻り型が正しいことを確認します。

関数シグネチャ

関数シグニチャは、パラメータの数、パラメータのデータ型、および外観の順序が同じ順序である関数プロトタイプに似ています。 例-

void Sum(int a, int b, int c);        //function 1
void Sum(float a, float b, float c);  //function 2
void Sum(float a, float b, float c);  //function 3

Function1とFunction2には異なるシグネチャがあります。 Function2とFunction3には同じシグネチャがあります。

-後続の章で説明する関数のオーバーロードと関数のオーバーライドは、関数シグネチャの概念に基づいています。

  • クラスに同じ名前で異なるシグネチャを持つ複数の関数がある場合、関数のオーバーロードが可能です。
  • 派生クラス関数がその基本クラスと同じ名前とシグネチャを持つ場合、関数のオーバーライドが可能です。