見出し画像

プログラミングの素朴な疑問: 値を返す関数はどこで使うのか?

こんにちは!なるーらぼです。暖かくなったり、急激に寒くなったりと体調を崩しやすい時期ですね。花粉症も出てきて、もうよくわからない季節感を感じています。梅が咲いていたり、メジロがいるのを見ると春はもうすぐそこなのか?と思わなくはありません。
今回は以前に聞かれたことがあります、「値を返す関数やメソッドはなんのために、いつ使うのか?」ということについてお話してみます。

実は、わたしも最初の頃はなんのためにこうした違うものが存在しているのか知りませんでした。その後、わたしは自分でいくつかつくっていくうちに「そういうことか」となりましたので使い分けができるようになりました。

Excelマクロをマクロの記録でつくると、Subプロシージャが自動的に作成されます。

これは値を返さないものです。ですから、ボタンクリックのイベントにしても同様に値を返さないので「どこでつかうのだろう?」と考えるのも無理はないかと思います。値を返すのはFunctionになりますが「値を返すことができる」であり、返さなくてはならないというわけではないのです。このあたりが混乱を招いているものと思います。

値を返すものとそうでないものの大きな違いは「他へ影響を与えるか」という点でしょう。値を返すときは何らかの入力を行って、その結果を求めるという場合になります。例えば「今日は何曜日なのか?」を調べるとき、入力は今日の日付であり出力は入力に対応した曜日ということになります。
逆に「値を返さないもの」のときは何らかのアクションが引き金になり、画面の見た目が変わったりファイルが作成されたりダウンロードされたりという他への影響が発生する場合になります。

サンプルコードを示してみましたが、ScratchだとExcelマクロでいうSubプロシージャしか存在しません。

これは特徴としてほかへ影響を与える操作にしか利用しないから、そして値を返すものはすべて標準で用意されているブロックで対応しているため、もしくは変数を更新して結果を返すようにしているためだと思います。この他、何もせずとも値を返すPowerShellのようなものもありますし、このあたりはプログラミング言語によりけりなのが迷わせるところですね。Excelマクロだとプロシージャと関数とメソッドも似たような感じなのに呼び方が違うというのもわけがわからなくなりますよね。サブルーチンというのもできますし、カオスです。

今回は値を返すものはどこで使うものなのか、ということについて書いてみました。こういうのはなんのためにあるのか?という素朴な疑問がございましたら、コメントなどいただいたらまた投稿してみたいと思います。


この記事が気に入ったらサポートをしてみませんか?