web-dev-qa-db-ja.com

VB6のSubとFunctionの違いは何ですか?

私はいくつかの古いVBコードを通過し、これらのような関数定義に遭遇します-

 Private Function ExistingCustomer(Index As Integer, Customer As String) As Integer

 Private Sub cmdCustomerList_Click()

違いは何ですか?

48
CodeBlue

関数は値を返しますが、Subは返しません。とても簡単です。

110
LeleDumbo

関数を式で使用することもできます。サブルーチンはできません。関数は、サブルーチンよりもコードを読みやすくするのに役立ちます。

関数が読みやすさを向上させる方法の例を次に示します。

If AccountIsLocked("JJones") then Msgbox("This account is locked")

この関数はどこかで定義されます

public function AccountIsLocked(UserId as string) as boolean
   dim usr = uow.AccountRepository.UserInfo(UserId)
   return usr.locked
end function

これは同じ例ですが、サブルーチンでコーディングされています。

CheckIfAccountLocked("JJones")

そして、他の場所でこのサブが定義されています:

public sub CheckIfAccountLocked(UserId)
       if uow.AccountRepository.UserInfo(UserId).locked then
          msgbox("Account is locked")
       end if
end sub

また、値のチェックはアクションから分離されていることに注意してください-これは職務の分離に貢献します。この機能は再利用に役立ちます。

VB6では、括弧を管理するいくつかの奇妙なルールがあります。サブルーチンにパラメーターがない場合、括弧は必要ありません(Visual Studioが括弧を削除する可能性があると思います)。これを回避する1つの方法は、サブの前にキーワード「Call」を追加することです。

Call CheckIfAccountLocked()

CheckIfAccountLocked
18
D. Kermott

関数では、ブール値、文字列、その他のデータデータ型として値を返すことができます。

しかし、subは何も返しません。与えられたコードと命令を実行するだけです。これらもメソッドと見なされます

Subはコントロールのイベントでも使用され、これらのイベントも値を返しません。

たとえば、コマンドボタンのクリックイベント:Private sub cmd_click()

終了サブ

4
Uzair Ashraf

どちらもコードを記述するセクションですが、関数は値を返す必要があります。たとえば、複雑な数学手続きを何度も実行する必要があるプログラムがある場合、単純に関数を作成し、そこに複雑な数学コードを入れて、計算を行う必要があるときはいつでも関数を呼び出すことができます。これが私がそれをうまく説明したかどうか確信が持てないことを願っています。

3
JoshP97

VB6のSubとFunctionの違いは何ですか?

"sub"は何らかのアクションを実行できます。 「sub」は値を返しません。

例:

Form_Load()

function」も何らかのアクションを実行できますが、呼び出し元のポイントに値を返します。つまり、「関数は値を返します。多くの場合、変数に基づいています」

例:

Val()、FormatPercentage()。

3
Laxmi

vBの関数

  • 関数は何らかの値を返す必要があります
  • 構文:return_type(integer、string ..)as private function fun_name(argument/s(optional))as return value end function
  • fun_name(arguments(optional))は関数呼び出しに十分です

vBのサブ

  • サブルーチンは値/秒を返す必要はありません
  • 構文:private sub sub_name(argument/s(optional))

    終了サブ

  • sub_name(arguments(optional))は関数呼び出しに十分です
0
user3818752