SOGO論壇
  登入   註冊   找回密碼
查看: 586|回覆: 0
列印 上一主題 下一主題

[技術文章] Function 陳述式 [複製連結]

Rank: 11Rank: 11Rank: 11Rank: 11

熱心參予論壇活動及用心回覆主題勳章 數位硬體勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-7-19 10:51:14 |只看該作者 |倒序瀏覽
宣告 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 程序傳回值的資料型態,可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (除了固定長度)、或 Object、Variant 或任何使用者自訂型態。任何型態的陣列都無法被傳回,但含有陣列的 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 關鍵字允許您可使用任意個數的引數,但不可與 ByVal、ByRef或 Optional 共用。
varname 必要的引數。代表引數的變數名稱,遵循標準變數命名規格。
type 選擇性引數。傳給程序引數的資料型態,可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、 Decimal (目前尚未支援)、Date、String (只限可變長度)、 Object 或 Variant。如果此參數不是 Optional,則可使用指定的物件型態或使用者自訂型態。
defaultvalue 選擇性引數。任何常數或常數運算式,只適用在 Optional 的參數。如果型態為 Object,其預設值為 Nothing。

請注意

若無明確地指定 Public、Private或 Function 程序,則預設為公用的。如果沒有使用 Static,區域變數的值在每次呼叫之間不會保留下來。

注意 Function 程序可遞迴,也就是它們可以呼叫自己。然而,遞迴可能會造成堆疊溢位。Static 關鍵字也通常不使用在遞迴的 Function 程序上。

所有的可執行程式碼都必須在程序中。不可以在 Function、Sub 或 Property 程序裏定義其它的 Function 程序。

Exit Function 陳述式會使 Function 程序立即停止。程式會從呼叫該 Function 程序的下一行陳述式繼續執行。Exit Function 陳述式可在 Function 程序任何位置出現,且不限次數。

如同 Sub 程序,Function 程序是可接受引數、執行一串陳述式並且改變其引數值的獨立程序。然而,與 Sub 程序不同的是,當您想運用函數的傳回值時,Function 程序可以放在運算式的右方,就如同使用內建函數一樣,例如 Sqr、 Cos 或 Chr。

運算式中只要使用函數名稱接著以括號括起來的引數列,就可以呼叫 Function 程序。請參考 Call 陳述式以得知關於如何呼叫 Function 程序的特定資訊。

若要從函數中傳回值,須指定該值給函數名稱。這種指定式可出現於程序中的任何位置,且不限次數。如果沒有指定值給 name,則程序會傳回預設值:數值函數傳回 0,字串函數傳回零長度字串 (""),Variant 函數傳回 Empty。若傳回型態為物件所引用,且 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 程序會改變同一運算式中的變數值,請避免在此狀況下使用。

喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-4-28 07:14

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部