Web
Analytics

社畜ゲートウェイ

京成・京急を中心に取り上げる阪急ファンのブログです。日本一遅い速報を届けます。

MENU

【スポンサーリンク】

【VB.NET】SUBとFUNCTIONの違い

【スポンサーリンク】

f:id:neko_britannia:20200417145314j:plain

何かかっこいいフリー画像

現場の若手(主に新卒)からよく質問あるのが、VB.NETで「Sub」と「Function」の違いが分からないということです。懇切丁寧に毎回説明するよりも、

OK Google!「VB.NET Sub Function 違い」を教えてくれないか?

みたいに検索してもらって、この記事読んでもらった方が良いかなと言うことで記事にします。

SubとFunctionの違い

決定的な違い…戻り値の有無!

シンプルに述べると「戻り値があるorない」です。そんなことは調べれば幾らでも出てきます。「それじゃあ何のことか分からないじゃないか!」と言われる方も多いかもしれませんが、違いは戻り値の有無なんですよ。慣れて下さいとしか言いようがありません。実際にソースコードを書いてみます。

'Sub
Private Sub TestSub()
'TestSub
End Sub

'Function Private Function TestFunction() As String
'TestFunction
End Function

見た目の違いとしては、Functionには「As String」というのが書かれていて、Subにはそんなものは無いと言うくらいでしょうか。この「As String」と言うのが戻り値の型で、このFinctionはString型の値を返しますよ、という意味です。Subは戻り値が無いので、戻り値の型なんてものは考えなくて良いです。

 

実際のソースコードで確認

さて、戻り値の有無で何が出来て何が出来ないのかと言うと、ソースコード的にはこんな感じです。VisualStudioでWindowsFormアプリケーションを作成し、ボタンを追加した後に、このソースコードを貼り付けてみて下さい。SubとFunction、それぞれの関数を呼び出しているソースです。

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim strTest As String = Nothing
strTest = TestSub()
strTest = TestFunction()
End Sub

Private Sub TestSub()
'TestSub
End Sub

Private Function TestFunction() As String
'TestFunction
Dim sRet As String = Nothing
sRet = "OK"
Return sRet
End Function
End Class

貼り付けると、VisualStudio上ではこんなことになっています。

f:id:neko_britannia:20200417144304j:plain

はい、これが戻り値の有無の話です。「strTest」という変数に、値を代入しようとしていますね。TestSub()は何か怒られてますが、TestFunctionは何も言われてません。関数を呼び出して、変数に代入しようとするときに、怒られるのがSubで、怒られないのがFunctionです。Functionは戻り値を持つので、関数の結果を変数に代入することが出来ます。

 

もうちょい分かりやすく

えーと、昔からよく言われるのが話す内容がようわからんということですね。今回の件を端的に、シンプルに、そしてエレガントに言うと…

  • Sub:一方的に話かけるだけ(戻り値無い)
  • Function:返事がある前提で話かける(戻り値ある)

ということでしょうか。私は一方的に話かけるのでSub人間ですね。みなさん、Sub人間とか言われない様に気を付けて下さいね。

 

編集後記

世の中のVB.NETプログラマーが救われますように祈っています。こんなノリでVB系の記事を書いて行こうと思います。