関数 基礎編第15回


20140218

プログラミングには関数(function)が欠かせません。プログラミングの大部分は関数の定義と使用で成り立っています。

関数はプログラミング以外にも、MS社のExcelを始めとする表計算アプリケーションで使用されています。合計を計算するSUM関数や平均を計算するAVERAGE関数など多数の関数が用意されています。このブログをご覧のほとんどの方は、これらの関数を一度は使用した経験があると思います。今回はプログラミングにおける「関数」の基本について説明します。

関数とは

何らかの値を与えて処理を行い、結果の値を返す機能」です。前回、サブルーチンと関数はほぼ同義であると書きました。どちらも「いくつかの処理をまとめて特定の機能を実現するためのプログラム要素」です。厳密には、サブルーチンは「メインルーチンから呼び出されるルーチン」を指し、関数はサブルーチンの一種です。例えば、MicrosoftのComputer Dictionaryでは、次のように定義されています。

function n. 1. The purpose of, or the action carried out by, a program or routine. 2. A general term for a subroutine. 3. In some languages, such as Pascal, a subroutine that returns a value. 
"function" Microsoft Computer Dictionary, Fifth Edition, 2002

プログラム言語により区別する(定義の3)ものもあれば、区別しない(定義の2)ものもあります。さらに名前が次のように異なる場合もあります。

  • C/C++/C#:サブルーチンはすべて関数(メンバ関数)。
  • Java:サブルーチンと関数はすべてメソッド(method)。ただし、関数と呼ぶ場合もある。
  • Pascal:戻り値があるサブルーチンは関数、ないものはプロシージャprocedure)。
  • VB/VBA:戻り値があるサブルーチンはFunctionプロシージャ、ないものはSubプロシージャ
  • 秀丸マクロ:引数があるサブルーチンは関数、ないものはキーワード。これらはシステムにより用意されている。ユーザが作成できるのはサブルーチン。

このようにプログラミング言語によって呼び方が異なっています。特定の言語を学ぶ際は、その言語の仕様に従って区別するようにしてください。一般的なプログラミングの本では区別されていない場合がよくあります。 一般的な話の中で厳密に区別をするのは非常に難しいので、この基礎講座ではできるだけ「関数」で統一するようにします。「メンバ関数」や「メソッド」については、オブジェクト指向で説明する予定です。

関数の機能

数学での関数はよくブラックボックスに例えられます。プログラミングの関数も同じように、ブラックボックスに値を入れると処理が行われ、結果が返されます。通常ブラックボックスの中身を知る必要はなく、そのブラックボックスの役割(機能)、何を入れることができるか(引数)、何が返されるか(戻り値)を知っていれば誰でも使えます。

ExcelのSUM関数を例に、もう少し説明します。 E3のセルからE10のセルまでの値を合計するには、「=SUM(E3:E10)」と入力します。もしSUM関数を使用しないで計算する場合、「=E3+E4+E5+E6+E7+E8+E9+E10」となり、セルの数が多くなればなるほど式が長くなります。このような関数がなければ、複雑な計算式を自分で記述しなければなりません。一般によく利用される式でも高度な数学などの知識が必要になりますし、毎回記述するのは大変な作業になります。

幸いなことに、Excelには頻繁に使用される一般的な計算や処理を行うための関数(財務関数、数学/三角関数、データベース関数、文字列操作関数など)が用意されており、誰もが簡単に計算や処理を何度でも行うことができます。何行にも渡る処理を1行で記述することができますし、必要な値を指定するだけで計算結果を得ることができます。

プログラミング言語にはさらに多数の関数が用意されています。これらは「ライブラリ関数」 や「組み込み関数」などと呼ばれます。あらかじめ用意された関数を使うだけでも十分にプログラミングは可能ですが、必要な機能がない場合は自分で関数を作成したり他の人が作成した関数をしたりすることもできます。

このように関数には、次の機能があります。

  • 頻繁に使用される処理を利用しやすくする
  • 複雑な処理を簡単に扱えるようにする

ただし、プログラムの保守性や視認性を考えて、通常は「1関数につき1機能」とします。

関数の書式

プログラム言語により書式が異なりますが、C/C++/C#では次のような書式になります。

関数は式の中で使用します。

例: 変数 = 関数(代入式)

Javaの場合もほとんど同じです(クラスの回でもう少し説明します)。

VB/VBAの書式も挙げておきます。

呼び出し方は

C/C++/C#での関数の例

例:指定した値を10倍して返す関数

この例ではmain関数というものを使用しています。これはC/C++/C#の本体となる特別な関数です。

このmain関数の中にプログラムを記述していきます。つまりC/C++/C#で書かれたプログラム自体が関数ということです。

以前は「void main()」とすることがほとんどでしたが、最近は「int main()」を使用するようになっています。「void」は「何もない」ことを意味する型で、引数や戻り値に使用されます。voidを指定した場合、「return 0;」の行は不要です。

まとめ

今回、関数について説明しましたが、ここで説明したことはあくまでも基本的な内容の一部に過ぎません。さらに理解を深めるには、個々のプログラミング言語で学んだ方がよいかと思います。

サブルーチンと関数は分かりにくいかと思いますが、理解するには実際にプログラムをいくつも書く必要があります。最初のうちは、何となく感じが掴めることができれば十分だと思います。

「Function」には関数の意味の他に「機能」や「ファンクション」(命令)などの意味があります。IT関連の案件では、同一文書内でそれぞれ異なった意味で使用されることがよくあります。これを区別するのが非常に困難な場合がありますが、しっかりと文意をくみ取って判断してください。

次回は変数と関数の「スコープ」について説明する予定です。

では、また。

コメントしてみる