関数の戻り値について学ぼう
前回は自作関数を学びました。
プログラム全体で、何度も実行される処理を部品化して、簡単に呼び出して実行出来るようにする仕組みでした。
因みに前回説明したものは、正確にはSubプロシージャと呼びます。
このSubプロシージャでは、メインのプログラムでそのSubプロシージャが呼ばれ、Subプロシージャ内の処理が実行されます。
ただ、この様に部品化されたプログラムをただ呼び出せるだけでは困る場合があります。具体的には、部品化されたSubプロシージャ内で処理された結果をメインのプログラム側に戻してほしいといったケースです。
前回説明したSubプロシージャでは、呼び出し元のプログラムに結果や値を返すことはできません。メインプログラムから一方的に呼び出されて実行されるだけです。逆に処理結果をメインプログラムに戻せる関数も作れます。それを
Functionプロシージャ
と言います。
文字の説明だけで理解するのは難しいので、さっそくプログラムで例を挙げてみましょう。
まず、Subプロシージャを使った足し算をしてくれる簡単なプログラムを用意します。
Call ValueSum(1,2) Sub ValueSum(a,b) Dim x x = a + b Msgbox(x) End Sub
これはValueSumという名称のSubプロシージャを作成しています。ValueSumは第一引数と第二引数を持ち、この引数で渡された値を足して、その結果をメッセージボックスで表示する処理を行います。
一行目でValueSumをCallで呼び出して一つ目の引数に値1を、二つ目の引数に値2を渡して実行しています。
この一連の処理をFunctionで作ると、より汎用的になります。
ではFunction化したプログラムを作ってみましょう。
Function化コード
Msgbox ValueSum(1,2) Function ValueSum(a,b) Dim x x = a + b ValueSum = x End Function
これは実行してもらえればわかりますが、メッセージボックスに計算結果を表示するという振る舞いはSubプロシージャのプログラムと同じです。各行ごとのプログラムの解説をしていきます。
1行目は後から説明するので飛ばします。
3行目
Function ValueSum(a,b)
ここからがFunctionプロシージャの作成処理です。
Functionプロシージャを作成する場合の構文は以下です。
Function 自作関数名(関数の引数名)
Subプロシージャの時と同様に、Functionプロシージャも終わりの位置を定義してあげる必要があり、
End Function
を最終行に設定します。
今回のサンプルプログラムで言えば、ValueSumという名称のFunctionプロシージャを定義して、引数には、aという名称の引数と、bという名称の引数を定義しています。
後、引数が複数ある場合は , (カンマ)で区切ります。引数の数はいくつでも設定出来ますし、引数を使わないことも可能です。この辺りはSubプロシージャと同じです。
4行目、5行目
Dim x x = a + b
まず4行目で変数 x を宣言しています。
そして5行目で引数 a と 引数 b を 足して、変数 x に足した結果を代入しています。
6行目
ValueSum = x
ここが今回の最大のポイントです。
3行目で定義したFunctionプロシージャ名に対して、変数の様に計算結果 x を代入しています。
これが、当解説の冒頭で記載した、処理結果を戻す行為になります。
この処理結果が戻された値を「戻り値」と呼びます。
Subプロシージャで同様の記述をしてもエラーになります。Functionプロシージャでしか戻り値の設定は出来ません。
1行目
Msgbox ValueSum(1,2)
ここではメッセージボックスの引数として、Functionプロシージャの名前とその引数を設定しています。
Subプロシージャを呼ぶときには Call を使って呼んでいましたが、Functionの場合は、呼び出して処理結果を呼び出し元のプログラムに返してくれるので、その返してきた値を変数の様に使用して、さらに変数に代入したり、今回のようにメッセージボックスの引数として使用したりすることが出来ます。
今回のFunctionの説明は理解出来ましたでしょうか?
このFunctionはとっても重要で、プログラミングを上達させるうえで、このFunctionをどう上手く活用できるかによって上達具合は大きく変わってきます。
今回のサンプルプログラムでは、引数の二つの値を足して、その結果を返す関数を作成しましたが、プログラミングをしていると、今回の様な単純な計算処理などを汎用的な関数として作成し、メインの処理から分離をさせることで、メイン処理の可読性を向上し、メイン処理のプログラム行数を減らし、後からプログラムの修正が必要になった場合も関数側処理だけ直せばよいといったメンテナンス性の向上が見込めます。
是非活用してください。
また時間もよろしくお願いします。
↓次回の記事はこちら
↓前回の記事はこちら
↓Windows10環境で文字化けする場合はこちら
Windows10のメモ帳の既定の文字コードは、Windows10のバージョン1903から「UTF-8」になりました。
VBScriptはUTF-8に対応していない為、アルファベットは問題ないのですが、日本語については文字化けします。
その為、Windows10の場合はファイルを保存する場合に、文字コードを「ANSI」に変更して保存してください。