คำสั่งวนซ้ำ

ในบทนี้ คุณจะได้เรียนรู้การควบคุมโปรแกรม โดยใช้คำสั่งวนซ้ำในภาษา Visual Basic ซึ่งในการเขียนโปรแกรมนั้น มันเป็นไปได้ที่โปรแกรมจะต้องมีการทำงานซ้ำๆ กัน โดยการทำงานในคำสั่งเดิม ภายใต้เงือนไขหรือสภาพแวดล้อมที่เปลี่ยนไป

ซึ่งการที่จะควบคุมให้โปรแกรมสามารถทำงานแบบซ้ำๆ ได้นั้น ในภาษา Visual Basic เราจะใช้คำสั่งวนซ้ำ เป็นคำสั่งที่จะทำให้โปรแกรมทำงานด้วยโค้ดเดิมภายใต้เงือนไขบางอย่าง จนกว่าเงือนไขนั้นจะเป็นเท็จ (False)

Image on Marcuscode

ด้านบนเป็น flowchart ตัวอย่างการทำงานของคำสั่ง loop ในการนับตัวเลข โปรแกรมจะทำการนับและแสดงผลในขณะที่ตัวเลขน้อยกว่า 10 เราเรียกส่วนนี้ว่าการทำงานซ้ำหรือ loop นั่นเอง ในภาษา Visual Basic มีคำสั่ง loop ประเภทต่างๆ ดังนี้ While Do-While Do-Until และ For loop

คำสั่ง While loop

คำสั่ง While loop เป็นคำสั่งที่ง่ายและพื้นฐานที่สุดในภาษา Visual Basic ในการที่จะให้โปรแกรมทำงานซ้ำๆ มันมีรูปแบบการใช้งานดังนี้

While Expression
    statement
End While

การใช้งานจะใช้คำสั่ง While ตามด้วย Expression ซึ่งเป็นการกำหนดเงือนไขให้ While loop ทำงาน โปรแกรมจะทำงานใน loop ตราบใดที่เงือนไขยังคงเป็น True จนกว่ามันจะเป็น False โปรแกรมจะออกจาก loop และทำงานในคำสั่งต่อไป

ต่อไปมาดูตัวอย่างการใช้งานคำสั่ง While loop อย่างง่าย กับโปรแกรมนับเลข 1 ถึง 10 และแสดงผลลัพธ์ออกมาทางหน้าจอ

Module WhileLoop

    Sub Main()

        Dim i As Integer = 1
        While i <= 10
            Console.WriteLine("Count {0}", i)
            i = i + 1
        End While

    End Sub

End Module

นี่เป็นตัวอย่างพื้นฐานที่สุดในการใช้งานคำสั่ง loop เราได้เขียนโปรแกรมเพื่อให้นับเลขตั้งแต่ 1 ถึง 10

Dim i As Integer = 1

นี่เป็นคำสั่งในการกำหนดค่าเริ่มต้นสำหรับการนับ โปรแกรมของเราจะนับเริ่มจาก 1 และเราประกาศตัวแปร i สำหรับมาเก็บค่านี้

While i <= 10
    Console.WriteLine("Count {0}", i)
    i = i + 1
End While

นี่เป็นส่วนการทำงานของ While loop ทุกๆ ครั้งโปรแกรมจะทำการตรวจสอบเงือนไขว่าตัวแปร i น้อยกว่าหรือเท่ากับ 10 หรือไม่ใน i <= 10 ถ้าใช้ โปรแกรมจะแสดงผลตัวเลขใน loop และทุกครั้งเราจะเพิ่มค่าตัวแปรนับขึ้น i = i + 1

Count 1
Count 2
Count 3
Count 4
Count 5
Count 6
Count 7
Count 8
Count 9
Count 10

นี่เป็นผลลัพธ์ของโปรแกรมในการใช้ While loop นับตัวเลข

คำเตือน: ในการทำงานกับคำสั่ง loop คุณต้องแน่ใจกว่าเงือนไขใน loop นั้นสามารถเป็น False ได้ ไม่เช่นนั้นโปรแกรมจะทำงานใน loop ตลอดไปซึ่งเราเรียกว่า infinity loop ในตัวอย่างเราได้เพิ่มค่า i ขึ้นทุกครั้งเพื่อให้โปรแกรมออกจาก loop ในตอนที่มันแสดงครบ 10 ตัวเลขแล้ว

