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

2009年12月8日 星期二

(VB入門篇)VB2008 四、語法簡介中(條件和迴圈)

If


If如果把它翻做如果,則一切都很容易明白=D
If A = B Then

MsgBox("OK")

End If

以上程式碼表示如果A等於B則執行MsgBox("OK")

從進階的角度來講,IfThen 之間會有一串運算式,如果這運算式的結果不是0也不是False,就會執行ThenEnd If之間的程式碼。

結論:
If 運算式 Then

(程式碼)

End If

Else


簡單來說,當If的運算式為False或0的時候會執行ElseEnd If之間的程式碼。
If A = B Then

MsgBox("OK")

Else

MsgBox("Not OK")

End If

以上程式碼表示如果A等於B則執行MsgBox("OK"),如果A不等於B,則執行MsgBox("Not OK")

結論:
If 運算式 Then

(程式碼)

Else

(程式碼)

End If

Else If


If的運算式為False或0的時候會判斷Else IfThen之間的運算式,如果該運算式是True或者1,則執行Else If ... Then End之間的程式碼。
If A = B Then

MsgBox("OK")

Else If A>B Then

MsgBox("BIGGER THAN")

End If

以上程式碼表示如果A等於B則執行MsgBox("OK"),如果A不等於B,可是A>B,則執行MsgBox("BIGGER THAN")

If A = B Then

MsgBox("OK")

Else If A>B Then

MsgBox("BIGGER THAN")

Else

MsgBox("SMALLER THAN")

End If

以上程式碼表示如果A等於B則執行MsgBox("OK"),如果A不等於B,可是A>B,則執行MsgBox("BIGGER THAN"),再不然,就會執行MsgBox("SMALLER THAN")

結論:


If 運算式 Then

(程式碼)

Else If 運算式 Then

(程式碼)

End If



For


關於迴圈,直接從語法上來好了。

範例程式碼:
Dim i As Integer = 0

For i = 0 To 3

MsgBox("OK" & i)

Next

嗯,如果要簡單說的話就是讓i從0加到3,期間執行ToNext之間的程式碼(範例內是MsgBox)

以上這段程式碼是這樣執行的:
i=0

MsgBox("OK" & i)

i=i+1

MsgBox("OK" & i)

i=i+1

MsgBox("OK" & i)

i=i+1

MsgBox("OK" & i)

因為i=3, 結束迴圈

最後i=3,符合最後條件所以結束迴圈。

關於i=i+1這段,+1是由省略變形而來的
Dim i As Integer = 0

For i = 0 To 3 Step 1

MsgBox("OK" & i)

Next

這段跟前述程式碼是等價的,產生的結果一樣。

但是:
Dim i As Integer = 0

For i = 0 To 3 Step 2

MsgBox("OK" & i)

Next

的結果不同,流程是
i=0

MsgBox("OK" & i)

i=i+2

MsgBox("OK" & i)

因為i>3,結束迴圈

結論:
For 變數名稱 = 初始值 To 結束值

(程式碼)

Next

或者:
For 變數名稱 = 初始值 To 結束值 Step 遞增值

(程式碼)

Next

變形:
For 變數名稱 As Integer = 初始值 To 結束值

(程式碼)

Next

變形可以省去前面變數名稱的宣告,直接在FOR裡宣告

While


While超易懂,結論:
While 運算式

(程式碼)

End While

當運算式結果是True或者是1,程式碼會不斷執行,直到運算式=0或者False

另一種表達方式是:
Do

(程式碼)

While 運算式

(VB入門篇)VB2008 四、語法簡介上(宣告,資料型態,賦值)

首先我要你背幾個單字,或者看過有印象比較好。
Integer 整數 / String 字串 / Array 陣列 / Dim 宣告 / If 如果 / Else 其他 / For 向 / Sub 子程式 / Function 函數 (這裡的中文並非單字的唯一解釋,而是這些單字在程式碼裡的通常意義)

程式,一套自動執行的指令。你要他幹嘛,他就跟著你做。表達的好,你想要的程式就可以順著你的意去執行!

流程對,邏輯對,語法對,才能產生你自己的程式。以下為語法簡介。

一、宣告式(基本)


宣告的目的是為了幫欲儲存的資料安排記憶體空間。

VB裡宣告式很簡單:

Dim 變數名稱 As 資料型態

變形式(以後說明): Dim 變數名稱 As New 資料型態

範例:Dim Num As Integer

非變形式的宣告後面可加預設值,如:

[code lang="vb"]Dim Num As Integer = 123[/code]

二、資料型態(基本)


一般程式語言都有整數、小數、字元、字串等資料型態,VB也不例外,資料型態是什麼?就是資料的類型咩=3=

1.Integer(長整數)表示大整數,範圍大約在正負21億,是最常應用的資料型態之一,你知道的,數位生活離不開數字。

2.Short(短整數)表示小整數,範圍大約在正負32700,適用小範圍的數字,例如便利商店商品價錢(最好是有五位數價錢的商品=口=)。

3.Single(單精度浮點數)用來儲存大約7位的小數+整數位(如:123.4567),例如成績平均用Single大概就夠了(在別的程式語言中,Single被叫做Float)。

4.Double(雙精度浮點數)用來儲存大約14~15位的小數+整數位(如:0.1234567891234),比較精密的數字就要用DOUBLE去算了。

※Float跟Double能儲存的範圍有爭議,這裡取大概

5.Char(字元)用來表示一個"字",如'A', 'B', 'C', 'D'都是一個字元,而'你', '我', '他'也都是一個字元,標點符號如","也是一個字元。

6.String(字串)則是表示按照順序排列的字元,是連續的字元,如同字元串起來般,所以叫做字串,通常拿來存放句子。

※字串是在句子前後加雙引號「"」,字元是在字的前後加單引號「'」來表示,如Dim Str As String="Happy Birthday"

7.Boolean(布林值)只能存放兩種數值,0跟1,0表示false,1表示true,true表示"真",false表示"假",看後篇你就知道意思了。

其他資料型態會在後篇提到。

三、賦值


賦值非常的簡單,

如 A=1+2 就是把1+2的結果存到A。

因此賦值的表示方式是

變數名稱=運算式

四、運算式


運算式跟賦值一樣好懂,1+2是運算式,3*5是運算式,5*6/3也是運算式,分別產生3,15,10的運算結果。

不同於數學的是,如<, >, =, <=, >=等符號也可以當作運算符號,不過產生的不是數字,而是布林值

例如5>3,是真的,所以產生的結果是1(True)。而5<3並不成立,所以產生的結果是0(False)。

5=5,是真的,產生的結果是1,而7=49/7也是真的,結果也是1,但是7=6是明顯矛盾的,所以結果是0。

第三、四點的總結範例:
A=1+2

B=3+7

C=A*B

則A,B,C最後各是3,10,30

(VB入門篇)VB2008 一、下載&安裝

VB2008 Express下載與安裝說明:

步驟:

1.進入http://www.microsoft.com/express/vb/Default.aspx

2.選取Traditional Chinese 並按Download



3.下載結束後開啟並執行

※Express Edition 常見問題:

Q.是否比一般版少了很多功能?

Ans.輔助功能應該是少了一些,不過程式碼方面沒有任何限制,一般版寫得出來,Express也寫得出來。

Q.Visual Studio?

Ans.Visual Studio可以整合多種程式語言的專案, 包含VC++, C#, VB. 通常要錢!

Q.SQL 200x Express?

Ans.如果你需要進行網路伺服器相關的專案才需安裝,不然的話MS SQL閒置擺著確實有點浪費記憶體空間。至於那是做什麼的,那個是資料庫系統之一。