機能概要
プログラミング用語では、 function特定のタスクを実行するステートメントのブロックです。関数はデータを受け取り、処理して、結果を返します。関数は、主に再利用性の概念をサポートするために作成されています。関数を作成すると、同じコードを何度も作成しなくても、簡単に呼び出すことができます。
関数型言語が異なれば、構文も異なり、関数を記述します。
関数を書くための前提条件
関数を書く前に、プログラマーは次の点を知っている必要があります-
関数の目的はプログラマーに知られている必要があります。
関数のアルゴリズムはプログラマーに知られている必要があります。
関数のデータ変数とその目標は、プログラマーが知っている必要があります。
関数のデータは、ユーザーが呼び出すプログラマーに知られている必要があります。
関数のフロー制御
関数が「呼び出される」と、プログラムは関数を実行するために制御を「転送」し、その「制御の流れ」は次のようになります。
プログラムは、「関数呼び出し」を含むステートメントに到達します。
関数内の最初の行が実行されます。
関数内のすべてのステートメントは上から下に実行されます。
関数が正常に実行されると、コントロールは元のステートメントに戻ります。
関数によって計算されて返されるデータはすべて、元のコード行の関数の代わりに使用されます。
関数の構文
関数の一般的な構文は次のようになります-
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で同じ関数をどのように定義できるか見てみましょう。
-module(helloworld).
-export([add/2,start/0]).
add(A,B) ->
C = A + B,
io:fwrite("~w~n",[C]).
start() ->
add(5,6).
次の出力が生成されます-
11
関数プロトタイプ
関数プロトタイプは、戻り値の型、関数名、および引数リストを含む関数の宣言です。これは、function-bodyを使用しない関数定義に似ています。
For Example −一部のプログラミング言語は関数プロトタイピングをサポートし、一部はサポートしていません。
C ++では、次のように関数「sum」の関数プロトタイプを作成できます。
int sum(int a, int b)
Note − 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は同じ署名を持っています。
Note −以降の章で説明する関数のオーバーロードと関数のオーバーライドは、関数シグネチャの概念に基づいています。
クラスに同じ名前で署名が異なる複数の関数がある場合、関数のオーバーロードが発生する可能性があります。
派生クラス関数の名前とシグネチャが基本クラスと同じである場合、関数のオーバーライドが可能です。