ログイン
kid's world

関数を使う

今まではmain関数のみでプログラムを作成してきたが,複数の関数を作成することによって数々のメリットが生まれる。今回は関数の作成について解説する。


はじめに

前回は,ファイルに対してデータの読み書きをする方法について解説した。

ファイルはファイルポインタを介してアクセスする。そのポインタは「開く」操作と「閉じる」操作によって作成,破棄を行い,それぞれfopen関数,fclose関数を使う。テキストファイルを扱うならば,今まで画面やキーボードに対して行ってきた処理と同じ要領で扱えばよく,fprintf関数やfscanf関数などを使う。バイナリファイルの場合は,fread関数やfwrite関数で直接的に変数のデータ(メモリの内容)を読み書きすればよい。

今回のお話

今回は関数の作り方について解説する。もちろんプログラムを作る際に複数の関数を使わず,main関数1つだけで作ることはできる。それなのになぜ関数を使うかといえば,「プログラムのサイズを縮小」でき,プログラマの「負担を軽減」することができるからだ。ほかにもいろいろな理由があるが,とくに注目すべきはこの2点である。

関数にはいろいろな種類がある。引数をとらず戻り値も返さないような関数もあれば,引数を使って複数の値を一度に返す関数もある。今回は,それらさまざまな種類の関数の作り方と,それにまつわるいくつかの概念を説明する。

関数を使うメリット

関数を使うことによってどのようなメリットが生まれるのだろうか? まず,すぐにその効果がわかるのは,1つのプログラムの中で「同じ作業を繰り返す」ことが多いときに,それを1つの関数にまとめることで「コーディング量を減らすことができる」というメリットである。何度も同じことを書かなくても,1つの関数に書いてしまえば,必要なところで「その関数を呼び出す文」をたった1行書くだけで済んでしまうのである。そうすればプログラムは格段に見やすくなるし,かつ,その重複する機能の中で何らかの機能拡張を行おうと思ったときでも,関数の内部を改良するだけでよい。関数を使うことでコードを共有することができ,結果的に実行可能ファイルのサイズを比較的小さくすることができるのである。もし,関数を使わなかった場合は重複するすべての箇所を同じように変更していかなければならず,バグが紛れ込む可能性も高くなり,効率的ではない。

重複した部分がなかったとしても,長いプログラムを複数の関数に分けるというのもよい方法だ。とくに,長すぎるmain関数はプログラムの実行の流れがわかりにくく,たとえ自分が理解できたとしても,ほかのプログラマがとうてい理解できない代物になりやすいのである。「自分だけが見るソースコードだから……」というのもよくない(最終的に修正するのはどうせ自分自身なのだ)。あとから見直したときに何を書いているのかわからず,「結局最初から作り直したほうがよい」となるのはよくあることである。

関数の基本的な使い方

ここでまず,関数の使い方の基本中の基本について,ざっと眺めてみよう。

関数は引数をいくつかとることができる。引数に変数などの値を渡して呼び出すことによって,関数はその値を元にして処理を行うことができる。たとえば,printf関数は文字列を引数にとり,その文字列を画面に表示する。関数は内部での処理を終えたあとで値を返すこともできる。それら引数や戻り値の型は,あらかじめ決まっている。関数は,「関数名に続けてカッコを書く」ことで呼び出すことができる。引数がない場合も,必ずカッコを書かなければならない。たとえば引数も戻り値もない「foo」という関数があった場合,以下のようにして呼び出す。

foo();

関数呼び出しはプログラム中では「式」として扱われる。したがって,計算式の中で関数の呼び出しを書くことも可能だ。

たとえば,printf関数は表示した文字数を返すので,

i = printf("test") + 10;

とすると,int型変数iには4+10で14が入る。


関数を作る」へ進む

広告


©Toshio Koide 1996-2007.

目次

リンクについて

リンクは御自由にどうぞ。

メール

mail.gif

広告