戻り値の指定、VBとVB.NETでどう違う?

2009年6月11日公開

Visual Basic 6.0以前(以下VB)と、.NET FrameworkのVisual Basic .NET、Visual Basic 2008などのいわゆるVB7以降(以下VB.NET)はどちらも“VB”と名のつく言語ですが、同じ言語ではないということは皆さんもご存知のことでしょう。

VB.NETは、基本的にVBの文法を引き継いでおり、VBからVB.NETに移行した場合でもその大部分において同様の記述を用いることが可能です。しかしながら、互換性を保つ一方で、完全なオブジェクト指向言語として生まれ変わったVB.NETでは、新たな文法が数多くサポートされています。そのような例の1つとしてFunctionプロシージャでの戻り値の指定方法があります。

以下は、VB.NETで記述した「Hello!」という文字列を返す関数ですが、この場合xxxxxxの部分に入るのは、パターンA、パターンBのどちらでしょう?

Function Test() As String
	'以下に文字列(Hello!)を結果として返すコードを記述
	xxxxxx
End Function
パターンA : 
Test = "Hello!"
パターンB : 
Return "Hello!"

実は、どちらでもコンパイルが通り実行可能です。

タネ明かしをすると、パターンAはVBでも同じように記述することが可能ですが、パターンBはVB.NETでサポートされた新しい書き方です。

C#の場合を見てみますと、

string Test()
{
	return "Hello!";
}

という書き方となり、パターンAのように関数名を利用して戻り値を設定する方法はサポートされていません。

VBからVB.NETへ移行してきたという経歴から、VB.NETでもパターンAで記述しているという方も少なくないと思いますが、実はVB.NETではパターンBの書き方が推奨されています。

その理由は以下のとおりです。

参考サイト

開発者はどう使い分けている?

戻り値の指定方法に関するアンケートを2009年5月28日に配信したPowerNews 280号で行いました。
回答者の皆さまからいただいたコメントを紹介します。

皆さんからいただいたコメント

returnは使わなくなりました。 プログラム途中で使うと、修正が多くなってきたときに分岐が多くなり不具合の原因にもなります
最初はTest=だったんですけどね。←最初にみたサンプルがそうだった。でも、あとでReturnがでてきて混乱というか困惑した記憶があります。(元はCOBOLとかなので数年前の話ですが)で、しっくりくるのがReturnだったので、いまはReturnです
TestならVB6、Returnなら.NET。普段使用してるのはどっちか聞きたいんだろうけど…
現在、97年に納めた物件(VB5!)のリファインにあたってます。“Test=”のコードがそこかしこに…
言語によって変わります。 VB6ならTest = "Hello!"ですが、 .NETとかだとReturn "Hello!"になります
.NetプログラマならReturnが必須でしょう!とは言え、VB6時代の人がいまだに「Test = "Hello!"」と書きますね…
Return と書きたいのですが、業務で使用することが一番多いのは、Excel 2003のVBAのため、Test="Hello!"と書かなければならないことが多いです。
VB6の時は「Test = "Hello!"」、 VB.NETの時は「Return "Hello!"」と使い分けています。最近VB6とVBAとVB2005を行ったり来たりしてるので
VB5、VB6のころはTest = "Hello!"でしたが、 .NETになってからはすべてReturnで記述しています。JavaやPHP、C++と合わせる意味でもこのほうが気持ちが良いですね
Test = "Hello!" だと、関数名が変わったとき修正しなければならないから
どちらでも間違いではなく、どちらもよく見かけます。私個人の趣味でいうと、Retuen(返り値)として記述した方が 解りやすく他の人がプログラムを読んだ際に 勘違いが少ないと思っています。
その時のプログラムの都合により使い分けている
どちらでも良いけど、プログラム内では統一すること
どっちもありでは…
Return "Hello!" このような書き方ができたなんて十数年この世界にいますが、知らなかった…ハズカピィ
頭の中はVB6なんですが、 .Netでもコレ(Test =)でよかったかな?
奥深い何かがあるのでしょうか…?
いっつも悩みます…。正解が知りたいです
Test = "Hello!"って、VB6以前しか通用しないのでは?
VB2からの世代ですので

関連記事

  1. » どう使い分ける?値渡しと参照渡し
  2. » どう使い分ける?文字列の連結方法