คำสั่ง Do While loop

คำสัง Do While loop เป็นคำสั่งวนซ้ำเช่นเดียวกันกับคำสั่ง While loop แต่ในการตรวจสอบเงือนไขนั้น จะทำการตรวจสอบหลังจากที่โปรแกรมได้ทำงานใน loop ไปแล้วอย่างน้อย 1 ครั้ง นี่เป็นรูปแบบการใช้งานคำสั่ง Do While loop ในภาษา Visual Basic

Do
    Statement
Loop While Expression

คุณจะสังเกตุว่า Expression นั้นจะถูกตรวจสอบในตอนท้ายของ loop ดังนั้นโปรแกรมจะทำงานใน loop ก่อนอย่างน้อย 1 ครั้งเสมอ ต่อไปมาดูตัวอย่างการใช้งานคำสั่ง Do while loop ในภาษา Visual Basic

Module DoWhileLoop

    Sub Main()

        Dim name As String
        Do
            Console.Write("Enter name: ")
            name = Console.ReadLine()
            Console.WriteLine("Hello {0}", name)
        Loop While name <> ""

        Console.WriteLine("Goodbye all")

    End Sub

End Module

นี่เป็นตัวอย่างโปรแกรมในการรับชื่อ และแสดงข้อความทักทาย เราได้ประกาศตัวแปร name เพื่อเก็บชื่อ

Do
    Console.Write("Enter name: ")
    name = Console.ReadLine()
    Console.WriteLine("Hello {0}", name)
Loop While name <> "Mark"

ภายใน loop โปรแกรมจะถามให้ใส่ชื่อ และจะแสดงข้อความทักทายชื่อที่ใส่เข้ามา และโปรแกรมจะทำงานในขณะที่ชื่อที่ใส่เข้ามานั้นไม่เป็น "Mark" ซึ่งเราตรวจสอบโดยเงือนไข name <> "Mark" นั่นคือถ้าชื่อที่ใส่มาเป็น Mark โปรแกรมจะจบการทำงานใน loop ทันที

Enter name: Mateo
Hello Mateo
Enter name: Danny
Hello Danny
Enter name: Callie
Hello Callie
Enter name: Mark
Hello Mark
Goodbye all

นี่เป็นตัวอย่างผลลัพธ์ของโปรแกรมการใช้คำสั่ง Do While loop เราได้กรอกชื่อ Mateo Danny Callie และสุดท้ายเราได้กรอกชื่อ Mark ตามลำดับ ทำให้โปรแกรมจะสิ้นสิ้นสุดการทำงานเพราะว่าเงือนไขไม่เป็นจริงอีกต่อไป

คำสั่ง Do Until loop

คำสั่ง Do Until loop เป็นคำสั่งวนซ้ำที่ออกแบบมาสำหรับใช้ตรงกันข้ามกับคำสั่ง Do While loop โดยการทำงานในตอนแรกนั้นจะเหมือนกัน โปรแกรมจะทำงานในลูปก่อนอย่างน้อย 1 ครั้ง นี่เป็นรูปแบบการใช้งานคำสั่ง Do Until loop

Do
    Statement
Loop Until Expression

เราแค่เปลี่ยนจาก While เป็น Until ซึ่งการทำงานของมันจะแตกต่างจาก While loop คือถ้า Expression เป็น True โปรแกรมจะหยุดทำงานใน loop ในขณะที่คำสั่ง While loop โปรแกรมจะทำงานในขณะที่ Expression เป็น True

เราจะยกตัวอย่างสำหรับการใช้คำสั่ง Do Until ในภาษา Visual Basic กับโปรแกรมคูณตัวเลข

Module DoUntilLoop

    Sub Main()

        Dim n As String
        Do
            Console.Write("Enter number: ")
            n = CType(Console.ReadLine(), Integer)
            Console.WriteLine("You entered {0}, Double = {1}, Triple = {2}", n, n * 2, n * 3)
        Loop Until n = 0

    End Sub

End Module

ในตัวอย่าง เป็นโปรแกรมรับค่าตัวเลขมาและเก็บไว้ในตัวแปร n โปรแกรมจะแสดงค่าสองเท่า และสามเท่าของตัวเลข จนกระทั่งตัวเลขที่กรอกมีค่าเป็น 0 ในเงื่อนไข n = 0 โปรแกรมจึงจะหยุดการทำงานใน loop

