12.副程式(Sub)及函數(Function)宣告及使用

 
        一個程式至少須有一個以“main”為命名的Sub程序。通常以“Sub Main()”敘述來表示一個程式的開始,一直到Main()的最後結束。除了Main()程序之外,你可以加上其它的Sub程序,函數(Function)等,讓程式更具結構化,更有效率。

        SUB和FUNCTION副程式都可以有引數(Arguments),但只有FUNCTION副程式會有回傳值。通常,一段重複使用的程式會使用SUB副程式來減少程式空間及增加可讀性,FUNCTION副程式則用來執行一段運算,並將運算結果的值回傳主程式。

Sub 程序
        Sub程序不回傳值。每次SUB被呼叫後即開始執行,直到End Sub出現為止。Sub Main()本身即是一個Sub敘述,也是一個程式的開始點。
 
 

Sub Main()
    Display()
End Sub

Sub Display()
   
Debug "Sub Procedure Display() has executed."
End Sub

 

 
 
 
 
 
 
 
 
 
 
 
 
 
Functions函數
        Function會有回傳值,通常用來求值、計算或轉換資料。宣告Function的方式與Sub類似。宣告時須有關鍵字“Function”。以下為如何使用Function的例子:
 
 
 

Function Max(I As Integer, J As Integer) As Integer
   
If I>J Then Return I Else Return J
End Function

Sub Main()
   
Dim X, Y, Z As Integer
   
Do
       
Debugin "Enter the First Number:", X
       
Debug X, CR
       
Debugin "Enter the Second Number:", Y
       
Debug Y, CR
        Z = Max(X,Y)
       
Debug "The Maximum value is ", Z, CR
   
Loop
End Sub

 

 
 
參數
        參數是代入SUB或FUNCTION程序的引數。在宣告SUB或FUNCTION程序時,參數被置於程序名字後面的括弧中。注意參數必須指定型態,且字串及陣列不可以為參數型態。有二種參數傳遞方式,包括傳址呼叫ByRef和傳值呼叫ByVal。如果沒有明確表示,系統預設為ByVal。宣告傳址呼叫時須在參數前加上ByRef。傳址呼叫的參數並不會佔用新的記憶體位置,而是延用先前呼叫它的引數的變數位置,改變參數內容將會同時改變引數的變數內容。以下的例子為傳址呼叫的應用:
 
 
 

Sub Swap(ByRef a As Integer, ByRef b As Integer)
   
Dim t As Integer = a
    a = b
    b = t
End Sub

Sub Main()
   
Dim x As Integer = 1
   
Dim y As Integer = 2
   
Debug "Before: x = ??, x, ??, y = ", y, CR
    Swap(x, y)
   
Debug "After: x = ??, x, ??, y = ", y, CR
End Sub

 

 
 
 程式的輸出為:
Before : x = 1, y = 2
After : x = 2, y = 1
 
        如需更詳細說明,可參考InnoBasic內建指令介紹內容裡的SUB...END SUB介紹FUNCTION...END FUNCTION介紹