VBScriptのsubとFunctionの動作の違い

VBScriptの sub と Function の動作の違い

ぶっちゃけ全てのプロシージャをFunctionで書いても問題ないのであまり気にしてなかったけど...。

最大の違いは【戻り値】が扱えるか

sub:戻り値を扱えない
Function:プロシージャ名 = 戻り値 で値を渡せる

デカいね、この違い。
だからFunctionでばかり書いてしまうわけだけど。

subプロシージャの使いどころ

IEブラウジングだったら処理完了まで一貫して行うパーツとか、親元に答えを返さなくていい時が使いどころ。
スクレイピングだったら、処理全体の纏りをSubで書いてその中の細かい処理をFunctionで値受け渡すとか。

'呼出し
hoge 引数1,引数2,引数3
'これでもOK
Call hoge 引数1,引数2,引数3

Sub hoge(引数1,引数2,引数3)
  'プロシージャの動作
End Sub

Callを使った方が判り易さはあるけど、省略して書きたいものだから書かない事が多いですね。

Functionプロシージャの使いどころ

私の場合はsubはほぼ使わず全面Functionで書いてます。

戻り値があるものはFunctionで書く事必須ですが、それ以外は整理整頓しやすい自分流ルールでいいと思います。
「見返してわかりやすい」がプログラムには必要な条件ですから。

▼Subと同じ(戻り値の無い)使い方

'呼出し
hoge 引数1,引数2,引数3 
'これでもOK 
Call hoge 引数1,引数2,引数3 

Function hoge(引数1,引数2,引数3)
 'プロシージャの動作 
End Function

▼戻り値のあるFunctionだけの使い方

'呼出し
Dim backData

backData = hoge(引数1,引数2,引数3)
MsgBox(backData)

Function hoge(引数1,引数2,引数3)
  'プロシージャの動作
  hoge = "fugafuga"
End Function

※こう書くとメッセージボックスに fugafuga が表示される。

Functionで複数の戻り値を渡す

ここら辺はPHPとかと同じで、基本的に配列に入れて返します。

'呼出し
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じゃね?

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください