構文:“ Exit Sub”または“ Return” VB.NETサブルーチン内
-
05-07-2019 - |
質問
両方の" 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