投稿者 cupid  (社会人) 投稿日時 2010/7/3 14:56:56
表記について、貴サイトのBBSや、同過去ログなど見ますと、かなり話題にされたようですね。
VB.Netでは、引数にByRefを使うのは出来るだけ止めましょう、という考えはある程度分かります。
が、確か、VB6のときは、ByRefがディフォルトだったんですね。
MSも、ByRefは推奨せず(と書いた所を見たこと無いですが)、と言うと、急に自己批判された?

引数に値を出力したい場合、ByRefにするわけですが、自分の趣味としては、気にしません。
確かに、組織でソフト開発する場合、そういう規約をもうけるのは、理解できなくもありません。
不用意に引数に入れた変数が、いつの間にか値が変っていた、なんて事故を避ける為にか?

かなり昔、Fortranですが、引数に定数を入れたとき、その定数の内容までも変えられた、
そういう言語もありました。しかし今は、VB6でも、そこまでの事は無いようです。
であれば、ByRefが拙いと、大声で言う程の事でも無いように思えます。

ついでに試してみたら、VB2005Expressですが、整数配列を引数に入れて、sub内で内容変更
させると、ByValであっても、変更内容がCall元に戻るのですね。 そもそも、
引数に配列を入れるなんて、ソフトデザインが変と言われるかもしれませんが、可能は可能です。
VB2005Helpには、事情が解説されてますが、VBには言語仕様的に変な所もある、という事かな。
なお、VB6では、ByValで配列全体を引数に設定できませんでした。筋が通っていますね。
(参考)
Private Sub subOutArg(ByVal aTb() As Integer)
  Dim i As Integer
  For i = 0 To UBound(aTb)
     aTb(i) = ...(略)...
  Next i
End Sub