แสดงบทความที่มีป้ายกำกับ คำสั่ง (Statement) และโพรซีเยอร์ (Procedure) ภาค2 แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ คำสั่ง (Statement) และโพรซีเยอร์ (Procedure) ภาค2 แสดงบทความทั้งหมด

วันศุกร์ที่ 2 กันยายน พ.ศ. 2554

คำสั่ง (Statement) และโพรซีเยอร์ (Procedure) ภาค2

ในบทความนี้เราจะมาเรียนรู้คำสั่ง 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 ชนิดคือ ซับรูทีนและฟังก์ชัน