我有一个VB6函数,它执行SQL删除。该函数返回一个布尔值,具体取决于删除是否成功:
Public Function Delete(ByVal RecordID As Integer) As Boolean
On Error GoTo ErrorGenerated //Execute SQL delete
Delete = True
Exit Function
ErrorGenerated: Delete = False
End Function
我在某处读到最好返回一个整数,它指示删除是否成功。但是,从我能看到的函数中运行函数只能有两个结果,即删除或未删除(如果抛出错误,则不会删除)。返回一个整数会更好吗?
答案 0 :(得分:3)
我建议你最好的办法是返回一个枚举类型;然后,枚举的每个值都可以以明确且明确的方式向调用者解释问题是什么,并且可以在以后根据需要添加新的错误原因而不会破坏任何内容。有点像...
Public Enum DB_ERRS
Success
NoConnection
FailedForThisReason
FailedForThatReason
FailedForOtherReason
Failed
End Enum
然后,所有数据库访问函数都可以返回此类型的值...
Public Function Delete(ByVal RecordID As Integer) As DB_ERRS
On Error GoTo ErrorGenerated
Execute SQL delete
Delete = Success
Exit Function
ErrorGenerated:
If Err.Number = this Then
Delete = FailedForThisReason
Else
Delete = Failed
End If
End Function
智能感知甚至可以帮助你填补它们。
答案 1 :(得分:2)
这是相当主观的。
有人会说,返回一个布尔值,因为它很简单。
另一个人会说,返回一个整数,因为以后你可能想要添加第三个状态,例如“archived”,这会破坏现有的代码。
而别人会说,Ditch认为C风格的返回代码。创建一个不返回任何内容的sub
,并在需要指示失败时引发异常。
我个人更喜欢例外。但是由你来决定。
答案 2 :(得分:0)
就大小而言,integer
是32位有符号整数,而boolean
数据类型实际上没有定义的大小。但是,它还取决于您阅读有关使用整数而不是布尔值的上下文。
对于 SOME ,将其用作函数的返回值时,差异无关紧要。
但是,它可能是存储过程中的首选项,如果您还在考虑存储过程的返回值。布尔值的评估(当转换为数字时)可能导致它被视为一点点(0和1)。在任何情况下,它更像是一种主观方法。整数允许更大的灵活性,而布尔值提供限制和简单性。哪个更好?我认为这几乎完全取决于您,您的偏好,您的编码标准,您公司的编码标准或其他等等。
只是为了分享数据类型的链接:
http://msdn.microsoft.com/en-us/library/aa383751(v=vs.85).aspx
答案 3 :(得分:0)
我会抛出我的意见。我个人认为返回一个布尔值是正确的做法。你真的在乎为什么它不能删除?通常情况下,删除可能首先失败的原因只有几个(文件锁定或缺少权限)。如果你需要返回失败的原因,以便以某种方式处理它,那么是的,返回一个整数。现在个人而言,我不喜欢幻数,所以我永远不会返回一个整数,而是会返回一个枚举值。