位元詩人 [VBScript] 程式設計教學:撰寫副程式 (subroutine) 和函式 (function)

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

在一般的程式設計術語中,函式 (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 家族語言。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。