- 帖子
- 57
- 主題
- 7
- 精華
- 3
- 積分
- 60
- 點名
- 0
- 作業系統
- WINDOWSXP
- 軟體版本
- 2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2011-4-9
|
Visual Basic 新手教學 之 程序與函數
本帖最後由 呆呆 於 2010-5-29 18:09 編輯
程序與函數
- 程序
一般而言,如果我們常做某一件事,那這件事情的程式碼就可以寫在一個程序中,每當我們要做這件事時就可以呼叫這個程序
程序一般而言會有下列的語法以下程式碼可以求出1+2+3....+10- Public Class Form1
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- 求總和()
- End Sub
- Sub 求總和()
- Dim 總和 As Integer = 0
- For i As Integer = 0 To 10
- 總和 = 總和 + i
- Next
- MessageBox.Show(總和.tostring)
- End Sub
- End Class
複製代碼 我們呼叫程序時只要在程式碼上鍵入程序名稱就可以了,這樣的話,如果我們想要1到10的加總,就可以一直利用求總和這個程序了,這樣不是很方便嗎
但就有人想到了,我這樣只能求1加到10,那麼我想一加到任意數呢或者是連續的整數總和呢那要怎麼辦,當然,這裡就裡供了定義這種程序的語法
Sub 程序名程(byval 變數1 as 型態 ,byval 變數2 as 型態,.........,byval 變數n as 型態 )
End sub
因此我們就可以在呼叫程序時利用傳入變數的方法讓程序內部可以利用這個變數來做事以下為範例- Public Class Form1
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- 求總和(-10, 100)
- End Sub
- Sub 求總和(ByVal 起始值 As Integer, ByVal 終止值 As Integer)
- Dim 總和 As Integer = 0
- For i As Integer = 起始值 To 終止值
- 總和 = 總和 + i
- Next
- MessageBox.Show(總和.ToString)
- End Sub
- End Class
複製代碼 事實上傳入變數分為二種,一種是傳值,另一種是傳址,我們上面用的是傳值,起始值是-10,終止值是100
這二種有什麼不同呢,以下為程式碼- Public Class Form1
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim 起始值 As Integer = -10
- Dim 終止值 As Integer = 100
- Dim 總和 As Long = 0
- 求總和(起始值, 終止值, 總和)
- MessageBox.Show("起始值 =" & 起始值 & vbCrLf & "終止值 = " & 終止值 & vbCrLf & "總和=" & 總和.ToString)
- End Sub
- Sub 求總和(ByVal 起始值 As Integer, ByVal 終止值 As Integer, ByRef 總和 As Long)
- For i As Integer = 起始值 To 終止值
- 總和 = 總和 + i
- Next
- 起始值 = 1000
- 終止值 = 1000
- MessageBox.Show("起始值 =" & 起始值 & vbCrLf & "終止值 = " & 終止值 & vbCrLf & "總和=" & 總和.ToString)
- End Sub
- End Class
複製代碼 我們由結果很快的就可以了解,總和這個變數我們是傳址的,也就是說,在主按鈕程序中的總和變數其實是和程序 求總和 中的總和變數是共用同一位址
因此當我們修改了求總和程序中的總和變數那就會連同按鈕程序內的總和變數一起修改,也就是傳址(byref)
然而,傳值(byval)是不一樣的,我們在求總和程序中修改了起始值和終止值的值,結果按鈕內的起始值和終止值的結果依然不變 ,比較簡單的說法是
如果你想要你傳入程序中的變數值在程序結束後會改變其結果那就應該傳址(byref),如果不想,那就應該傳值(byval),另外,如果你傳的是參考型別,那不論是傳值或是傳址都一樣是參考到位址- Public Class Form1
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim 陣列() As Integer = {1, 2, 3, 4, 5}
- 修改陣列值(陣列)
- For Each 元素 As Integer In 陣列
- MessageBox.Show(元素.ToString)
- Next
- End Sub
- Sub 修改陣列值(ByVal 修改後陣列() As Integer)
- For i As Integer = 0 To 修改後陣列.GetUpperBound(0)
- 修改後陣列(i) = i + 10
- Next i
- End Sub
- End Class
複製代碼 由以上的結果可知,就算是傳值,對於陣列而言,一樣會修改陣列中的值,只因為陣列是參考型別
- 函數
程序實際上並不能傳回值,我們有時候在程序執行完時想要有一些值回傳,這時候就需要函數
定義函數的語法如下
Function 函數名稱(ByVal 引數一 As 型態, ByVal 引數二 As 型態) As 型態
Return 變數
End Function
和程序不同的是,函數一定要傳回值,該回值的型態一定要和函數本身定義的型態相同
我們改寫上面的例子如下- Public Class Form1
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- MessageBox.Show(求總和(-10, 100).ToString)
- End Sub
- Function 求總和(ByVal 起始值 As Integer, ByVal 終止值 As Integer) As Integer
- Dim 總和 As Integer = 0
- For i As Integer = 起始值 To 終止值
- 總和 = 總和 + i
- Next
- Return 總和
- End Function
- End Class
複製代碼 很清楚的我們可以看到函數本身就可以有值
另外,函數本身亦回傳陣列以下為例- Public Class Form1
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- For Each 元素 In 回傳多個值()
- MessageBox.Show(元素.ToString)
- Next
- End Sub
- Function 回傳多個值() As Integer()
- Dim 回傳陣列() As Integer = {1, 2, 3, 4, 5}
- Return 回傳陣列
- End Function
- End Class
複製代碼
程序和函數都可以有多載,所謂的多載就是同樣的 函數/程序 名稱 ,但內部定義不同
,會有這種的方法主要是方便我們只要定一個 函數/程序 名稱 就可以做出不同的方法
多載的語法為只要在 函數/程序 之前加一個Overloads 就可以- Public Class Form1
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim 餐具 As String = "筷子"
- 飲食(餐具)
- 飲食()
- End Sub
- Sub 飲食(ByVal 餐具 As String)
- MessageBox.Show("台灣人用" & 餐具 & "吃飯")
- End Sub
- Overloads Sub 飲食()
- MessageBox.Show("印度人用右手將飯捏成一團來吃")
- End Sub
- End Class
複製代碼 |
|