การดู : 111

20/04/2026 03:13น.

ภาพปกบทความ Rust The Series EP.6 สอนการใช้งาน Control Flow ทั้ง if-else และการวนลูป loop, while, for

Control Flow ควบคุมทิศทางโปรแกรมด้วย if-else และลูป | Rust The Series EP.6

#ภาษา Rust

#สอน Rust

#Rust

#Rust Control Flow

#if-else Rust

#เขียนโปรแกรม Rust

ยินดีต้อนรับกลับเข้าสู่ Rust The Series! หลังจากที่เราได้เรียนรู้เรื่องตัวแปรและชนิดข้อมูลกันไปแล้ว ใน EP.6 นี้ เราจะมาดูวิธีสั่งให้โปรแกรม "คิด" และ "ตัดสินใจ" ว่าควรจะทำอะไรต่อไปในสถานการณ์ที่แตกต่างกัน ผ่านสิ่งที่เรียกว่า Control Flow ในภาษา Rust การควบคุมทิศทางโปรแกรมจะแบ่งออกเป็น 2 กลุ่มหลักๆ คือ การสร้างเงื่อนไข (if-else) และ การทำซ้ำ (Loops) เรามาดูกันทีละตัวเลยครับ

1. การตัดสินใจด้วย if และ else

การใช้ if-else ใน Rust จะหน้าตาคล้ายกับภาษาโปรแกรมทั่วไป แต่มีจุดเด่นคือ ไม่ต้องใส่วงเล็บ () ครอบเงื่อนไข แต่บังคับให้ต้องมีปีกกา {} เสมอ แม้ว่าจะมีคำสั่งแค่บรรทัดเดียวก็ตาม

Rust

fn main() {
    let number = 7;

    if number < 5 {
        println!("ตัวเลขน้อยกว่า 5");
    } else if number == 7 {
        println!("ตัวเลขคือ 7 พอดีเป๊ะ!");
    } else {
        println!("ตัวเลขมากกว่า 5");
    }
}

🔥 Rust Trick: ใน Rust if ถือเป็น Expression (นิพจน์) หมายความว่าเราสามารถใช้ if ในการกำหนดค่าให้กับตัวแปรได้เลย! (คล้ายๆ Ternary Operator ? : ในภาษาอื่น)

Rust

fn main() {
    let condition = true;
    // กำหนดค่าให้ number ตามเงื่อนไข condition
    let number = if condition { 5 } else { 6 };
    
    println!("ค่าของ number คือ: {}", number); // Output: 5
}

ข้อควรระวัง: ค่าที่ return กลับมาจากแต่ละ block (if และ else) จะต้องเป็น Data Type เดียวกันเท่านั้น

2. การวนลูปไร้ที่สิ้นสุดด้วย loop

loop คือคำสั่งสำหรับรันโค้ดซ้ำไปเรื่อยๆ แบบไม่มีที่สิ้นสุด จนกว่าเราจะสั่งหยุดอย่างชัดเจนด้วยคำสั่ง break (และสามารถข้ามรอบนั้นไปทำรอบต่อไปได้ด้วยคำสั่ง continue)

Rust

fn main() {
    let mut counter = 0;

    loop {
        counter += 1;
        
        if counter == 3 {
            println!("ข้ามรอบที่ 3");
            continue; // ข้ามไปรอบต่อไปทันที
        }

        println!("รอบที่ {}", counter);

        if counter == 5 {
            println!("พอแค่นี้ดีกว่า หยุด!");
            break; // ออกจาก loop ทันที
        }
    }
}

นอกจากนี้ เรายังสามารถใช้ break เพื่อ Return ค่าออกจาก loop ได้ด้วย ซึ่งมีประโยชน์มากเวลาที่เราต้องการวนลูปเพื่อคำนวณหรือค้นหาค่าอะไรบางอย่าง (ข้อสังเกต: มือใหม่หลายคนมักพลาดตรงนี้ สังเกตว่าท้าย block ของลูป }; จะต้องมีเซมิโคลอน ; ปิดเสมอ เพราะในบริบทนี้มันคือ Statement ของการประกาศตัวแปร let ครับ)

Rust

fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;
        if counter == 10 {
            break counter * 2; // หยุดลูปและส่งค่า counter * 2 ออกไปเป็น Expression
        }
    }; // <--- อย่าลืมเซมิโคลอนปิดท้ายตรงนี้นะ!

    println!("ผลลัพธ์คือ {}", result); // Output: 20
}

🔥 Rust Trick: การตั้งชื่อให้ Loop (Loop Labels) เวลาที่เราเขียนลูปซ้อนลูป (Nested Loops) แล้วต้องการสั่ง break หรือ continue ไปที่ "ลูปชั้นนอกสุด" Rust อนุญาตให้เราตั้งชื่อให้ลูปได้ด้วย! โดยใช้เครื่องหมาย ' (Single Quote) นำหน้าชื่อ ตัวอย่างเช่น:

Rust

fn main() {
    let mut count = 0;

    'outer: loop { // ตั้งชื่อลูปนี้ว่า 'outer
        println!("เริ่มลูปนอกสุด รอบที่ {}", count);
        let mut inner_count = 2;

        loop {
            println!("  ลูปชั้นใน inner_count = {}", inner_count);
            if inner_count == 1 {
                break; // สั่ง break ปกติ จะหยุดแค่ "ลูปชั้นใน"
            }
            if count == 2 {
                break 'outer; // สั่งหยุดทะลุออกไปที่ลูป 'outer ทันที!
            }
            inner_count -= 1;
        }
        count += 1;
    }
    
    println!("หลุดออกมาจากทุกลูปแล้ว! (count = {})", count);
}

