函數
假設有一多項式f(x)=x^2+3x+2,設定x=1,則f(1)=6, f(2)=12。程式中函數的跟其作用類似,給定值,並回傳處理過的資料,例如VB內建好的Math.Sqrt(81)會傳回9 [開根號的函數]。
使用範例如下:
Dim A As Integer=9
Dim B As Integer=Math.Sqrt(A)+2
則最後B等於5
不過,函數不一定只能給一個值,例如Math.Pow(2,3)是2的3次方,
而且也不一定要給值,例如Rnd()傳回隨機亂數,且0≦Rnd()<1。
在後面敘述中我們給函數的值稱之為引數或者參數。
除了內建的函數之外,我們當然也要自己寫自己的函數囉
寫法是這樣的:
Function 函數名稱(ByVal 引數1 As 引數1型態, ByVal 引數2 As 引數2型態, ....) As 傳回值的型態(程式碼)
Return 要傳回的值
End Function
舉個例子:
Function MyFunc(ByVal VX As Integer)Dim V2 As Integer =VX*VX
Return V2+3*VX+2
End Function
以上程式碼讓MyFunc(1)傳回6的數字MyFunc(2)傳回12
Sub
Sub的意義跟函數很像,但是它是沒有產生值的函數,只是執行特定區塊的程式碼。
而寫法是這樣的:
Sub SUB的名稱(ByVal 引數1 As 引數1型態, ByVal 引數2 As 引數2型態, .........)(程式碼)
End Sub
主要的意義是用來簡化重複的程式碼、或者當「觸發事件」的反應程式碼。
舉例:
Sub ShowName(ByVal Name As String, ByVal SayHi As Boolean)If SayHi Then
MsgBox("Hello, " + Name)
Else
MsgBox(Name)
End If
End Sub
單行程式碼:ShowName("Aethur",True)會顯示一對話方塊"Hello, Aethur"
函數與Sub的擺放位置
在VB中並不支援在函數裡擺函數或Sub,同樣的Sub裡面也不能包函數以及Sub
所以像是
Sub A1(ByVal V As Integer)Sub B2(ByVal Q As Integer)
Q=Q*6
End Sub
V=V*2
End Sub
是錯的!函數擺錯地方是初學常見的錯請小心=3=
正確擺放方式是
Sub A1(ByVal V As Integer)V=V*2
End Sub
Sub B2(ByVal Q As Integer)Q=Q*6
End Sub
ByVal跟ByRef
以上函數之類的舉例用的都是ByVal,但是VB裡面還有個ByRef可以當作引數的開頭,它跟ByVal有什麼差別呢?先看看下面的程式碼:
Sub A1(ByVal V As Integer)V=V*2
MsgBox("Wow" & V)
End Sub
Sub A2(ByRef V As Integer)V=V*2
MsgBox("Wow" & V)
End Sub
假設我們執行:
V=3
A1(V)
MsgBox("Out" & V)
結果會是Wow6跟Out3
而假設我們執行:
V=3
A2(V)
MsgBox("Out" & V)
結果會是Wow6跟Out6
簡單來講,如果用ByVal,則函數裡對該引數的賦值在函數/Sub之外無效。
而如果用ByRef,則函數理對該引數的賦值在函數/Sub之外有效。
Class跟Public與Private
很明顯的,在VB中設計程式時常常冒出一些Public Class、Public Sub之類另人不明白的東西,
Class,類別,表示一種「東西」,這是物件導向的部分往後才討論。而Public和Private之類的在未動到Class之前幾乎是沒有差別的,這裡也不予討論,只是先講這不是奇怪的字詞而已。
Event Handle
Event Handle,觸發事件的偵聽,通常都是由程式自動產生的Private Sub XXX,然後自己填程式碼。Event Handle的功能在於事件發生後,系統會呼叫之。如:表單關閉、滑鼠移動都是事件,而自動產生Private Sub的方式是屬性視窗中的閃電,或者點兩下控制項。
沒有留言:
張貼留言