發新話題

Visual Basic 教學 - 《副程式與函數》Function 陳述式

Visual Basic 教學 - 《副程式與函數》Function 陳述式

宣告 Function 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 的名稱、訪客無法瀏覽此圖片或連結,請先 註冊登入會員 及程式碼。
語法
[Public | Private | Friend] [Static] Function name [(arglist)] [As type]
    [statements]
    [name = expression]
    [Exit Function]
    [statements]
    [name = expression]
End Function
Function 陳述式的語法具有下列幾個單元:
單元描述
Public選擇性的。表示任何訪客無法瀏覽此圖片或連結,請先 註冊登入會員 中的所有其它程序都可呼叫 Function 程序。如果模組裏有 Option Private,那麼此程序就不能在訪客無法瀏覽此圖片或連結,請先 註冊登入會員 之外使用。
Private選擇性的。表示 Function 程序只能在宣告它之模組裏的程序所使用。
Friend選擇性的。只用於訪客無法瀏覽此圖片或連結,請先 註冊登入會員 中。指出 Function 程序在整個專案中都可見,但是對於該物件的一個執行個體的控制器則不會顯示。
Static選擇性引數。表示 Function 程序的區域訪客無法瀏覽此圖片或連結,請先 註冊登入會員 在呼叫之間會將值保留下來。Static 不會影響在 Function 之外所宣告的變數,即使它們在程序中使用到。
name必要的引數。Function 的名稱,遵循標準變數命名規格。
arglist選擇性引數。變數清單,表示呼叫 Function 程序時所傳送的引數。變數以逗號隔開。
type選擇性引數。 Function 程序傳回值的訪客無法瀏覽此圖片或連結,請先 註冊登入會員 ,可以是 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 (目前尚未支援)、訪客無法瀏覽此圖片或連結,請先 註冊登入會員 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 (除了固定長度)、或訪客無法瀏覽此圖片或連結,請先 註冊登入會員 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 或任何訪客無法瀏覽此圖片或連結,請先 註冊登入會員 。任何型態的訪客無法瀏覽此圖片或連結,請先 註冊登入會員 都無法被傳回,但含有陣列的 Variant 可以被傳回。
statements選擇性引數。任何 Function 程序所執行一群的陳述式。
expression選擇性引數。Function 的傳回值。
arglist 引數有下列語法和單元:
[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]
單元描述
Optional選擇性引數。表示引數不是必要的。如果使用,在 arglist 所有後來的引數也都為可選擇性的,且須以 Optional 關鍵字來宣告。若已使用 ParamArray 關鍵字來宣告,則引數不可再使用 Optional
ByVal選擇性引數。表示以訪客無法瀏覽此圖片或連結,請先 註冊登入會員 的方式傳遞引數。
ByRef選擇性引數。表示以訪客無法瀏覽此圖片或連結,請先 註冊登入會員 的方式傳遞引數,Visual Basic 預設為 ByRef
ParamArray選擇性引數。在 arglist 的最後一個引數上使用,表示此引數是一個 Variant 元素的 Optional 陣列。ParamArray 關鍵字允許您可使用任意個數的引數,但不可與 ByValByRefOptional 共用。
varname必要的引數。代表引數的變數名稱,遵循標準變數命名規格。
type選擇性引數。傳給程序引數的資料型態,可以是 ByteBooleanIntegerLongCurrencySingleDoubleDecimal (目前尚未支援)、DateString (只限可變長度)、 Object Variant。如果此參數不是 Optional,則可使用指定的訪客無法瀏覽此圖片或連結,請先 註冊登入會員 或使用者自訂型態。
defaultvalue選擇性引數。任何訪客無法瀏覽此圖片或連結,請先 註冊登入會員 或常數運算式,只適用在 Optional 的參數。如果型態為 Object,其預設值為 Nothing
請注意
若無明確地指定 PublicPrivateFunction 程序,則預設為公用的。如果沒有使用 Static,區域變數的值在每次呼叫之間不會保留下來。
注意 Function 程序可遞迴,也就是它們可以呼叫自己。然而,遞迴可能會造成堆疊溢位。Static 關鍵字也通常不使用在遞迴的 Function 程序上。
所有的可執行程式碼都必須在程序中。不可以在 FunctionSubProperty 程序裏定義其它的 Function 程序。
Exit Function 陳述式會使 Function 程序立即停止。程式會從呼叫該 Function 程序的下一行陳述式繼續執行。Exit Function 陳述式可在 Function 程序任何位置出現,且不限次數。
如同 Sub 程序,Function 程序是可接受引數、執行一串陳述式並且改變其引數值的獨立程序。然而,與 Sub 程序不同的是,當您想運用函數的傳回值時,Function 程序可以放在訪客無法瀏覽此圖片或連結,請先 註冊登入會員 的右方,就如同使用內建函數一樣,例如 SqrCosChr。
運算式中只要使用函數名稱接著以括號括起來的引數列,就可以呼叫 Function 程序。請參考 Call 陳述式以得知關於如何呼叫 Function 程序的特定資訊。
若要從函數中傳回值,須指定該值給函數名稱。這種指定式可出現於程序中的任何位置,且不限次數。如果沒有指定值給 name,則程序會傳回預設值:數值函數傳回 0,字串函數傳回零長度字串 (""),Variant 函數傳回 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 。若傳回型態為物件所引用,且 Function 裏沒有指定物件引用給 name (使用 Set),則函數會傳回 Nothing
下列範例表示如何指定傳回值給一個名稱叫作 BinarySearch 的函數。在此範例中,指定 False 給名稱以表示有些值找不到。
Function BinarySearch(. . .) As Boolean. . .   ' 找不到欲搜尋之值,傳回 False   If lower > upper Then      BinarySearch = False      Exit Function   End If. . .End Function Function 程序中使用的變數有兩類:那些在程序中明確宣告的,以及不是此類的。在程序中明確地宣告的變數 (使用 Dim 或同類字),必為區域變數。程序中有使用到,但未在程序中宣告的變數也是區域的,除非此變數已在程序外更高層次中被宣告。
注意 程序可使用不是在該程序中宣告過的變數,但是若在訪客無法瀏覽此圖片或連結,請先 註冊登入會員 定義相同的名稱,就會發生名稱上的衝突。如果程序裏引用了未宣告的變數,而此變數的名稱和其它程序、常數或變數的名稱相同,則會認定程序是引用模組層次的名稱。所以,請明確地宣告變數以避免此種衝突。可使用 Option Explicit 陳述式來強迫變數的宣告。
注意 Visual Basic 可能為了內部的效率而重新排列算術運算式。若 Function 程序會改變同一運算式中的變數值,請避免在此狀況下使用。


