54

我正在浏览一些旧的 VB 代码,我遇到了像这样的函数定义 -

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

 Private Sub cmdCustomerList_Click()

有什么不同?

4

8 回答 8

119

函数返回值,Sub 没有。就是这么简单。

于 2012-04-13T13:27:34.853 回答
21

函数也可以在表达式中使用。子程序不能。函数可以比子例程更好地提高代码的可读性。

这是一个函数如何提高可读性的示例:

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,有一些奇怪的规则来管理括号。如果 sub 没有参数,则不需要括号(我认为 Visual Studio 可能会删除括号)。解决此问题的一种方法是在您的子之前添加关键字“呼叫”。

Call CheckIfAccountLocked()

对比

CheckIfAccountLocked
于 2014-11-18T16:33:57.220 回答
4

在函数中,我们可以将值返回为布尔值、字符串和其他数据数据类型。

但 sub 不返回任何东西。它只是执行我们给出的代码和指令。这些也被视为方法

Sub 也用于控件的事件,这些事件也不返回任何值。

例如命令按钮的点击事件: Private sub cmd_click()

结束子

于 2014-08-23T11:12:03.520 回答
3

它们都是编写代码的部分,但是函数必须返回一个值。例如,如果您有一个程序需要多次执行复杂的数学过程,您只需创建一个函数并在其中包含复杂的数学代码,并且任何时候您需要进行计算,您都可以调用该函数. 希望这有助于不确定我是否解释得很好。

于 2015-04-30T09:20:17.857 回答
3

VB6中的Sub和Function有什么区别?

sub ”可以执行一些动作。“sub”不返回任何值。

例子:

Form_Load()

function ”也可以执行一些操作,但它也会返回一些值到调用它的点。也就是说,“函数返回一个值,通常基于一个变量”

例子:

值(),格式百分比()。

于 2016-08-25T09:25:38.883 回答
0

VB中的函数

  • 函数必须返回一些值
  • 语法:私有函数 fun_name(argument/s(optional)) as return_type(integer,string..) 返回值结束函数
  • fun_name(arguments(optional) ) 函数调用就足够了

vb中的子

  • 一个子不需要返回任何值/s
  • 语法 : private sub sub_name(argument/s(optional))

    结束子

  • sub_name(arguments(optional) ) 足以用于函数调用
于 2014-07-09T06:19:12.387 回答
-3

函数保存数据和代码。但是子程序只包含代码,而不包含数据。

于 2017-02-17T19:49:06.600 回答
-3
  1. 函数的语法将是 Function...End 函数,对于 Sub 将是 Sub...End Sub。
  2. 函数可能有也可能没有对象,但 sub 没有对象
  3. 函数可在 Sub 不能重用的地方重用
  4. 函数可以返回值,但 sub 不能
  5. 函数可能有对象存储库,但 sub 没有
  6. 函数的扩展是 .qfl,其中 sub 是 .vba
于 2017-04-03T17:00:09.117 回答