VBScriptのsubとFunctionの動作の違い

VBScriptの sub と Function の動作の違い
ぶっちゃけ全てのプロシージャをFunctionで書いても問題ないのであまり気にしてなかったけど…。
最大の違いは【戻り値】が扱えるか
sub:戻り値を扱えない
Function:プロシージャ名 = 戻り値 で値を渡せる
デカいね、この違い。
だからFunctionでばかり書いてしまうわけだけど。
subプロシージャの使いどころ
IEブラウジングだったら処理完了まで一貫して行うパーツとか、親元に答えを返さなくていい時が使いどころ。
スクレイピングだったら、処理全体の纏りをSubで書いてその中の細かい処理をFunctionで値受け渡すとか。
1 2 3 4 5 6 7 8 |
'呼出し hoge 引数1,引数2,引数3 'これでもOK Call hoge 引数1,引数2,引数3 Sub hoge(引数1,引数2,引数3) 'プロシージャの動作 End Sub |
Callを使った方が判り易さはあるけど、省略して書きたいものだから書かない事が多いですね。
Functionプロシージャの使いどころ
私の場合はsubはほぼ使わず全面Functionで書いてます。
戻り値があるものはFunctionで書く事必須ですが、それ以外は整理整頓しやすい自分流ルールでいいと思います。
「見返してわかりやすい」がプログラムには必要な条件ですから。
▼Subと同じ(戻り値の無い)使い方
1 2 3 4 5 6 7 8 |
'呼出し hoge 引数1,引数2,引数3 'これでもOK Call hoge 引数1,引数2,引数3 Function hoge(引数1,引数2,引数3) 'プロシージャの動作 End Function |
▼戻り値のあるFunctionだけの使い方
1 2 3 4 5 6 7 8 9 10 |
'呼出し Dim backData backData = hoge(引数1,引数2,引数3) MsgBox(backData) Function hoge(引数1,引数2,引数3) 'プロシージャの動作 hoge = "fugafuga" End Function |
※こう書くとメッセージボックスに fugafuga が表示される。
Functionで複数の戻り値を渡す
ここら辺はPHPとかと同じで、基本的に配列に入れて返します。
1 2 3 4 5 6 7 8 9 10 11 |
'呼出し Dim backData backData = hoge(引数1,引数2,引数3) MsgBox(backData(0)) MsgBox(backData(1)) Function hoge(引数1,引数2,引数3) 'プロシージャの動作 hoge = array("fuga","hega") End Function |
※こう書くと最初のメッセージボックスに fuga、2つ目に hega が表示される。
その他にも、カンマ区切りの文字列にして受け取り側で split(backData,”,”) という方法もあるけど…CSVに書き出さない限り有用な方法ではないと思います。
戻り値は1つの値として返さないといけない
他のプログラム言語と同じで理解しやすく助かります。
まとめ
書きながら強く思いましたが、やっぱり取り合えずFunctionで書いとけばOKじゃね?
-
前の記事
ECの集客施策の効果測定と季節ワード等の『見える化』が必要だと思う 2020.09.15
-
次の記事
画像枚数を増やすと如実に売上に現れる 2020.09.15
コメントを残す