Function 陳述式範例本範例使用 Function 陳述式來宣告一個函數的名稱、引數及函數的程式碼。在範例的最後一段中,使用到被初始化的 Optional 引數。
' 下面自訂函數傳回其引數值的平方根。Function CalculateSquareRoot(NumberArg As Double) As Double   If NumberArg < 0 Then   ' 檢查引數值。      Exit Function   ' 如果引數值小於 0,結束函數。   Else      CalculateSquareRoot = Sqr(NumberArg)   ' 將平方根傳回。   End IfEnd Function利用關鍵字 ParamArray 可以讓函數接受不固定數目的引數。下面範例中,FirstArg 是以傳值的方式傳入。
Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs())   Dim ReturnValue    ' 如果此函數以如下方式呼叫:   ReturnValue = CalcSum(4, 3 ,2 ,1)   ' 區域變數值將會如下:FirstArg = 4,OtherArgs(1) = 3,OtherArgs(2) = 2,依此類推 (假設陣列索引值的預設下限為 1)。   ...Optional 引數可以有預設值,也可以是 Variant 以外的型態。
' 如果函數的引數以如下方式定義:Function MyFunc(MyStr As String, Optional MyArg1 As _ Integer = 5, Optional MyArg2 = "Heolly")    Dim RetVal   ' 函數可以下列方式呼叫:   RetVal = MyFunc("Hello", 2, "World")   ' 三個引數都傳入。   RetVal = MyFunc("Test", , 5)   ' 第二個引數省略。   ' 第一和第三個引數使用 [指名引數] 方式傳入。   RetVal = MyFunc(MyStr:="Hello ", MyArg1:=7)   ...

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。