คำสั่งวนซ้ำ

11 February 2016

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการใช้คำสั่งวนซ้ำเพื่อควบคุมโปรแกรม เช่น คำสั่ง while loop, do-while loop, for loop และ foreach loop

คำสั่งวนซ้ำ (loop statements) ถูกใช้เพื่อควบคุมโปรแกรมเพื่อให้โปรแกรมทำบางส่วนของโค้ดซ้ำๆ มีลูปหลายประเภทที่เราสามารถใช้ได้ในภาษา C# และคุณจะได้เรียนรู้มันทั้งหมด เราจะเริ่มต้นกับลูปที่ง่ายที่สุดคือ while loop

คำสั่ง While loop

คำสั่ง while loop นั้นเป็นคำสั่งวนซ้ำที่ง่ายที่สุดในภาษา C# โดยมีรูปแบบการใช้งานดังนี้

while (expression) {
    statements
}

while loop นั้นจะใช้ในการทำซ้ำส่วนของโปรแกรมในขณะที่ expression เป็น true จนกว่า expression เป็น false โปรแกรมจะออกจาก while loop และทำงานต่อไปหลังจากลูป

ตัวอย่างการใช้ while loop ในภาษา C#

using System;

class WhileLoop
{
    static void Main(string[] args)
    {
        int n = 1;
        while (n <= 10)
        {
            Console.WriteLine("Loop " + n);
            n++;
        }
        Console.WriteLine("Loop ended");
    }
}

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

Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
Loop 7
Loop 8
Loop 9
Loop 10
Loop ended

และนี่เป็นผลลัพธ์จากตัวอย่างการใช้ while loop เพื่อนับตัวเลข

คำสั่ง Do-while loop

do-while loop นั้นคล้ายกับ while loop ซึ่งมันสามารถใช้ทดแทนกันได้ โดยมีรูปแบบการใช้งานดังนี้

do {
    statements
} while (expression) ;

สิ่งที่แตกต่างของ do-while loop คือการตรวจสอบ expression หลังจากการทำงานรอบแรกเสร็จสิ้น นั่นหมายความว่า do-while loop จะต้องทำงานอย่างน้อย 1 รอบ สังเกตุว่า expression จะอยู่ที่ตอน้ทายของลูป มาดูตัวอย่าง

using System;

class DoWhileLoop
{
    static void Main(string[] args)
    {
        int n;

        Console.WriteLine("Enter 0 to exit the loop");
        do
        {
            Console.Write("Your number: ");
            int.TryParse(Console.ReadLine(), out n);
            Console.WriteLine("Number you entered is " + n);
        } while (n != 0);
        Console.WriteLine("Loop ended");
    }
}

ในตัวอย่าง เป็นการใช้ do-while loop เพื่อถามให้ผู้ใช้ป้อนตัวเลข (0) เพื่อออกจากลูป ถ้าตัวเลขที่ใส่เข้ามานั้นไม่ใช่ศูนย์ โปรแกรมก็จะถามให้ใส่ใหม่เรื่อยไป และเมื่อใส่เลขศูนย์ มันทำให้ expression ของเราเป็น false และทำให้โปรแกรมออกจากลูป

Enter 0 to exit the loop
Your number: 2
Number you entered is 2
Your number: 3
Number you entered is 3
Your number: 5
Number you entered is 5
Your number: 10
Number you entered is 10
Your number: 0
Number you entered is 0
Loop ended

นี่เป็นผลลัพธ์ของตัวอย่างการใช้ do while loop เมื่อทดสอบรันโปรแกรมและป้อนตัวเลข

คำสั่ง For loop

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

for (initialize; condition; iterator) {
    statements
}

ในการใช้ for loop เราสามารถกำหนดค่าเริ่มต้น สร้างเงื่อนไข (expression) และทำการกำหนดการเพิ่มค่าหรือลดค่าของตัวทำซ้ำได้ก่อนที่ลูปจะเริ่มทำงาน มันจะมีประโยชน์ที่จะให้สะดวกเมื่อเรารู้จำนวนรอบที่แน่นอนในการวนซ้ำของโปรแกรม

using System;

