web-dev-qa-db-ja.com

構文:VB.NETサブルーチンの「Exit Sub」または「Return」

「Exit Sub」または「Return」はどちらも同じことを達成しているようです。サブルーチンを終了します。カバーの下での動作に違いはありますか?

あれは、

Private Sub exitNow()
    Exit Sub
End Sub

または

Private Sub exitNow()
    Return
End Sub
53
Jeff

ドキュメントから:

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

そのため、このコンテキストでも同じです。

64
RBarryYoung

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

14
Mike

2つのステートメントのIL出力を検査する場合、それらは同じです。ただし、「return」は発信者に何かをプッシュするためのものであるため、厳密に言えば、「Exit Sub」はSubでの使用に適しています。

6
dipan chikani

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

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

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

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

要するにSubは値を返さず、直接"Print HelloWorld()"と呼びますが、関数は次のようなことを行います:

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