我被问及我的编码风格,我不同意我的评论员。
我写这样的函数..
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
我知道两种方法在功能上都是可行的,因为这两种方法都有效。但是我被告知我正在做的事情是不正确的,我的代码的查看者会感到困惑。
有没有真相,我的编码风格不是一个好的风格吗?
答案 0 :(得分:3)
可能的答案:
真实世界的问题 - 如果两个字符串args都是非空且区分大小写的,则返回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
输出:
cscript 25453765.vbs
||a| False
|a|| False
||| False
|a|b| False
|a|a| True <-- non-empty and case-sensitive equal
|a|A| False
看看ma:根本没有编码风格问题。
所以基本规则是:在计算之后,即最后一个function-name = return-value
语句。
可能的偏差:
利用VBScript的功能不来组合&#34;指定返回值&#34;和&#34;退出功能&#34;在一个陈述(如return(whatever)
)中进行深度清理:
从使用.NET System.Text.StringBuilder的类进行奇特的格式化:
Public Function formatOne(sFmt, vElm)
m_oSB.AppendFormat sFmt, vElm <--- much more computings could be here
formatOne = m_oSB.ToString() <--- specify return value *before* the end
m_oSB.Length = 0 <--- late clean-up
End Function ' formatOne
在顶部指定返回值,因为计算确定不;例如必须返回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
我会把我的作业放在首位,所以我不能忘记它;但我会接受这个论点&#34;每个人都会看一个函数的结尾来确定返回值&#34; - 并告诉我。
提前设置默认返回值以提高效率:
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
我不想在这里使用临时变量。
总结:尝试编写像f()这样的函数;有理由想要偏离默认规则;不要与喂你的手争论。