class ForLoop
{
    static void Main(string[] args)
    {
        for (int i = 1; i <= 10; i++)
        {
            Console.WriteLine(i);
        }
    }
}

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

using System;

class ForLoop
{
    static void Main(string[] args)
    {
        int i = 1;
        for (; i <= 10; )
        {
            Console.WriteLine(i);
            i++;
        }
    }
}

และข้างล่างนี่เป็นผลลัพธ์ของโปรแกรมทั้งสองที่ใช้ for loop จะเห็นว่ามันได้ผลลัพธ์เหมือน while loop ซึ่งลูปทั้งสองประเภทนี้ก็สามารถใช้ทดแทนกันได้เช่นกัน แต่อาจจะเขียนแตกต่างกันเล็กน้อย

1
2
3
4
5
6
7
8
9
10

คำสั่ง foreach loop

foreach loop นั้นจะใช้สำหรับวนซ้ำค่าในอาเรย์ ที่ทราบหรือไม่ทราบขนาด โดยลูปจะเริ่มอ่านค่าจากสมาชิกตัวแรกในอาเรย์ ไปจนถึงตัวสุดท้าย

using System;

class ForeachLoop
{
    static void Main(string[] args)
    {
        int[] numbers = { 2, 4, -1, 5, 0, 8, 9 };
        foreach (int i in numbers)
        {
            Console.WriteLine(i);
        }
    }
}

ในตัวอย่างเราได้สร้างอาเรย์ของตัวเลขแบบ integer ซึ่งมีสมาชิกทั้งหมด 8 ตัว ในการวนซ้ำแต่ละรอบ ค่าะเก็บไว้ที่ตัวแปร i แล้วก็แสดงผลออกทาง console

2
4
-1
5
0
8
9

และนี่เป็นตัวอย่างผลลัพธ์ของการใช้ foreach loop

คำสั่ง break

คำสั่ง break เพื่อบังคับให้ลูปสิ้นสุดการทำงานในทันที การหยุดการทำงานของลูปโดยการใช้คำสั่ง break มักจะสร้างให้กับเงื่อนไขบางอย่าง condition เพื่อทำให้โปรแกรมออกจากลูป มันสามารถใช้ได้กับลูปทุกประเภททั้ง while, do-while, for และ foreach loop

มาดูตัวอย่างการใช้คำสั่ง break

using System;

class ForLoop
{
    static void Main(string[] args)
    {
        for (int i = 1; i <= 10; i++)
        {
            Console.WriteLine(i);
            if (i == 5) break;
        }
    }
}

ในตัวอย่างโปรแกรมจะออกจากลูปเมื่อ i มีค่าเท่ากับ 5 มันไม่สำคัญว่าเงื่อนไขในลูปที่ i <= 10 จะเป็นจริงหรือไม่

1
2
3
4
5

และข้างบนเป็นผลลัพธ์ของตัวอย่างการใช้คำสัง break

คำสั่ง continue

คำสั่ง continue ใช้เพื่อข้ามการวนซ้ำรอบปัจจุบัน มันจะข้ามการทำงานคำสั่งทั้งหมดภายในลูปหลังจากคำสั่ง continue และไปเริ่มต้นรอบใหม่ มันสามารถใช้ได้กับลูปทุกประเภท

using System;

namespace ContinueStatement
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 1; i <= 10; i++)
            {
                if (i % 2 == 0) continue;
                Console.WriteLine(i);
            }
        }
    }
}

ในตัวอย่างเราได้ใช้คำสั่ง continue เพื่อข้ามการแสดงผลของตัวเลขคู่ โดยคำสั่งจะทำงานเมื่อ i % 2 == 0 นั่นหมายความว่า i จะข้ามการแสดงผลไป

1
3
5
7
9

นี่เป็นฟลลัพธ์ตัวอย่างการใช้คำสั่ง continue

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับลูปประเภทต่างๆ ที่ใช้ในการควบคุมโปรแกรมในสถานะการต่างกัน และรู้ว่าเมื่อไหร่ที่ควรจะใช้คำสั่ง break และคำสัง continue

บทความนี้เป็นประโยชน์หรือไม่?Yes·No