構文:“ Exit Sub”または“ Return” VB.NETサブルーチン内

StackOverflow https://stackoverflow.com/questions/1004657

質問

両方の" Exit Sub"または" Return"同じことを達成するように見える-サブルーチンを終了します。内部での動作に違いはありますか?

つまり、

Private Sub exitNow()
    Exit Sub
End Sub

または

Private Sub exitNow()
    Return
End Sub
役に立ちましたか?

解決

ドキュメントから:

  

SubまたはSetプロシージャでは、ReturnステートメントはExit SubまたはExit Propertyステートメントと同等であり、式を指定することはできません。

このコンテキストでは同じです。

他のヒント

Exit Sub よりも Return を好む傾向があります。時々、 Sub から Function に変更するからです。この場合、 Exit Sub Exit Function に変換できますが、これは以前の機能名(VB 6など)への割り当てがあったことを前提としています。起こる Return はこの状況をキャッチします-メソッドが値を返す必要がある場合、引数なしの Return はコンパイル時に失敗します。

2つのステートメントのIL出力を検査する場合、それらは同じです。ただし、’返品’ ‘ Exit Sub’は、発信者に何かを押し戻すためのものです。 Subでの使用により適しています。

これらはこのコンテキストでは同じです。

ただし、コードの可読性の観点からは、「サブを終了」 " Return"何かの値が出力として使用されていることを示します(サブルーチンの場合はそうではありません)。

  • まず、Proceduresにはsubが付属しています。特定のパラメーターを渡すことも、パラメーターを渡さなくても、特定の値を返さない特定のプロシージャで作業していることを知っておく必要があります。など:
  • something()を印刷します。
  • 整数の階乗を計算する CalcFact(X)
  • 特定のタスクのためにいくつかのプロセスを実行します。

  • 関数は、特定のパラメーターを渡すことによって特定のタスクを達成するようにプログラムされた特定のプロセスであり、ユーザー名とユーザーの検証など、タスク全体を完了するために使用できる値を返す必要があります

短いSubは値を返さず、直接" Print HelloWorld()" を呼び出しますが、関数は次のような処理を行います。

  • ValidUsersNameAndPass(" Johne"、" jOhNe13042019") 'これはブール値を返す可能性があります。
  • ValidUsersNameAndPass(" Johne"、" jOhNe13042019"); //これはブール値を返す可能性があります。

ガード句などの例外がありますが、ほとんどの場合、メソッドが長すぎるという兆候を検討します。

ラムダ式でも同じように動作することを確認したかったのですが、次のように動作します。

Sub test()

    Dim a As Action = Sub() Exit Sub
    Dim b As Action = Sub() Return

    a()
    b()

    MsgBox("Yes they do!") 
 End Sub
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top