ในบทความนี้เราจะมาเรียนรู้คำสั่ง case และการวนลูปแบบต่าง ๆ ซึ่งจำเป็นมากสำหรับการเขียนโปรแกรมให้มีประสิทธิภาพ
คำสั่ง Select-Case
คำสั่งนี้เหมาะสำหรับกรณีที่มีเงื่อนไขมาก ๆ เพราะถ้าเราใช้เงื่อนไขแบบ If-Then-ElseIf จะทำให้สับสนมากเพราะถ้ากรณีที่เราต้องการตรวจสอบเงื่อนไขมาก ๆ แล้วเราจะไม่สามารถจัดกลุ่มหรือจัดระเบียบให้โค้ดเรียบร้อยได้เลย แต่ด้วยคำสั่ง Select Case จะช่วยลดขั้นตอนและความสับสนทั้งหมดที่เกิดขึ้นมาได้ ซึ่งมีรูปแบบการใช้งานดังนี้
Select Case testexpression Case expressionlist1 statements1 Case [Is] expressionlist2 statements2 [Case [Is] expressionlist-n ] [statements-n ] Case Else elsestatements End Select |
คำสั่ง Select Case หมายถึง เริ่มกรณีตรวจสอบแบบ Select Case
ตัวแปร testexpression หมายถึง ตัวแปรที่จะนำมาตรวจสอบ
ตัวแปร expressionlist1 หมายถึงค่าของตัวแปรในกรณีที่ 1
ตัวแปร statement1 หมายถึง ชุดคำสั่งที่ต้องกระทำ เมื่อค่าของตัวแปรตรงกับกรณีที่ 1
ตัวแปร expressionlist2 หมายถึงค่าของตัวแปรในกรณีที่ 2
ตัวแปร statement2 หมายถึง ชุดคำสั่งที่ต้องกระทำ เมื่อค่าของตัวแปรตรงกับกรณีที่ 2
คำสงวน Is จะใช้ในกรณีที่เราใส่เฉพาะเงื่อนไข ซึ่ง Visual Basic จะใส่ให้เราโดยอัตโนมัติ
คำสั่ง Case Else หมายถึง เมื่อค่าของตัวแปร ไม่เท่ากับกรณีที่ผ่านมาทั้งหมด ให้มาที่กรณีนี้
ตัวแปร elsestatements หมายถึง ชุดคำสั่งสำหรับกรณีที่ค่าของตัวแปรไม่ตรงกับกรณีใดเลย
คำสั่ง End Select หมายถึง จบการตรวจสอบแบบ Select Case เช่น
Private Sub Command1_Click() Dim counter As Integer counter = 6 Select Case v Case Is < = 5 Debug.Print " counter less than or equal 5" Case Is < = 7 Debug.Print " counter less than or equal 7" Case Else Debug.Print " counter is very big" End Select End Sub |
จากตัวอย่างข้างต้น ให้ลองทดสอบเปลี่ยนค่าของตัวแปร counter ไปเรื่อยๆ สังเกตผลที่หน้าต่าง Immediate
กลุ่มคำสั่งที่ใช้สำหรับสั่งให้ทำซ้ำ (Iterations)
คำสั่งในกลุ่มนี้เป็นอีกกลุ่มหนึ่งที่เราจะต้องใช้งานบ่อยที่สุดเช่นกันเพราะมีหน้าที่สำหรับสั่งให้โปรแกรมประมวลผลซ้ำกลุ่มคำสั่งเดิมไปเรื่อย ๆ จนกว่าจะตรงกับเงื่อนไขที่เราต้องการและนอกจากนี้ยังมีหน้าที่สำหรับลดขั้นตอนในการเขียนโค้ดที่มีลักษณะเหมือนๆ กันได้อีกด้วย คำสั่งวนซ้ำที่สำคัญประกอบด้วย
· For-Next
· Do While-Loop
· Do-Loop While
· Do Until-Loop
· Do-Loop Until
คำสั่ง For-Next
For-Next เป็นชุดคำสั่งสำหรับการทำซ้ำที่มีจำนวนรอบหรือขอบเขตที่ต้องการให้ทำซ้ำที่แน่นอน มีรูปแบบการใช้งานดังนี้
For counter = start To end [Step step ] statements [Exit For] [statements ] Next [counter ] |
ตัวแปร counter หมายถึง ตัวแปรที่เรากำหนดขึ้นมาเพื่อเป็นตัวนับรอบที่ใช้ในการวนลูป
ตัวแปร start หมายถึง ค่าเริ่มต้นของตัวนับเป็นเลขจำนวนจริง เราควรที่จะใช้เลขจำนวนเต็มเท่านั้น เพื่อง่ายต่อการตรวจสอบค่าตัวนับ
คำสงวน To หมายถึง ขอบเขตการนับ
ตัวแปร end หมายถึง ค่าสิ้นสุดของตัวนับไม่จำเป็นต้องเป็นตัวเลขในบางครั้งเราอาจสร้างเป็นเงื่อนไขที่ไม่ใช่ตัวเลขก็ได้ แต่ในการใช้งานโดยทั่วๆ ไปจะเป็นตัวเลขและควรจะเป็นเลขจำนวนเต็มด้วย
คำสงวน Step หมายถึง เป็นการกำหนดค่าที่จะเพิ่มขึ้นของตัวนับในแต่ละรอบ ถ้าไม่กำหนดจะเพิ่มรอบละ 1
ตัวแปร step หมายถึง ค่าของตัวนับที่จะเพิ่มขึ้นในแต่ละรอบจะต้องเป็นเลขจำนวนจริงเท่านั้น ในการใช้งานตามปกติ เราควรใช้เลขจำนวนเต็มเพื่อง่ายต่อการตรวจสอบจำนวนรอบในภายหลัง
ตัวแปร statements หมายถึง ชุดคำสั่งที่เราต้องการวนลูป
คำสั่ง Exit For หมายถึง คำสั่งที่บังคับให้ออกจากลูปทันทีจะใช้ในบางกรณีเท่านั้น เช่น การดักจับข้อผิดพลาด
สำหรับตัวอย่างการใช้งานคำสั่ง For-Next มีดังนี้
Private Sub Form_Activate() Dim i As Integer For i = 1 To 10 Print i Next i End Sub |
ตัวอย่างดังกล่าว เป็นการพิมพ์เลขตั้งแต่ 1-10 ลงบนฟอร์ม ให้ผู้อ่านลองเปลี่ยน step จาก 1 เป็น 2 แล้วสังเกตผล
คำสั่ง Do While-Loop
คำสั่ง Do While-Loop เป็นคำสั่งทำซ้ำที่มีจำนวนรอบของการทำคำสั่งขึ้นอยู่กับเงื่อนไข
Do While condition statements [Exit Do] Loop |
ตัวแปร condition หมายถึง เงื่อนไขที่เรากำหนดขึ้นมา
ตัวแปร statements หมายถึง ชุดคำสั่งที่ต้องการทำซ้ำ
คำสั่ง Exit Do หมายถึง ออกจาก Do While-Loop ทันที
คำสั่ง Loop หมายถึง ขอบเขตสิ้นสุดการวนลูป
การทำซ้ำแบบ Do While นี้ จะวนลูปก็ต่อเมื่อเงื่อนไข (ตัวแปร condition) ยังเป็นจริงอยู่ถ้าเงื่อนไขดังกล่าวเป็นเท็จเมื่อใดก็จะออกจากลูปทันที
Private Sub Form_Activate() Dim i As Integer Do While i <= 10 Print i i = i + 1 Loop End Sub |
ตัวอย่างด้านบนจะมีผลเหมือนกับลูป For-Next เพียงแต่เปลี่ยนลักษณะวนลูปและเงื่อนไข มีข้อที่น่าสังเกตคือ การใช้ลูปแบบนี้จะมีโอกาสที่ไม่ต้องวนลูปเลยแม้แต่รอบเดียวนั่นคือ ถ้าเงื่อนไขที่เข้ามาเป็นเท็จก็ไม่ต้องวนทันที เช่น
Private Sub Form_Activate() Dim i As Integer i = 11 Do While i <= 10 Print i i = i + 1 Loop End Sub |
จะเห็นได้ว่าบนฟอร์มไม่มีการพิมพ์เลข แต่อย่างใดเพราะตัวแปร i มีค่าเท่ากับ 11 ส่งผลให้เงื่อนไขเป็นเท็จทันที
คำสั่ง Do-Loop While
คำสั่ง Do While-Loop เป็นคำสั่งทำซ้ำที่มีจำนวนรอบของการทำคำสั่งขึ้นอยู่กับเงื่อนไข เช่นเดียวกับ Do While-Loop
Do statements [Exit Do] Loop While condition |
ตัวแปร condition หมายถึง เงื่อนไขที่เรากำหนดขึ้นมา
ตัวแปร statements หมายถึง ชุดคำสั่งที่ต้องการทำซ้ำ
คำสั่ง Exit Do หมายถึง ออกจาก Do- Loop While ทันที
คำสั่ง Loop หมายถึง ขอบเขตสิ้นสุดการวนลูป
จะเห็นได้ว่ามีลักษณะคล้ายกับแบบที่ 1 เพียงแต่ย้ายเงื่อนไขมาไว้ด้านล่างซึ่งหมายความว่า ลูปแบบนี้จะวนอย่างน้อยที่สุด 1 รอบ เพื่อตรวจสอบเงื่อนไข (ตัวแปร condition) ในรอบแรกที่เข้ามาก่อนว่าเป็นจริง หรือเท็จ ถ้าจริงก็จะวนลูปต่อไปตามปกติ แต่ถ้าเป็นเท็จ จะออกจากลูปทันที เช่น
Private Sub Form_Activate() Dim i As Integer Do Print i i = i + 1 Loop While i <= 10 End Sub |
เช่นกัน ตัวอย่างนี้เป็นการพิมพ์เลขตั้งแต่ 1 ถึง 10 บนฟอร์มให้ผู้อ่านลองเปลี่ยนเงื่อนไขดังนี้
Private Sub Form_Activate() Dim i As Integer i = 11 Do Print i i = i + 1 Loop While i <= 10 End Sub |
ข้อแตกต่างของลูป Do While - Loop กับ Do-Loop While นั่นคือถ้าเป็น Do While-Loop กรณีที่เงื่อนไขเป็นเท็จบนฟอร์มจะไม่ปรากฏตัวเลขอะไรเลยเพราะเนื่องจากว่าไม่ได้มีการวนลูปแต่อย่างใดเพราะเงื่อนไขเป็นเท็จ (ค่า I = 11) เราเรียกโครงสร้างแบบนี้ว่า Pre loop test ส่วนลูปแบบ Do-Loop While จะปรากฎค่าของตัวเงื่อนไขออกมาก่อน ถ้าจริงก็จะวนลูปตามปกติแต่กรณีนี้เป็นเท็จจึงแสดงค่าออกมา 1 ค่า ซึ่งเกิดมาจากการวนรอบแรกนั่นเอง เราเรียกโครงสร้างแบบนี้ว่า Post loop test
คำสั่ง Do Until-Loop
คำสั่ง Do Until-Loop มีหน้าที่สั่งให้วนลูปโดยมีจำนวนรอบที่ทำคำสั่งขึ้นอยู่กับเงื่อนไข (condition) ถ้าเงื่อนไขเป็นเท็จจึงจะวนลูปแต่ถ้าเป็นจริงจะไม่มีการวนแต่อย่างใดซึ่งจะตรงกันข้ามกับลูปชนิด Do While-Loop มีรูปแบบการใช้งานดังนี้
Do Until condition statements [Exit Do] statements Loop |
ตัวแปร condition หมายถึง เงื่อนไขที่เรากำหนดขึ้นมา
ตัวแปร statements หมายถึง ชุดคำสั่งที่ต้องการทำซ้ำ
คำสั่ง Exit Do หมายถึง ออกจาก Do Until- Loop ทันที
คำสั่ง Loop หมายถึง ขอบเขตสิ้นสุดการวนลูป เช่น
Private Sub Command1_Click() Dim x As Integer Do Until x >= 10 Print x x = x + 1 Loop End Sub |
ตัวอย่างนี้เป็นการพิมพ์เลข 1 ถึง 10 ลงบนฟอร์ม ทุกๆ ครั้งที่มีการคลิ๊กที่ปุ่ม Command1
คำสั่ง Do-Loop Until
คำสั่งการวนลูปแบบ Do-Loop Until มีลักษณะคล้ายกับลูปแบบ Do-Loop While เพียงแต่เงื่อนไขที่เข้ามาจะต้องเป็นเท็จ จึงจะวนลูป ถ้าเงื่อนไขเป็นจริงจะออกจากลูปทันทีการใช้ลูปแบบนี้จะมีการวนอย่างน้อยที่สุด 1 รอบเช่นกัน เนื่องจากการวนรอบแรกที่จะต้องมีการตรวจสอบเงื่อนไขนั่นเองมีรูปแบบการใช้งานดังนี้Do statements [Exit Do] [statements ] Loop Until condition |
ตัวแปร condition หมายถึง เงื่อนไขที่เรากำหนดขึ้นมา
ตัวแปร statements หมายถึง ชุดคำสั่งที่ต้องการทำซ้ำ
คำสั่ง Exit Do หมายถึง ออกจาก Do Loop-Until ทันที
คำสั่ง Loop หมายถึง ขอบเขตสิ้นสุดการวนลูป เช่น
Private Sub Command1_Click() Dim x As Integer x = 11 Do Print x x = x + 1 Loop Until x >= 10 End Sub |
จากตัวอย่างนี้จะเห็นได้ว่า ค่า x =11 ซึ่งถึงแม้ว่าจะทำให้เงื่อนไขเป็นจริง (ออกจากลูป) ก็ตามแต่ฟอร์ม ก็ยังคงพิมพ์ค่า x ออกมา 1 ค่าเนื่องจากการวนรอบแรกนั่นเอง
Note: สังเกตว่าในกรณีที่เราประกาศตัวนับเป็นเลขจำนวนเต็มชนิด Integer ขอให้ระวังเกี่ยวกับจำนวนรอบ เนื่องจากขอบเขตของข้อมูลขนิด Integer มีค่าระหว่าง -32768 ถึง 32767 ซึ่งถ้าเราใช้แต่ค่าบวกจะทำให้ตัวแปรดังกล่าว สามารถวนได้เพียง 32768 รอบเท่านั้น เราสามารถทดลองโดยเขียนโปรแกรมการวนซ้ำมากกว่า 32767 รอบจะพบว่าเกิด runtime error ‘6’ Overflow |
วันนี้เราก็ได้จบเรื่อง Statement ทั้งหมดของ VB ไว้เท่านี้ ในบทความต่อไปเราจะพูดถึงโพรซีเยอร์ ซึ่งถือว่าสำคัญมากในการเขียนโปรแกรมที่โปรแกรมเมอร์ต้องได้พบเจอร์ โพรซีเยอร์ที่สำคัญก็มีแค่ 2 ชนิดคือ ซับรูทีนและฟังก์ชัน