在VB6中,“Sub”和“Function”有什么区别?

56

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

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

 Private Sub cmdCustomerList_Click()

有什么区别吗?


在Excel中,仅可将“Subs”分配给指定宏消息框中的形状。 - SAm
8个回答

120

函数返回值,子程序不返回值。非常简单明了。


13
手册中写道:"与函数过程一样,子过程是一个独立的过程,可以接受参数,执行一系列语句并更改其参数的值。然而,与返回值的函数过程不同,子过程不能在表达式中使用。" 这段话有点啰嗦,因为它们告诉你关于 Sub 和 Function 可以做什么的一些额外信息。 - MarkJ

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中,圆括号有一些奇怪的规则。如果子过程没有参数,则不需要括号(我想Visual Studio可能会删除括号)。解决这个问题的一种方法是在子过程之前添加关键字“Call”。

Call CheckIfAccountLocked()

对比

CheckIfAccountLocked

3

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

但是子程序不返回任何东西。它只执行我们给定的代码和指令。这些也被称为方法。

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

例如,命令按钮的点击事件:

Private sub cmd_click()

end sub


2

在VB6中,Sub和Function有什么区别?

"Sub"可以执行某些操作。 "Sub"不返回任何值。

例如:

Form_Load()

"Function"也可以执行某些操作,但它还会向调用它的地方返回一些值。 也就是说,"Function返回一个值,通常基于一个变量"

例如:

Val(),FormatPercentage()。


1

它们都是编写代码的部分,但函数必须返回一个值。例如,如果您有一个程序需要多次执行复杂的数学过程,您可以简单地创建一个函数并将复杂的数学代码放在其中,每当需要进行计算时,只需调用该函数即可。希望这有所帮助,不确定我是否解释清楚。


函数可以返回一个值,但这是可选的。 - undefined

-1

VB中的函数

  • 函数必须返回某些值
  • 语法: 私有函数 函数名(参数/可选) as 返回类型(整数、字符串...) 返回值 结束函数
  • 函数调用只需要使用函数名和参数(可选)

VB中的子程序

  • 子程序不需要返回任何值
  • 语法: 私有子程序 子程序名(参数/可选) 结束子程序
  • 子程序调用只需要使用子程序名和参数(可选)

-3
  1. 函数的语法将是Function...End Function,而对于子程序将是Sub...End Sub。
  2. 函数可能有对象,但子程序没有对象
  3. 函数是可重用的,而子程序不是
  4. 函数可以返回值,但子程序不行
  5. 函数可能有对象库,但子程序没有
  6. 函数的扩展名为.qfl,而对于子程序则为.vba

-3
一个函数包含数据和代码。但是子程序只包含代码,而没有数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接