Vbscript 在函数开头为函数赋值是否是一种良好的编码实践?
我被问及我的编码风格,我不同意我的评论者 我这样写我的函数Vbscript 在函数开头为函数赋值是否是一种良好的编码实践?,vbscript,standards,Vbscript,Standards,我被问及我的编码风格,我不同意我的评论者 我这样写我的函数 Function Func_DoSomething(argVariable1, argVariable2) strStringSame = "" Func_DoSomething = Array(False,strStringSame) If argVariable1 = "" Then Exit Function End If If argVariable2 = "" The
Function Func_DoSomething(argVariable1, argVariable2)
strStringSame = ""
Func_DoSomething = Array(False,strStringSame)
If argVariable1 = "" Then
Exit Function
End If
If argVariable2 = "" Then
Exit Function
End If
If StrComp(argVariable1,argVariable2,vbBinaryCompare) = 0 Then
print "Yes!"
strStringSame = "Same"
End If
Func_DoSomething = Array(False,strStringSame)
End Function
我的审阅者建议我不应该在函数开始时为函数分配数组甚至变量,而应该这样做
Function Func_DoSomething(argVariable1, argVariable2)
strStringSame = ""
If argVariable1 = "" Then
Func_DoSomething = Array(False,strStringSame)
Exit Function
End If
If argVariable2 = "" Then
Func_DoSomething = Array(False,strStringSame)
Exit Function
End If
If StrComp(argVariable1,argVariable2,vbBinaryCompare) = 0 Then
print "Yes!"
strStringSame = "Same"
End If
Func_DoSomething = Array(False,strStringSame)
End Function
我知道这两种方法在功能上都是可行的,因为这两种方法都有效。然而,我被告知,我所做的是不正确的,我的代码的查看器会感到困惑
这有什么道理吗?我的编码风格不是一种好的风格吗?可能的答案:
Option Explicit
Function f(s, t)
f = s <> "" And t <> "" And s = t
End Function
Dim aa : aa = Array( _
Array("", "a") _
, Array("a", "") _
, Array("", "") _
, Array("a", "b") _
, Array("a", "a") _
, Array("a", "A") _
)
Dim a
For Each a In aa
WScript.Echo "|" & Join(a, "|") & "|", CStr(f(a(0), a(1)))
Next
在顶部指定返回值,因为它不是由计算确定的;e、 g.必须返回Me
的类的init函数:
Class C
Private m_x
Function init(x, lots, of, parms)
Set init = Me
m_x = x
use lots of parms
...
End Function
我会把我的任务放在首位,所以我不能忘记它;但我会接受“每个人都看一个函数的结尾来确定返回值”的论点,并按我说的去做
提前设置默认返回值以提高效率:
Function isin(a, s)
isin = False
For Each e In a
If e = s Then
isin = True
Exit Function <--- algorithm needs break here
End If
Next
End Function
函数isin(a,s)
isin=False
对于a中的每个e
如果e=s,则
isin=True
退出功能可能的答案:
因为你只是“像这样编写[你的]函数”,也就是说,对你的“编码风格”没有任何理由,就照你说的去做
你的评论者的论点——“那是错误的”和“我弄糊涂了”——是无可辩驳的。他付给你钱/给你评分,就照他说的去做
两个函数都有气味:返回数组的第一个元素无效/始终为False;第二个元素是“”(不可见)或“相同”(容易出错且效率低下),因此应该是布尔值;有多个出口点;有副作用(打印)。因为还有一种可能的气味无关紧要,所以照吩咐你的去做
现实世界中的问题—当两个字符串参数都非空且区分大小写相等时返回true的函数—可以通过使用VBScript语法编写规范来解决:
Option Explicit
Function f(s, t)
f = s <> "" And t <> "" And s = t
End Function
Dim aa : aa = Array( _
Array("", "a") _
, Array("a", "") _
, Array("", "") _
, Array("a", "b") _
, Array("a", "a") _
, Array("a", "A") _
)
Dim a
For Each a In aa
WScript.Echo "|" & Join(a, "|") & "|", CStr(f(a(0), a(1)))
Next
在顶部指定返回值,因为它不是由计算确定的;e、 g.必须返回Me
的类的init函数:
Class C
Private m_x
Function init(x, lots, of, parms)
Set init = Me
m_x = x
use lots of parms
...
End Function
我会把我的任务放在首位,所以我不能忘记它;但我会接受“每个人都看一个函数的结尾来确定返回值”的论点,并按我说的去做
提前设置默认返回值以提高效率:
Function isin(a, s)
isin = False
For Each e In a
If e = s Then
isin = True
Exit Function <--- algorithm needs break here
End If
Next
End Function
函数isin(a,s)
isin=False
对于a中的每个e
如果e=s,则
isin=True
直接从MSDN退出函数:“若要从函数返回值,请将值分配给函数名。任何数量的此类分配都可以出现在过程中的任何位置。”
我认为第一行与其他任何位置一样合理。也许更是如此。毕竟,VBScript返回自己的“默认”值(空字符串、False等)。我认为覆盖这个默认值的地方应该是函数的第一行,而且我倾向于给函数变量赋值false,最后赋值true。动机是,如果函数中有一个,我将退出,它将以False退出。如果没有错误,则存在true,true也有效。我被告知变量在初始化时没有被赋值为False,这是一种错误的编码实践……我不同意这一点,但我如何说服他人。我也这么做,只是一开始我甚至懒得将其初始化为False
。默认情况下,它是False
。从技术上讲,默认情况下它是一个未初始化的变体。但是,未初始化的变量可以被视为空字符串(”
),数值0
,或布尔值False
。在VB/VBA中的工作原理相同。甚至键入的变量在VB/VBA中也有默认值(“
表示字符串
,0
表示Integer/Long
,False
表示布尔值
,等等)。不利用这一点似乎很遗憾。直接从MSDN开始:“若要从函数返回值,请将值分配给函数名。任何数量的此类分配都可以出现在过程中的任何位置。”
我认为第一行与其他行一样合理。也许更是如此。毕竟,VBScript返回自己的“默认”值(空字符串、False等)。我认为覆盖这个默认值的地方应该是函数的第一行,而且我倾向于给函数变量赋值false,最后赋值true。动机是,如果函数中有一个,我将退出,它将以False退出。如果没有错误,则存在true,true也有效。我被告知变量在初始化时没有被赋值为False,这是一种错误的编码实践……我不同意这一点,但我如何说服他人。我也这么做,只是一开始我甚至懒得将其初始化为False
。默认情况下,它是False
。从技术上讲,默认情况下它是一个未初始化的变体。但是,未初始化的变量可以被视为空字符串(”
),数值0
,或布尔值False
。同样的道理