Enter number: 1
You entered 1, Double = 2, Triple = 3
Enter number: 3
You entered 3, Double = 6, Triple = 9
Enter number: 5
You entered 5, Double = 10, Triple = 15
Enter number: 16
You entered 16, Double = 32, Triple = 48
Enter number: 0
You entered 0, Double = 0, Triple = 0

นี่เป็นตัวอย่างผลลัพธ์ของโปรแกรมเมื่อใส่ตัวเลข 1 3 5 16 และ 0 ตามลำดับ

คำสั่ง For loop

คำสั่ง For loop เป็นคำสั่งวนซ้ำที่ใช้สำหรับการวนซ้ำๆ ที่มีจำนวนรอบที่แน่นอน โดยเราสามารถให้เรากำหนดค่าเริ่มต้น เงื่อนไขและการเพิ่มค่าไว้ที่ตอนต้นของ loop ซึ่งทำให้มันสะดวกในการใช้ นี่เป็นรูปแบบการใช้งานคำสั่ง For loop ในภาษา Visual Basic

For NewVariable To Value
    statement
Next

ในการใช้คำสั่ง For loop นั้น คุณจะต้องประกาศตัวแปรใหม่ NewVariable สำหรับใช้ในบล็อคของคำสั่ง For loop ที่จบด้วย Next ในการทำงานแต่ละรอบของ loop โปรแกรมจะเพิ่มค่าตัวแปรขึ้นทีละ 1 จนถึง Value ซึ่งเป็นค่าที่เราต้องกำหนดเพื่อให้โปรแกรมออกจาก loop เมื่อมันถึงค่านี้

For NewVariable To Value Step Change
    statement
Next

ถ้าหากคุณไม่ต้องการให้ค่านั้นเพิ่มทีละ 1 คุณสามารถเปลี่ยนแปลงได้ โดยส่งค่า Change หลังคำสั่ง Step ซึ่งเป็นทางเลือกสำหรับ For loop และต่อไปมาดูตัวอย่างการใช้งานคำสั่ง For loop แบบต่างๆ ในภาษา Visual Basic

Module ForLoop

    Sub Main()

        For i As Integer = 1 To 5
            Console.Write("{0}, ", i)
        Next
        Console.WriteLine()

        For i As Integer = 10 To 50 Step 10
            Console.Write("{0}, ", i)
        Next
        Console.WriteLine()

        For i As Integer = 5 To 0 Step -1
            Console.Write("{0}, ", i)
        Next

    End Sub

End Module

ในตัวอย่างเป็นการใช้งานคำสั่ง For loop ในการนับตัวเลขทั้งหมด 3 แบบ

For i As Integer = 1 To 5
    Console.Write("{0}, ", i)
Next

นี่เป็น loop สำหรับแสดงตัวเลขตั้งแต่ 1 ถึง 5 หลังการทำงานคำสั่งใน loop แต่ละรอบจะมีการเพิ่มค่า i ขึ้น 1 อัตโนมัติ ซึ่งนี่เป็นการใช้คำสั่ง For loop แบบพื้นฐาน

For i As Integer = 10 To 50 Step 10
    Console.Write("{0}, ", i)
Next

ต่อมาเราใช้คำสั่ง For loop ในการแสดงตัวเลขระหว่าง 10 ถึง 50 เราได้ใช้คำสั่ง Step เพื่อให้ loop เพิ่มค่าตัวเลขทีละ 10 ในแต่ละรอบ

For i As Integer = 5 To 0 Step -1
    Console.Write("{0}, ", i)
Next

และสำหรับ loop นี้เรานับตัวเลขถอยหลัง โดยกำหนด Step ให้เป็น -1

1, 2, 3, 4, 5,
10, 20, 30, 40, 50,
5, 4, 3, 2, 1, 0,

และนี่เป็นผลลัพธ์ของโปรแกรมที่เกิดจากการทำงานของทั้ง 3 loop

คำสั่ง Exit และ Continue loop

คำสั่ง Exit เป็นคำสั่งที่ใช้สำหรับออกจาก loop ในทันที โดยที่โปรแกรมจะไม่สนใจว่าเงือนไขใน loop นั้นเป็นจริงอยู่หรือไม่

