今回は、関数の意味を考えてみます。現場のソフトウェア開発者はどちらかといえば、「使える関数の種類」とそれらの「関数の使い方」に興味があると思いますが(参考サイト)、この連載では、あくまでも、"関数ってなに?"、という基本的な疑問への回答を探します。
前回は、"I don't know anything about programming!"という文字列を画面に表示する、きわめて単純なサンプルプログラムを紹介いたしました。そのサンプルプログラムは、次のようなソースコードで構成されています。
main()
{
printf ("I don't know anything about programming!\n");
}
このソースコードは次のような意味を持っています。
"希望する文字列を画面に表示する"
この解釈はきわめて単純そうに見えます。しかし文内には、WindowsやLinuxをはじめとする特定のOS名が一切含まれていません。特定のOSに固有な機能名称は、mainとprintfという関数名の背後に隠されています。これら2つの関数の名前を決めたのは、MicrosoftやSunなどの特定のソフトウェアベンダではなく、プログラミング言語Cの標準化委員会です。このため、上のソースコードは特定OSに依存することなく、多くのOS環境でも利用できます。
C標準化委員会は、その後も検討を重ね、現在では、次のようなソースコードを記述するように定めた仕様書を公開しています。
#include <stdio.h>
int main()
{
printf ("I don't know anything about programming!\n");
return 0;
}
この新しいソースコードは、次のような意味を持っています。
"希望する文字列を表示し、その結果を報告する"
ちょっとした違いですが、時代の進歩が感じられます。関数とは何か。それは私たちの考えを効率的に表現するための道具です。ただし、今回紹介した関数は、プログラミング言語Cが用意している関数(道具)です。この後の連載では、プログラミング言語C++と関数の関係を取り上げますが、表現道具としての関数の位置付けが大きく変化していきます(発想の転換が行われる)。