Akira's Blog

神奈川在住のITエンジニアの雑記です。主にプログラミング(Perl, Java など)やネットワーク技術についての小ネタを、ちょっとずつ書いていきます。

関数の処理結果を関数外に伝える方法

プログラミング一般な話として、主題の件について纏めてみる。関数の処理結果を関数外に伝える方法としては、戻り値で伝える方法、引数で伝える方法、グローバル変数で伝える方法、外部ファイルで伝える方法がある。それぞれについて思うところを書いていく。

 

  • 戻り値で伝える方法:この方法は、数学の「関数」と合っていて、直感的で分かりやすい。ただ、関数の戻り値は通常1つしか指定できないので、もし複数項目を戻り値で返したい場合は、それ用の構造体orクラスを用意する必要がある。この方法を使うとソースが見やすくなるので、基本的にはこの方法を使えば良いと思う。

 

  • 引数で伝える方法:ネットワークプログラミングで使用されるC言語のreceive関数のように、関数内で、受け取った引数に処理結果を入れる方法である。インプットである引数にアウトプットである処理結果を入れるので、直感に合わず、ちょっとソースが見にくくなるかもしれない。自分としては、これを使わないとソースが書きにくい場合のみでしか使わない。

 

  • グローバル変数で伝える方法:これは簡単な方法であるが、よく言われるように、グローバル変数を多用すると、それがどこから変更されているのか分かりにくくなるので要注意。関数の処理結果がいろんな箇所から参照される必要がある、つまり、処理結果がグローバル変数であるべき時に使用すると良いと思う。

 

  • 外部ファイルで伝える方法:これは上記の3つとは毛色が異なり、処理結果をメモリ上ではなく、DBやログなどの外部ファイルに格納する方法である。処理結果を (一時的なメモリ領域ではなく) 永続化して残したい場合に使用する。

 

以上、思うところをざっと書いてみたが、ケースバイケースで適切な方法でコーディングしていきたい。