2009年12月9日 星期三

(VB入門篇)VB2008 四、語法簡介下(函數\Sub\Class關鍵字\Event Handle)

函數


假設有一多項式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的方式是屬性視窗中的閃電,或者點兩下控制項。

沒有留言:

張貼留言