whx副程式与函式.ppt_第1页
whx副程式与函式.ppt_第2页
whx副程式与函式.ppt_第3页
whx副程式与函式.ppt_第4页
whx副程式与函式.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、副程式與函式,副程式 (Sub routine),請注意,副程式需要有一個名字,命名規則與變數相同。,叫用.NET本身提供的系統函式,來取得時間,顯示目前的時間。,呼叫副程式,利用Call指令來呼叫剛才建立好的副程式,Practice (練習),Sub Main() for i as integer =1 to 10 console.writeline(i) Next Pause() End Sub Sub Pause() console.writeline() console.write(“=程式暫停中,請按任意鍵繼續 console.readkey() End Sub,Function (

2、函式),這邊設定的叫做參數,Function也要有名字,Return指令用來結束Function並把值傳回,請特別注意,Function需要指定回傳值的型別,傳回值,副程式與函式最大的不同 函式有傳回值,Parameters (參數傳遞),參數一,參數二,參數傳遞方式,呼叫函式,宣告一個變數來接收函式的回傳值,Example,練習範例CH04-03 建立一個函式,讓使用者輸入圓的的半徑,該函式就傳回圓的面積 提示:假設半徑為 r,則圓面積的計算公式為:r*r*3.14159 建立一個函式,讓使用者輸入矩形的長跟寬,該函式就傳回矩形的面積,參數傳遞方式比較,ByVal v.s. ByRef Ca

3、ll by value (傳值呼叫) 傳遞變數的值 Call by reference (傳址呼叫) 傳遞變數在記憶體位置,範例,主程式呼叫Swap時,以ByRef方式來傳入a,b兩個參數,請注意,以ByRef傳入的n1,n2參數,就是主程式中的a,b,不只是接收a,b的值,是完全等於a,b,絃外之音,Call by reference 另類的回傳值,Bubble Sort (泡沫排序法),Example,Sub Main() Dim a() As Integer = 4, 15, 23, 1, 57, 21, 722, 3, 6, 89, 24, 5, 62 排序 Sort(a) 顯示 Fo

4、r i As Integer = 0 To UBound(a) Console.Write(a(i) & ,) Next console.writekey() End Sub 排序 Sub Sort(ByRef arr() As Integer) For x As Integer = 0 To UBound(arr) For y As Integer = x + 1 To UBound(arr) If arr(x) arr(y) Then Swap(arr(x), arr(y) Next Next End Sub,替換兩個變數中的值 Sub Swap(ByRef n1 As Integer,

5、ByRef n2 As Integer) Dim c As Integer c = n1 n1 = n2 n2 = c End Sub ,Optional,以此關鍵字修飾的參數被定義後,主程式在呼叫該函數時,可以省略此參數,因為Optional修飾字的關係,就算在呼叫add這個Function時,沒有填入參數b值也不會有錯誤訊息,變數的存留期與存取範圍,存留期 變數在記憶體當中佔有的時間,從什麼時候開始到什麼時候結束 存取範圍 程式碼中可以存取特定變數的範圍 Global(全域變數) v.s. Local(區域變數),請注意這個變數宣告在主程式Sub Main()的外面,稱之為全域變數。,這個

6、變數宣告在Function GetUserName()裡面,稱之為區域變數。,這邊用到了第2行所定義的全域變數。,何時需要定義一個全域變數呢?假設這個變數需要被所有函式存取,則我們會將其定義為全域變數。 區域變數則比較簡單,假設某個變數僅會在一定的範圍內存取,我們就會設計成區域變數。,Do 和 Loop區域 For Each 和 Next區域 If 和 End If區域 Select 和 End Select區域 SyncLock 和 End SyncLock Try 和 End Try區域 While 和 End While區域 Sub和End Sub區域 Function和End Func

7、tion區域,以Static關鍵字宣告的變數是靜態變數,其值會被保留,不會隨著所在的副程式(或函式)的結束而消失,以Static關鍵字宣告的變數是靜態變數,其值會被保留,不會隨著所在的副程式(或函式)的結束而消失,Static (靜態變數),前面我們介紹過怎麼自己定義副程式和函式,但是其實在.NET Framework當中,已經有內建相當豐富的函式庫,並且依照不同的功能區分。 例如當我們撰寫程式時,需要使用到與數學函式有關的部份,可以在程式碼輸入區鍵入System.Math.:,.Net Class Library,類別庫包羅萬象,無法在書籍中完全加以介紹,但是透過命名空間,對於類別庫的使用,

8、則可以有個概略性的思考方式。 例如在.NET Framework當中,與數學有關的系統函式都會位於System.Math命名空間底下,因此如果要尋找某些特定的函式,可以從命名空間開始思考。,命名空間是為了區分龐大的函式庫所採用的方法,因為.NET提供了一整套複雜且龐大的內建函式,如果不加以分門別類,上萬個各式各樣的內建函式將會難以分辨。因此,我們可以透過命名空間來對函式庫加以分類,例如Systm.Math.Sqrt()這個寫法當中,Sqrt是函式名稱,而System和Math則是命名空間。 這也表示了,命名空間下面還可以有命名空間,如此一來,也有另一個好處,就是即使函式名稱相同,我們也可以冠上

9、不同的命名空間來加以區分。例如,假設我們自己撰寫了一個同名的Sqrt函式,我們可以在這個函式上面冠上不同的命名空間,例如StudyHost.Math.Sqrt,以區別不同的函式。,除了透過System命名空間來存取.NET提供的內建函式之外,在Visual Basic 2005當中有一個捷徑,就是My Class。 My Class機制透過簡單的My關鍵字,讓程式設計師可以輕鬆的引用.NET Framework的功能。我們只需要在程式碼撰寫時,鍵入My.系統就會跳出可供使用的功能。例如My.Computer表示所有與我的電腦相關的功能:,My Class Library,模組是一群副程式的集合

10、,當我們在主程式中建立了很多副程式(或函式)之後,可以把功能相似的副程式歸類為一個模組,如此一來,開發人員在使用時也比較方便,不需要到處尋找程式碼片段。 同時,將主程式碼當中的功能切割成副程式,再歸類到一個模組檔案中,更可以讓開發程式的時候方便管理,後續的維護也會更加便利。特別是在多人同時開發一個專案的時候,這樣的好處會更加的明顯,這種將程式碼建立的更加結構的方式我們稱之為模組化。,何謂模組(Module),如何建立一個模組,如何建立一個模組,把需要用到的函式(或副程序)寫進模組裡,這樣在使用時就可以用簡潔的程式碼來呼叫這些函式(或副程序) ,一方面精簡主程式,另一方面可以讓程式容易維護! 更

11、重要的是,透過模組來撰寫應用程式,當我們把程式分割成獨立的幾個功能,且使用模組來設計之後,程式碼可以同時給多個開發人員一起開發,加快開發時程。此外,在這次專案中,建構好的模組,也可以在下次專案中重新拿出來使用,而不需要再撰寫一樣(或相似)的程式碼。,模組的功能,只需要打入模組名稱newmodule.VS2005就會帶出該模組中可用的函式(剛才我們建了一個Pause)出來給我們選擇。,主程式當中,可以這麼使用它:,在剛才建立好的模組檔案中,設計一個Sub,模組的使用,請在函式或副程式上頭,連續打三個,就會自動出現這串文字,請在和中,手動入輸入註解,函式自動註解功能,模組中函式的可用範圍,當我們將

12、模組A中的Sub C()加了Private關鍵字之後,我們的主程式Module1當中的Sub Main(),想要叫用模組A的Sub C()時,就不可行了:,當Sub C()加上了Private關鍵字之後,模組內的Sub B()和Sub D()都可以呼叫Sub C(),但是模組A之外的其他程式碼,則無法透過A.C()的方式來呼叫模組內的Sub C():,請撰寫一個函式,名稱為GetNumber,接收的參數為msg(String型別),並且回傳Integer型別的回傳值,必須具備顯示Msg並且要求使用者輸入數字的功能,以取代範例CH04-03程式碼中的4-5行和6-7行,讓範例CH04-03的主程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论