前言
在一般的程式設計術語中,函式 (function)、程序 (procedure)、副程式 (subroutine) 三者通常可交替使用,這三者皆代表一段可重覆使用的 (reusable) 程式碼區塊,只是不同程式語言會使用不同的名稱。然而,在 VBScript 中,副程式和函式兩者略有不同,撰寫程式碼時需注意。
撰寫副程式 (Subroutine)
在 VBScript 中,副程式 (subroutine) 使用 Sub
保留字;和一般的函式不同的地方在於副程式沒有回傳值 (return value) 且呼叫副程式時沒有括號。我們先前自製的 Assert
就是一個副程式:
Assert 3 + 4 = 7, "It should be equal"
' Home-made assert for VBScript
Sub Assert( boolExpr, strOnFail )
If Not boolExpr Then
Err.Raise vbObjectError + 99999, , strOnFail
End If
End Sub
由於這些特性,呼叫副程式時很像在使用該語言本身的語法。
撰寫函式 (Function)
VBScript 的函式 (function) 比較接近一般程式語言中函式的概念,呼叫時需加括號,可回傳數值。建立函式使用 Function
保留字。以下是一個短例:
Assert Cmp(3, 2) > 0, "It should be larger than 0"
Assert Cmp(3, 4) < 0, "It should be less than 0"
Assert Cmp(3, 3) = 0, "It should be 0"
Function Cmp(a, b)
Dim Result
If a > b Then
Result = 1
ElseIf a < b Then
Result = -1
Else
Resutl = 0
End If
Cmp = Result
End Function
' Home-made assert for VBScript
Sub Assert( boolExpr, strOnFail )
If Not boolExpr Then
Err.Raise vbObjectError + 99999, , strOnFail
End If
End Sub
VBScript 函式在撰寫時較特別的地方在於回傳值的部分,透過將函式名稱賦值的方式來回傳值,稍微注意一下其寫法即可。這種撰寫回傳值的方式來自於老派的 Algol 家族語言。