3. การวนลูปแบบมีเงื่อนไขด้วย while

หากเราต้องการวนลูปโดยเช็คเงื่อนไขก่อนทุกครั้ง while คือคำตอบที่ใช่ ลูปจะทำงานก็ต่อเมื่อเงื่อนไขยังคงเป็น true และจะหยุดทำงานทันทีเมื่อเงื่อนไขกลายเป็น false

Rust

fn main() {
    let mut number = 3;

    while number != 0 {
        println!("{}!", number);
        number -= 1; // ลดค่า number ลงทีละ 1
    }

    println!("LIFTOFF!!!");
}

🔥 Rust Trick: while รีเทิร์นค่าแบบ loop ไม่ได้นะ! ในหัวข้อที่แล้ว เราเห็นความสามารถสุดเท่ของ loop ที่สั่ง break พร้อมกับส่งค่า (Return) ออกมาได้ แต่สำหรับ while เราไม่สามารถทำแบบนั้นได้ครับ เหตุผลก็คือ while มีโอกาสที่จะ "ไม่ถูกรันเลยแม้แต่รอบเดียว" (ถ้าเงื่อนไขเป็น false ตั้งแต่แรก) Rust ที่เน้นความปลอดภัยเป็นหลักจึงไม่อนุญาตให้ดึงค่าออกจาก while ครับ (มันจะคืนค่าว่างๆ ที่เรียกว่า Unit Type () เสมอ)

👉 ดังนั้น กฎจำง่ายๆ: ถ้าแค่วนลูปเช็คเงื่อนไขใช้ while แต่ถ้าต้องวนลูปเพื่อ "ค้นหาและส่งค่ากลับ" ให้ใช้ loop ครับ

4. การวนลูปผ่านคอลเล็กชันด้วย for

for loop เป็นพระเอกของการวนลูปใน Rust เลยก็ว่าได้ เพราะใช้งานง่าย ปลอดภัย และลดโอกาสเกิดบั๊ก (เช่น การเข้าถึง index ที่ไม่มีอยู่จริง หรือ Out of bounds) มักใช้ร่วมกับ Arrays, Vectors หรือการสร้าง Range (ช่วงตัวเลข)

การใช้ for กับ Array:

Rust

fn main() {
    let a = [10, 20, 30, 40, 50];

    for element in a {
        println!("ค่าคือ: {}", element);
    }
}

การใช้ for กับ Range (ช่วงตัวเลข):

Rust

fn main() {
    // 1..4 หมายถึง 1 ถึง 3 (ไม่รวม 4)
    // .rev() คือการสั่งให้วนจากหลังมาหน้า (Reverse)
    for number in (1..4).rev() {
        println!("{}!", number);
    }
    println!("LIFTOFF!!!");
}

🔥 Rust Trick: รวมตัวเลขสุดท้ายด้วย Inclusive Range (..=) บางครั้งการใช้ 1..4 อาจจะทำให้สับสนว่ามันจบที่เลขอะไร Rust มีอีกหนึ่ง Syntax คือ ..= (ใส่เครื่องหมายเท่ากับเพิ่มเข้าไป) ซึ่งหมายถึง "เอาตัวเลขสุดท้ายด้วย" เช่น:

Rust

fn main() {
    // 1..=3 หมายถึง 1 ถึง 3 (รวมเลข 3 ด้วย!) อ่านง่ายกว่าเดิม
    for number in (1..=3).rev() {
        println!("{}!", number);
    }
}


สรุป

Control Flow ใน Rust ถูกออกแบบมาให้เขียนได้กระชับและมีความปลอดภัยสูง การเข้าใจวิธีการทำงานของ if-else, loop, while และ for อย่างแม่นยำ จะช่วยให้คุณเขียนลอจิกของโปรแกรมได้อย่างลื่นไหล

📌 ใน EP. ถัดไป (EP.7): เราจะก้าวเข้าสู่ "แก่นแท้" ที่ทำให้ Rust กลายเป็นภาษาที่แตกต่างและทรงพลังที่สุด นั่นคือ กฎแห่งการครอบครอง (Ownership) ระบบที่ใช้จัดการ Memory โดยไม่ต้องพึ่งพาระบบ Garbage Collector และไม่ทำให้โปรแกรมช้าลง! เตรียมตัวให้พร้อม แล้วพบกันในบทความหน้าครับ 🦀

🎯 ติดตามความรู้สาย Dev แบบสุดจัดได้ที่:

ไม่อยากพลาดบทความเทคนิคเชิงลึกและอัปเดตใหม่ๆ จากเรา ติดตาม Superdev Academy ได้ทุกช่องทางที่นี่ครับ:

  • 🔵 Facebook: Superdev Academy Thailand (อัปเดตข่าวสารและบทความใหม่)

  • 🎬 YouTube: Superdev Academy Channel (ติวเข้มแบบวิดีโอ)

  • 📸 Instagram: @superdevacademy (เกร็ดความรู้สั้นๆ และเบื้องหลังการทำงาน)

  • 🎬 TikTok: @superdevacademy (Tips & Tricks ฉบับย่อยง่าย)

  • 🌐 Website: superdevacademy.com (คลังบทความและคอร์สเรียนฉบับเต็ม)