240 likes | 445 Views
第 7 章 程序與函數. Ren-Jie Wang, 王 仁 傑 , Ph.D. rjwang@nutc.edu.tw http://rjwang.myweb.hinet.net. 第 7 章 程序與函數. 7-1 模組化程式設計 7-2 程序與函數 7-3 程序與函數的變數範圍 7-4 常用的內建函數 7-5 遞迴函數. 7-1-2 程序與函數是一個黑盒子 - 圖例.
E N D
第7章程序與函數 Ren-Jie Wang,王 仁 傑, Ph.D. rjwang@nutc.edu.tw http://rjwang.myweb.hinet.net
第7章 程序與函數 • 7-1 模組化程式設計 • 7-2 程序與函數 • 7-3 程序與函數的變數範圍 • 7-4 常用的內建函數 • 7-5 遞迴函數
7-1-2 程序與函數是一個黑盒子-圖例 • 程式碼只知道呼叫程序時,需要傳入的參數和取得傳回值。它是程序函數和外部溝通的使用介面,一個對外的邊界,實際程式碼內容是隱藏在使用介面後,我們將程序與函數實際內容的程式碼撰寫稱為「實作」(Implementation)。
7-2 程序與函數 • 程序與函數可以將程式中,一些常用的共同程式碼獨立成區塊,也就是建立結構化程式設計的模組。 • Visual Basic程序可以分為兩種,如下: • 事件處理程序:事件處理程序是處理指定事件的程序(一定是Sub,因為不會有傳回值)。 • 一般程序:將程式區塊使用一個程序或函數名稱來代替,以便呼叫程序與函數來執行特定功能。Visual Basic程序分為兩種: • Sub程序 • Function函數。
7-2-1 建立Sub程序-建立程序(說明) • Visual Basic語言的程序是使用Sub和End Sub包圍的程式區塊,在Sub關鍵字後是程序名稱,程序並沒有傳回值。 • 在Visual Basic程式建立程序的語法,如下所示: [Public | Private] Sub 名稱 程式區塊 End Sub • 上述Sub指令前的Public或Private是存取修飾子。
7-2-1 建立Sub程序-建立程序(範例) • 程序名稱的命名和變數名稱相同,在同一模組不能使用相同的程序名稱。例如:顯示課程名稱的程序,如下所示: Sub PrintCourseTitle() Dim title As String title = "Visual Basic程式設計" lblOutput.Text = title & vbNewLine End Sub
7-2-1 建立Sub程序-呼叫程序 • 在程式碼呼叫程序是使用Call指令,我們只需在其後加上程序名稱即可,如下所示: Call PrintCourseTitle() • 上述程序呼叫因為程序沒有參數,也可以省略括號,或不使用Call關鍵字也可以,如下所示: PrintCourseTitle
7-2-2 建立Function函數-建立函數(說明) • Function函數類似Sub程序只是改為使用Function和End Function包圍,其主要差異是函數有傳回值。 • 在Visual Basic程式的函數語法,如下所示: [Public | Private] Function 名稱 [As 資料型別] 程式區塊 Return 值 | 名稱 = 值 End Function • As之後是傳回值的資料型別。函數傳回值是使用Return關鍵字來傳回值,或將函數名稱指定成需要傳回的值。
7-2-2 建立Function函數-建立函數(範例) • 例如:計算體脂肪BMI值的BMI()函數,如下所示: Function BMI() Dim result, h, w As Double h = CDbl(txtHeight.Text) w = CDbl(txtWeight.Text) result = w / ( h * h ) Return result End Function • 上述函數使用Return傳回最後結果。
7-2-2 建立Function函數-呼叫函數 • 函數因為擁有傳回值,通常都是在指定敘述來執行函數呼叫,並且位在指定敘述的右邊,如下所示: lblOutput.Text = BMI() • 將上述lblOutput標籤控制項的Text屬性指定成函數的傳回值。
7-2-3 擁有參數的程序與函數-建立(說明) • 在Visual Basic程式建立擁有參數的程序與函數,其語法如下所示: [Public | Private] [Sub | Function] 名稱(參數1 ,參數2, …) 程式區塊 [Return 值 | 名稱 = 值] End [Sub | Function] • 上述括號的參數稱為「正式參數」(Formal Parameters)或「假的參數」(Dummy Parameters)。
7-2-3 擁有參數的程序與函數-建立(程序範例) • 例如:顯示提示文字和訊息的程序,如下所示: Sub PrintMessage(msg As String, prompt As String) lblOutput.Text &= prompt & ":" & msg & vbNewLine End Sub • 上述程序擁有2個參數,因為參數不只一個,所以使用","逗號分隔。
7-2-3 擁有參數的程序與函數-建立(函數範例) • 例如:溫度轉換函數,如下所示: Function ConvertTemperature(C As Integer) Dim F As Single F = ( 9.0 * C ) / 5.0 + 32.0 Return F End Function • 上例,BMI(h,w)函數如何實作?
7-2-3 擁有參數的程序與函數-呼叫 • 程序與函數如果有參數,在呼叫時可以指定不同的參數值,擁有參數的程序呼叫,如下所示: PrintMessage(txtMsg.Text, txtPrompt.Text) • 每一個正式參數都需對應同型別的實際參數。同樣的,擁有參數的函數呼叫,如下所示: output = "華氏溫度:" & ConvertTemperature(C) • 上述程式碼呼叫函數來轉換攝氏成為華氏溫度。
7-2-4 傳值或傳址呼叫程序與函數-說明 • 程序與函數不只能夠傳遞參數,不同的參數傳遞方式將影響傳入參數的變數值。Visual Basic語言提供兩種參數傳遞方式,如下表所示:
7-2-4 傳值或傳址呼叫程序與函數-範例 • Visual Basic程序與函數預設使用傳值呼叫,如果沒有指明,預設是ByVal(舊版Visual Studio會自動加上ByVal,新版並不會),如下所示: Sub SubByVal(C As Integer) ….. End Sub • 事實上,只有傳址的程序或函數才需要特別指名ByRef,如下所示: Sub SubByRef(ByRef C As Integer) …. End Sub
傳值或傳址呼叫程序 • 實作傳址呼叫程序 • 交換—swap(ByRefa,ByRefb)
7-2-5 強迫跳出程序與函數-跳出程序 • 在執行程序時如果需要中斷程序的執行,可以使用Exit Sub跳出程序,如下所示: Sub Counter(times As Integer) …… Exit Sub …… End Sub
7-2-5 強迫跳出程序與函數-跳出函數 • 如果執行函數時需要中斷函數的執行,請使用Exit Function跳出函數,如下所示: Function SumOne2N(n As Integer) …… Exit Function …… End Function 強迫跳出 Exit for Exit do Exit sub Exit Fucntion
7-3-1 變數範圍-說明 • 「變數範圍」(Scope)是當程式執行時,變數可以讓程序或函數內或其他程式區塊存取的範圍。 • 變數依宣告位置擁有三種範圍,如下所示: • 區塊範圍(Block Scope):變數只能在區塊內使用 • If/End if、Select Case/End Case、For/Next、Do/Loop • 區域範圍(Local Scope):在Sub和Fucntion內使用Dim宣告的變數,變數只能在程序或函數內使用,程序或函數外程式碼並無法存取此變數。 • 全域範圍(Global Scope):在Module/Class中,以Dim或Private宣告在程序和函數外,則該Module/Class的程序和函數都可以存取此變數。
7-3-2 全域變數的應用 • 實作人氣投票
7-3-2 全域變數的應用-Visual Basic專案 Visual Basic專案:Ch7-3-2 • 在Windows應用程式建立熱門手機品牌的票選系統,只需選取選項按鈕後,按下按鈕即可參與票選,程式會記錄總投票人數和各手機廠牌的票數,如右圖所示: • 與上例同義,自行練習。
7-4 常用的內建函數 • 請參見課程網頁的整理 • 常用內建函數 • VB2012內建函數一覽表(MSDN 線上)
7-5 遞迴函數 • 請參見課程網頁的整理