บทที่ 11 การเขียนโปรแกรมแบบ Structured Programming และการจัดการตรวจสอบข้อผิดพลาด
การเขียนโปรแกรมแบบ StructuredProgramming คือการเขียนโปรแกรมอย่างมีแบบแผน และมีกรรมวิธีการคิดวางแผนการเขียนที่ดี ซึ่งจะต้องมีการคิดแบบทีละขั้นตอน แนวทางในการคิดมีหลายอย่างเช่น Divide & Conquer Stepwise Refinement Coupling
Divide & Conquer เป็นกรรมวิธี แตกโปรแกรมใหญ่เป็นโปรแกรมย่อย เช่น โปรแกรมการตรวจสอบอายุของผู้ใช้ สามารถแตกการทำงานเป็นส่วนๆดังนี้ ส่วนของการรับข้อมูลอายุ ส่วนของการตรวจสอบข้อมูลอายุ ส่วนของการแสดงผลลัพธ์
Stewise Refinement แตกแต่ละขั้นตอนที่แตกลงไปนั้นให้เพิ่มรายละเอียดปลีกย่อยจนครบถ้วน เช่น เขียนโปรแกรมคำนวณหาค่า Root ของสมการ ax2+bx+c =0 จะมีขั้นตอนดังนี้ รับค่า a,b,c ตรวจสอบว่ามี Root จริงหรือไม่ ถ้ามี Root ให้คำนวณ Root โดยใช้สูตร root1 = (-b+sqr(b^2-4ac) root2 = (-b-sqr(b^2-4ac) พิมพ์ค่า a,b,c,root1,root2
Coupling การเขียนโปรแกรมย่อย Standard Subroutine Procedure ให้ใช้แบบ Sub ชื่อ Procedure ([argument]) ……………… End sub การเขียนโปรแกรมด้วย Standard Function Procedure ให้ใช้แบบ Function ชื่อ Function ([argument])[as ชนิดข้อมูล] ………….. End Function
สรุปชนิดของข้อผิดพลาดที่เกิดขึ้นในโปรแกรม Visual Basic แบ่งได้ทั้งหมด 3 ชนิดดังนี้ Syntax Error Runtime Error Logical Error
Syntax Errors เกิดจากการที่เราเขียนโค้ดไม่สอดคล้อง หรือไม่ถูกหลักเกณฑ์ไวยากรณ์ภาษาVisual Basic เช่น Private Sub Command1_Click() Dim strCurrency As String strCurrency = Format(1000.25, #,##0.00) Print strCurrency End Sub เมื่อรันซับโพรซีเยอร์นี้ VB จะตรวจพบข้อผิดพลาด พร้อมทั้งแจ้ง Message Box บอกข้อผิดพลาดดังรูป
Syntax Errors เนื่องจากไม่มีเครื่องหมาย “ “
Syntax Errors เช่น If I = 0 I = I+1 End if จะเห็นว่าขาดคำว่า Then ทำให้ Error
Runtime Error ข้อผิดพลาดชนิดนี้ เป็นข้อผิดพลาดที่ตรวจสอบยากกว่า Syntax Errors เพราะต้อง รันโปรแกรมแล้ว จึงจะรู้ว่าเกิดข้อผิดพลาด อย่างเช่น ในกรณีที่เรามีการหารด้วยตัวเลข 0 เมื่อโปรแกรมรันมาถึงบรรทัดนี้จะเกิด Error พร้อมกับแจ้งว่า มีข้อผิดพลาดที่บรรทัดนี้ เป็นต้น ตัวอย่างเช่น Private Sub Command1_Click() Dim x As Integer, y As Integer x = 100 y = x / 0 MsgBox "ค่า y เท่ากับ" & y, vbInformation, "ค่า y" End Sub
Runtime Error เมื่อรันซับโพรซีเยอร์นี้ Visual Basic จะตรวจพบข้อผิดพลาด พร้อมทั้งแจ้ง Message Box บอกข้อผิดพลาดด้วย ดังรูป
Logical Error ข้อผิดพลาดนี้ คือลักษณะผลลัพธ์ที่ไม่ถูกต้องเวลามีการคำนวณหรือประมวลนั่นเอง สาเหตุที่เกิดขึ้นอาจมาจากตัวผู้เขียนโปรแกรมโดยตรง คือ ผู้เขียนโปรแกรมมีความเข้าใจผิดพลาดแล้วเขียนโปรแกรมตามความเข้าใจที่ผิดนั้น ข้อผิดพลาดชนิดนี้เป็นข้อผิดพลาดที่ตรวจพบได้ยากที่สุดเนื่องจากโปรแกรม Visual Basic ไม่สามารถตรวจพบข้อผิดพลาดได้นั่นเอง ดังตัวอย่างเช่น
Logical Error Private Sub Command1_Click() If Len(txtSource.Text) = 0 Then MsgBox "ข้อความที่ส่งมาคือ" & txtSource.Text Else MsgBox "กรุณากรอกข้อความด้วย" End If End Sub
การตรวจสอบและแก้ไขข้อผิดพลาด (Error Object and Debug Tools) Auto Syntax Check เป็นการกำหนดให้ Editor ตรวจสอบหาข้อผิดพลาดทางด้าน Syntax ทุกครั้ง Require Variable Declaration เป็นการกำหนดให้ Editor ตรวจหาว่าตัวแปรใดในโปรแกรมที่ไม่ได้ Declare ไว้ Auto List Members เป็นการกำหนดให้ Editor แสดง Property หรือ Method ที่เกี่ยวข้องกับประโยคคำสั่งที่เรากำลังพิมพ์บนจอภาพในรูปของ Dropdown ListBox ดังรูป
การตรวจสอบและแก้ไขข้อผิดพลาด (Error Object and Debug Tools)
การตรวจสอบและแก้ไขข้อผิดพลาด (Error Object and Debug Tools) 4. Auto Quick Info เป็นการกำหนดให้ Editor แสดง Pop-Up Box ซึ่งเป็น กรอบสี่เหลี่ยมเล็กใต้ประโยคคำสั่งที่เรากำลังพิมพ์บนจอภาพเพื่อแสดงถึง รูปแบบของฟังก์ชั่นนั้นๆ ดังรูป
คำสั่งสำหรับจัดการกับข้อผิดพลาด ใน ภาษา Visual Basic มีคำสั่งพิเศษสำหรับจัดการกับ Error ที่เกิดขึ้นขณะ Runtime 3 แบบ คือ 1. On Error Goto Label : คำสั่งนี้จะคอยตรวจจับ Error ที่เกิดขึ้นในขณะ Runtime เมื่อเกิด Error จะกระโดยไปทำงานที่ Label ที่กำหนด โดย Label คือข้อความทีมีเครื่องหมาย “ : ” ต่อท้าย เช่น
ตัวอย่างโปรแกรมรับตัวเลขเท่านั้น Private Sub Command1_Click() Dim sum As Integer sum = InputBox(“กรุณาใส่ตัวเลขจำนวนเต็มด้วย “, “รับข้อมูล “) MsgBox sum End Sub
เมื่อ Run โปรแกรมทดลองใส่ตัวเลขและตัวอักษร การป้อนข้อมูลที่เป็นตัวเลขที่มีจำนวนมากกว่าขอบเขตของ Integer หรือมีทศนิยม การป้อนข้อมูลที่เป็นตัวอักษร
คำสั่งสำหรับจัดการกับข้อผิดพลาด Private Sub Command1_Click() On Error GoTo ErrTrap Dim sum As Integer sum = InputBox(“กรุณาใส่ตัวเลขจำนวนเต็มด้วย “, “รับข้อมูล “) MsgBox sum ErrTrap: Exit Sub End Sub เมื่อ Run โปรแกรมทดลองใส่ตัวอักษรจะจบจากคำสั่ง Command1_Click( ) ไม่ Error
คำสั่งสำหรับจัดการกับข้อผิดพลาด 2. On Error Resume Next : คำสั่งนี้จะไม่สนใจ Error ที่เกิดขึ้น ถ้าเกิด Error จะทำงานต่อไปทันทีโดยไม่มีการฟ้อง Error ขึ้น เช่น Private Sub Command1_Click() On Error Resume Next Dim sum As Integer sum = InputBox(“กรุณาใส่ตัวเลขจำนวนเต็มด้วย “, “รับข้อมูล “) MsgBox sum End Sub
คำสั่งสำหรับจัดการกับข้อผิดพลาด 3. On Error Goto 0 : คำสั่งนี้สำหรับยกเลิก คำสั่ง On Error ต่างๆ ที่เคยประกาศมา