\r\n\r\n
プログラミングの最も基本的な要素の1つが関数です。ごく簡単なプログラムであれば、関数を使わなくても書けますが、「helloworld」デモ以外のものは、いずれ関数の利用が必要になるかもしれません。
なぜ関数が多くのプログラミング言語の基礎になっているのか、不思議に思ったことはありませんか?なぜそれが重要なのか、プログラマーにとって何が必要なのかを見ていきましょう。
プログラミングにおける関数とは、簡単に言えば、特定のタスクを実行するコード群のことです。言語によっては、サブルーチンやプロシージャと呼ばれることもあります。
関数を定義したら、プログラムの他の部分と同じように、関数の中にコードを入れることができます。関数に名前を付け、受け取るべきパラメータを定義することで、関数に情報を渡し、何らかの結果を返すことができる。関数は再利用可能なので、一度書いた関数はプログラム中のどこからでも呼び出すことができます。
では、関数は便利ですが、何に使うのでしょうか?
プログラミングの初級クラスでは、関数を「ブラックボックス」と表現することが多い。つまり、プログラマーが関数を呼び出すとき、その中のコードが実際に何をするかは気にせず、結果だけが必要なのだ。
例えば、テキストファイルから大きな数値を読み込んで、そのパターンを計算するような関数を書いた場合。この関数は、数字で埋め尽くされたテキストファイルを入力として受け取り、結果として数字を出力するということさえ知っていれば、どんなプログラムでもそれほど問題なく使うことができる。
しかし、関数がコードをカプセル化する方法はこれだけではなく、プログラマーがコードを明確にセグメントに分割することも可能です。
主関数は数十行のコードで済むが、複数の関数を呼び出し、その関数を通じて複雑な操作を行うことができる。これが、オブジェクト指向プログラミングの核心である。また、大きなプログラムを小さく分割して、複数の人が作業できるようにすることも有効です。
あるタスクを実行するために何らかのコードを書くと、そのコードをプログラムの中で何度か使うことになる可能性があります。
必要なコードを複数個所にコピー&ペーストするのはNGです。プログラムが複雑になるだけでなく、エラーの発生する場所も増えてしまいます。元のブロックで何かを変更した場合、それを別の場所に貼り直すことを忘れてはなりません。
機能でこの問題を解消します。これにより、プログラム内の他の場所でコードを再利用することが容易になります。一度定義した関数は、いつでも呼び出すことができ、同じように動作することを確認することができます。これにより、プログラムの人気の2つの特徴である時間の節約と複雑さの軽減を実現しました。
現在、多くの企業では、あるプログラマーが書いた関数を、社内の他のプログラマーが他のプロジェクトで使うことがある。
機能が自己完結しているため、携帯性に優れています。それらを適切に再利用することで、作業の重複を減らし、プログラミングリソースをより効率的に使用し、全社的な標準の確立に役立てることができるのです。
多くのプログラマーは、スパゲッティコードのデバッグの苦しみを知っています。小さな構造のためにほとんど起こりえない、混乱した混乱。明確な機能がないと、プログラムが全体に飛び火してしまうのです。そのため、デバッグがしにくく、入ってきたばかりの人にとっては、大変な苦労を強いられます。
すべてが関数に明確に分割され、プログラマーはこれらの関数が正しく動作していることをユニットテストで確認することができます。問題を特定するためにプログラム全体をシーケンス化する必要がなく、問題を関数に分離することができるのです。
関数も可読性を高める。きれいなコードのセットは、保守やフォローを容易にするために大いに役立ちます。GOTOステートメントを難読化するという方法もありますが、これは現代のプログラミングでは非常に不人気な方法です。
Wikipediaの簡単な例で、GOTO文から始まり、構造化されたスタイルで、この違いを見てみましょう。
1 i=02 i+=13 PRINT i; "squared=";i*i4 IF i>100 THEN GOTO 65 GOTO 26 PRINT "Program Completed."7 END1 FOR i=1 TO 1002 PRINT i;"squared=";i*i3 NEXT i4 PRINT "Program Completed."5 END上記で抽象化について説明しましたが、関数はステップと実際のデータを分離するのに役立つということは重要なポイントです。期待する関数パラメータさえ渡せば、データが何であろうと構わないのです。関数の実行ごとに一時変数を作成し、結果を返した後にそれを破棄します。これにより、名前空間が明確になり、"x "のような短期間の変数名を再利用することができる。
重要なデータを関数の外に置くことで、不要な変更を防ぐことができ、現代のプログラミングでは賢い方法と言えます。
通常、関数というと、ユーザーが作成した関数を指しますが、関数の種類はそれだけではありません。どのプログラミング言語にも、自分で作らなくても使える関数があります。
例えば、どの言語を使っていても、基本的なアルゴリズムや画面に文字を出力する関数、それに類する作業を書く必要はない。このような基本的な操作をコンピュータに指示しろと言われたら、どれだけ時間がかかるか想像がつきますか?
プログラミング言語がなぜ関数を使うのか、なぜ関数が重要なのか、おわかりいただけたでしょうか。関数を使う最大の理由は、プログラムをより扱いやすいパーツに分割することができるからです。そうすると、プログラムの管理がしやすくなり、テストがしやすくなり、再利用がしやすくなります。
関数がなければ、プログラムは論理的な順序で流れず、ユーティリティを分離することもできない反復的なコードを多く持つことになります。これでは、管理、テスト、デバッグが悪夢のようになってしまいます。それを使ってくれるプログラミング言語に感謝です
プログラミングの基本については、whileループの仕組みの解説をご覧ください。