การสร้างโพรซีเยอร์ทั่วไป (General Procedure)
ถึงแม้ว่า Visual Basic จะมีชุดคำสั่งและฟังก์ชันมาตรฐานอยู่มากมายแต่ก็ยังไม่สามารถครอบคลุมการทำงานได้ทั้งหมด เราสามารถสร้างซับรูทีนหรือฟังก์ชันขึ้นมาใช้งานเองได้ ซึ่งแยกออกได้ 2 แบบใหญ่ ๆ คือ
- ซับรูทีน (Sub routine) มีลักษณะเหมือนกับคำสั่งมาตรฐานใน Visual Basic กล่าวคือ เป็นชุดคำสั่งที่ไม่มีการส่งค่ากลับ
- ฟังก์ชัน (Function) มีลักษณะเช่นเดียวกับฟังก์ชันมาตรฐานใน Visual Basic ซึ่งจะส่งค่ากลับออกมา 1 ค่าเสมอ
การสร้างซับรูทีน (Sub routine)
ซับรูทีนจะต้องขึ้นต้นด้วย Sub ตามด้วยชื่อของซับรูทีนนั้น ซึ่งมีโครงสร้างทั่วไป ดังนี้
[Private | Public] [Static] Sub name [(arglist )] [statements ] [Exit Sub] [statements ] End Sub |
คำสงวน Private หมายถึง กำหนดให้ซับรูทีนที่สร้างขึ้นมามีขอบเขตในการเรียกใช้งานเฉพาะฟอร์มหรือโมดูลที่ประกาศเท่านั้น
คำสงวน Public หมายถึง กำหนดให้ซับรูทีนที่สร้างขึ้นมาสามารถถูกเรียกใช้งานได้ทุกส่วน
คำสงวน Static หมายถึง กำหนดให้ซับรูทีนเก็บรักษาค่าที่ได้จากการประมวลผลไว้ เมื่อมีการเรียกใช้งานซับรูทีนครั้งต่อๆ ไป ค่าดังกล่าวจะมีค่าเท่าเดิม
คำสั่ง Sub หมายถึง ต้องการสร้างโพรซีเยอร์ทั่วๆ ไปแบบซับรูทีน
ตัวแปร name หมายถึง ชื่อของซับรูทีน
ตัวแปร arglist หมายถึง อาร์กิวเมนต์ที่ต้องใช้ในซับรูทีน ซึ่งจะมีหรือไม่มีก็ได้
ตัวแปร statements หมายถึง ชุดคำสั่งต่างๆ ในซับรูทีน
คำสั่ง Exit Sub หมายถึง บังคับให้ออกจากซับรูทีนนี้ทันที
คำสั่ง End Sub หมายถึง จบโพรซีเยอร์
ตัวอย่างนี้เป็นการตรวจสอบตัวเลขที่น้อยที่สุดใน Text1 และ Text2 โดยการเรียกใช้ซับรูทีน smallest
'ซับรูทีนนี้ต้องการอาร์กิวเมนต์ 2 ตัว คือ a และ b ซึ่งในตัวอย่างนี้ค่าใน Text1 และ Text 2 จะผ่านค่า มาให้อาร์กิวเมนต์ 2 ตัวนี้ตามลำดับ Sub smallest(a As Integer, b As Integer) Dim min As Integer If a < b Then ‘ถ้าค่าใน Text1 < Text 2 min = a MsgBox "a is smaller (a = " & Str(min) & ")" ElseIf (a > b) Then ‘ถ้าค่าใน Text1 > Text 2 min = b MsgBox "b is smaller (b = " & Str(min) & ")" Else ‘ถ้าค่าใน Text1 = Text 2 min = a MsgBox "Both values are equal (a,b = " & Str(min) & ")" End If 'เรียกใช้ Private Sub Command1_Click() Dim x As Integer, y As Integer x = Val(Text1.Text) y = Val(Text2.Text) Call smallest(x, y) ‘เรียกใช้งานซับรูทีน smallest โดยใช้คำสั่ง Call End Sub |
การสร้างฟังก์ชัน (Function)
ฟังก์ชันจะต้องขึ้นต้นด้วย Function ตามด้วยชื่อของฟังก์ชันนั้น ฟังก์ชันเป็นโพรซีเยอร์ชนิดที่มีการคืนค่ากลับมาซึ่งต่างจากซับรูทีนที่ไม่มีการคืนค่า ฟังก์ชันมีโครงสร้างทั่วไป ดังนี้
[Public | Private] [Static] Function name [(arglist )] As type [statements ] [Exit Function] [statements ] End Function |
คำสงวน Private หมายถึง กำหนดให้ฟังก์ชันที่สร้างขึ้นมามีขอบเขตในการเรียกใช้งานเฉพาะฟอร์มหรือโมดูลที่ประกาศเท่านั้น
คำสงวน Public หมายถึงกำหนดให้ฟังก์ชันที่สร้างขึ้นมาสามารถถูกเรียกใช้งานได้ทุกส่วน
คำสงวน Static หมายถึง กำหนดให้ฟังก์ชันเก็บรักษาค่าที่ได้จากการประมวลผลไว้ เมื่อมีการเรียกใช้งานฟังก์ชันครั้งต่อๆ ไป ค่าดังกล่าวจะมีค่าเท่าเดิม
คำสั่ง Sub หมายถึง ต้องการสร้างโพรซีเยอร์ทั่วๆ ไป แบบฟังก์ชัน
ตัวแปร name หมายถึง ชื่อของฟังก์ชัน
ตัวแปร arglist หมายถึง อาร์กิวเมนต์ที่ต้องใช้ในฟังก์ชัน ซึ่งจะมีหรือไม่มีก็ได้
ตัวแปร As type หมายถึง ฟังก์ชันนี้ จะส่งข้อมูลชนิดใดกลับมา เช่น Integer, Long, Single เป็นต้น
ตัวแปร statements หมายถึง ชุดคำสั่งต่างๆ ในฟังก์ชัน
คำสั่ง Exit Function หมายถึง บังคับให้ออกจากฟังก์ชันนี้ทันที
คำสั่ง End Function หมายถึง จบโพรซีเยอร์
ต่อไปนี้เป็นตัวอย่างฟังก์ชันที่ชื่อว่า AddNum มีหน้าที่สำหรับบวกตัวเลข ต้องการอาร์กิวเมนต์ 2 ตัว โดยคืนค่ากลับเป็นข้อมูลชนิด Integer
Option Explicit Function AddNum(x As Integer, y As Integer) As Integer Dim z As Integer 'สำหรับรับค่าที่ได้จากการบวก z = x + y 'นำอาร์กิวเมนต์ที่เข้ามา 2 ตัวบวกกัน แล้วเก็บไว้ที่ตัวแปร z AddNum = z 'ถ่ายทอดค่าที่ได้ ไปยังฟังก์ชัน AddNum End Function 'จบฟังก์ชันแล้วส่งค่ากลับ (ชนิดข้อมูลแบบ Integer) ไปยังโพรซีเยอร์ ที่เรียกใช้งานฟังก์ชันนี้ Private Sub Form_Activate() Print AddNum(10, 20) 'แสดงผลลัพธ์ออกที่ฟอร์ม โดยเรียกใช้งานฟังก์ชัน AddNum และส่งอาร์กิวเมนต์เข้าไป 2 ตัว คือ 10 และ 20 End Sub |
ตัวอย่างฟังก์ชัน (ข้อสอบวิชา Visual Basic)
จงแก้สร้างฟังก์ชันสำหรับแก้ปัญหานี้
1. สร้างฟังก์ชันสำหรับการหาค่า factorial
2. สร้างฟังก์ชันสำหรับการประมาณค่า sin(x) โดยกำหนดให้ฟังก์ชัน
แล้วเปรียบเทียบกับฟังก์ชันมาตรฐาน Sin(Rad) และสังเกตุว่า n ที่น้อยที่สุดที่ทำให้การประมาณ sin(x) ใกล้กับ Sin(Rad) มีค่าเท่าใด
เฉลยตัวอย่างฟังก์ชัน
1. สร้างฟังก์ชันสำหรับการหาค่า factorial
Option Explicit Function Factorial(n As Integer) As Long Dim i As Integer If n < 1 Then MsgBox (“Error – Please try again”) Else Factorial = 1 For i =1 to n Factorial = Factorial * i Next i End If End Function Private Sub Command1_Click() Dim n As Integer, nFact As Long N = Val(Text1.Text) nFact = Factorial(n) Text2.Text = Str(nfact) End Sub |
2. สร้างฟังก์ชันสำหรับการประมาณค่า sin(x)
‘สร้างฟังก์ชัน Factorial Function Factorial(n As Integer) As Long Dim i As Integer If n < 1 Then Beep MsgBox (“Error – Please try again”) Else Factorial = 1 For i =1 to n Factorial = Factorial * i Next i End If End Function Private Sub Command1_Click() Const Pi As Single = 3.1415927 Dim i As Integer, n As Integer Dim Angle As Single, Rad As Single, Approx As Single, Exact As Single Dim Sum As Single, C As Single Angle = Val(Text1.Text) Rad = 2 * Pi * Angle / 360 ‘เปลี่ยนจากองศาเป็นเรเดียน n = Val(Text2.Text) Sum = 0 C = 1 For i = 1 To n Sum = Sum + C * Rad ^ (2 * i – 1) / Factorial(2 * i – 1) C = -C ‘กลับค่าสำหรับลำดับถัดไป Next i Approx = Sum Exact = Sin(Rad) Text3.Text = Str(Approx) Text4.Text = Str(Exact) End Sub |
ถึงแม้บทความนี้จะมีเนื้อหาสั้น ๆ แต่ก็ถือว่าเป็นหัวใจของ Visual Basic ถ้าสามารถทำความเข้าใจได้มากก็จะทำให้สามารถเขียนโปรแกรมด้วย Visual Basic หรือภาษาใด ๆ ได้ดียิ่งขึ้น และในบทความต่อไปเราจะศึกษาการเขียนโปรแกรมควบคุมเมาส์และคีย์บอร์ดโดยการเรียกใช้ชุดคำสั่งของ Visual Basic
เป็นประโยชน์ดีครับ เพิ่มอีกนะครับ
ตอบลบ