ส่วนคำสั่ง Continue นั้นจะใช้สำหรับข้ามการทำงานของ loop ในรอบปัจจุบัน โปรแกรมจะทำงานในรอบถัดไปทันที โดยไม่สนใจคำสั่งที่เหลือหลังจากคำสั่ง Continue โดยคำสั่งเหล่านี้มักจะใช้กับคำสังเลือกเงือนไข เช่น คำสั่ง If

มาดูตัวอย่างการใช้งานคำสั่ง Exit และ Continue สำหรับควบคุม loop

Module LoopControlStatement

    Sub Main()

        For i As Integer = 1 To 100

            If i = 5 Then
                Continue For
            End If

            If i = 10 Then
                Exit For
            End If

            Console.WriteLine("{0}", i)
        Next

    End Sub

End Module

ในตัวอย่าง เราได้สร้าง For loop สำหรับการวนซ้ำ 100 รอบ ในแต่ละรอบโปรแกรมจะแสดงตัวเลขออกมา เราได้ใช้คำสั่ง Continue For ถ้า i มีค่าเท่ากับ 5 นี่จะทำให้โปรแกรมทำงาน loop ถัดไปทันที โดยไม่แสดงเลข 5 ในคำสั่งข้างล่าง และเราได้ใช้คำสั่ง Exit For สำหรับเงือนไขถ้า i มีค่าเท่ากับ 5 โปรแกรมจะออกจาก loop ในทันที

1
2
3
4
6
7
8
9

นี่เป็นผลลัพธ์ของโปรแกรม คุณจะเห็นว่าเลข 5 ไม่ถูกแสดงเพราะว่าเป็นผลของคำสั่ง Continue และโปรแกรมแสดงถึงเลข 9 ถึงแม้เราจะกำหนดในคำสั่ง For ว่า To 100 ก็ตาม แต่เพราะคำสั่ง Exit ทำให้โปรแกรมจบการทำงานของ loop ในทันที

คุณยังสามารถใช้คำสั่ง Exit และ Continue สามารถใช้ได้กับคำสั่ง While loop ได้ เช่น Exit While หรือ Exit Do สำหรับ Do loop ทั้งสองแบบ

คำสั่ง Loop ซ้อน Loop

ในการใช้งานคำสั่งวนซ้ำนั้น มันสามารถซ้อนกันได้เช่นเดียวกันกับคำสั่งเลือกเงือนไข การซ้อนของ loop เราเรียกว่า Nested loop เราจะยกตัวอย่างการซ้อนกันของคำสั่ง For loop

เราจะมาเขียนโปรแกรมสำหรับหาค่า Factorial ของตัวเลขโดยการใช้ For loop ที่ซ้อนกัน

Module NestedForLoop

    Sub Main()

        Console.WriteLine(vbTab & "Factorial program")

        For i As Integer = 1 To 10

            Dim result As Integer = 1

            For j As Integer = 1 To i
                result = result * j
            Next

            Console.WriteLine("{0}! = {1}", i, result)
        Next

    End Sub

End Module

ในตัวอย่างเป็นการใช้คำสั่ง For loop ในการหาค่า Factorial ของตัวเลขโดย loop ด้านนอกสำหรับเป็นการสร้างตัวเลขในการนำมาหาค่า Factorial โดยเราจะวนรอบหาค่า Factorial สำหรับเลข 1 ถึง 10

For j As Integer = 1 To i
    result = result * j
Next

Loop ข้างในเป็นการหาค่า Factorial ซึ่งสูตรในการหาค่า Factorial ของตำนวนเต็ม n ใดๆ ก็คือการนำตัวเลขจาก 1 ถึง n มาคูณกัน ดังนั้นเราสร้างตัวแปร result มาเก็บผลลัพธ์ในการคูณแต่ละรอบ

        Factorial program
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800

นี่เป็นผลลัพธ์ของโปรแกรมในการหาค่า Factorial จาก 1 ถึง 10 คุณสามารถเปลียนช่วงขนาดของตัวเลขเป็นอย่างอื่นได้ แต่คุณต้องแน่ใจว่าตัวแปร result สามารถเก็บค่าของ Factorial ตัวเลขเหล่านั้นได้ ที่เราได้พูดถึงในเรื่องตัวแปรและประเภทข้อมูล

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับคำสั่งวนซ้ำ (loop) แบบต่างๆ ในภาษา Visual Basic และได้เห็นตัวอย่างในการนำไปใช้งานสำหรับแต่ละแบบ ซึ่งทำให้โปรแกรมของเรามีความสามารถในการทำงานมากขึ้น