[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-blogs-th-1-1-all-rust-ep6-control-flow-if-else-loop-all--*":3,"academy-blog-translations-kc8u98bzglgzyfm":85},{"data":4,"page":84,"perPage":84,"totalItems":84,"totalPages":84},[5],{"alt":6,"collectionId":7,"collectionName":8,"content":9,"cover_image":10,"cover_image_path":11,"created":12,"created_by":13,"expand":14,"id":78,"keywords":79,"locale":54,"published_at":13,"scheduled_at":13,"school_blog":76,"short_description":80,"slug":81,"status":74,"title":82,"updated":83,"updated_by":13,"views":77},"ภาพปกบทความ Rust The Series EP.6 สอนการใช้งาน Control Flow ทั้ง if-else และการวนลูป loop, while, for","sclblg987654321","school_blog_translations","\u003Cp>ยินดีต้อนรับกลับเข้าสู่ Rust The Series! หลังจากที่เราได้เรียนรู้เรื่องตัวแปรและชนิดข้อมูลกันไปแล้ว ใน EP.6 นี้ เราจะมาดูวิธีสั่งให้โปรแกรม \"คิด\" และ \"ตัดสินใจ\" ว่าควรจะทำอะไรต่อไปในสถานการณ์ที่แตกต่างกัน ผ่านสิ่งที่เรียกว่า \u003Cstrong>Control Flow\u003C\u002Fstrong> ในภาษา Rust การควบคุมทิศทางโปรแกรมจะแบ่งออกเป็น 2 กลุ่มหลักๆ คือ \u003Cstrong>การสร้างเงื่อนไข (if-else)\u003C\u002Fstrong> และ \u003Cstrong>การทำซ้ำ (Loops)\u003C\u002Fstrong> เรามาดูกันทีละตัวเลยครับ\u003C\u002Fp>\u003Ch2>1. การตัดสินใจด้วย \u003Ccode>if\u003C\u002Fcode> และ \u003Ccode>else\u003C\u002Fcode>\u003C\u002Fh2>\u003Cp>การใช้ \u003Ccode>if-else\u003C\u002Fcode> ใน Rust จะหน้าตาคล้ายกับภาษาโปรแกรมทั่วไป แต่มีจุดเด่นคือ \u003Cstrong>ไม่ต้องใส่วงเล็บ \u003Ccode>()\u003C\u002Fcode> ครอบเงื่อนไข\u003C\u002Fstrong> แต่บังคับให้ต้องมีปีกกา \u003Ccode>{}\u003C\u002Fcode> เสมอ แม้ว่าจะมีคำสั่งแค่บรรทัดเดียวก็ตาม\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>fn main() {\n    let number = 7;\n\n    if number &lt; 5 {\n        println!(\"ตัวเลขน้อยกว่า 5\");\n    } else if number == 7 {\n        println!(\"ตัวเลขคือ 7 พอดีเป๊ะ!\");\n    } else {\n        println!(\"ตัวเลขมากกว่า 5\");\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>🔥 Rust Trick:\u003C\u002Fstrong> ใน Rust \u003Ccode>if\u003C\u002Fcode> ถือเป็น Expression (นิพจน์) หมายความว่าเราสามารถใช้ \u003Ccode>if\u003C\u002Fcode> ในการกำหนดค่าให้กับตัวแปรได้เลย! (คล้ายๆ Ternary Operator \u003Ccode>? :\u003C\u002Fcode> ในภาษาอื่น)\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>fn main() {\n    let condition = true;\n    \u002F\u002F กำหนดค่าให้ number ตามเงื่อนไข condition\n    let number = if condition { 5 } else { 6 };\n    \n    println!(\"ค่าของ number คือ: {}\", number); \u002F\u002F Output: 5\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cblockquote>\u003Cp>\u003Cem>ข้อควรระวัง: ค่าที่ return กลับมาจากแต่ละ block (\u003Ccode>if\u003C\u002Fcode> และ \u003Ccode>else\u003C\u002Fcode>) จะต้องเป็น Data Type เดียวกันเท่านั้น\u003C\u002Fem>\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch2>2. การวนลูปไร้ที่สิ้นสุดด้วย \u003Cstrong>\u003Ccode>loop\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fh2>\u003Cp>\u003Ccode>loop\u003C\u002Fcode> คือคำสั่งสำหรับรันโค้ดซ้ำไปเรื่อยๆ แบบไม่มีที่สิ้นสุด จนกว่าเราจะสั่งหยุดอย่างชัดเจนด้วยคำสั่ง \u003Ccode>break\u003C\u002Fcode> (และสามารถข้ามรอบนั้นไปทำรอบต่อไปได้ด้วยคำสั่ง \u003Ccode>continue\u003C\u002Fcode>)\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>fn main() {\n    let mut counter = 0;\n\n    loop {\n        counter += 1;\n        \n        if counter == 3 {\n            println!(\"ข้ามรอบที่ 3\");\n            continue; \u002F\u002F ข้ามไปรอบต่อไปทันที\n        }\n\n        println!(\"รอบที่ {}\", counter);\n\n        if counter == 5 {\n            println!(\"พอแค่นี้ดีกว่า หยุด!\");\n            break; \u002F\u002F ออกจาก loop ทันที\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>นอกจากนี้ เรายังสามารถใช้ \u003Ccode>break\u003C\u002Fcode> เพื่อ \u003Cstrong>Return ค่าออกจาก \u003Ccode>loop\u003C\u002Fcode>\u003C\u002Fstrong> ได้ด้วย ซึ่งมีประโยชน์มากเวลาที่เราต้องการวนลูปเพื่อคำนวณหรือค้นหาค่าอะไรบางอย่าง \u003Cem>(ข้อสังเกต: มือใหม่หลายคนมักพลาดตรงนี้ สังเกตว่าท้าย block ของลูป \u003Ccode>};\u003C\u002Fcode> จะต้องมีเซมิโคลอน \u003Ccode>;\u003C\u002Fcode> ปิดเสมอ เพราะในบริบทนี้มันคือ Statement ของการประกาศตัวแปร \u003Ccode>let\u003C\u002Fcode> ครับ)\u003C\u002Fem>\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>fn main() {\n    let mut counter = 0;\n\n    let result = loop {\n        counter += 1;\n        if counter == 10 {\n            break counter * 2; \u002F\u002F หยุดลูปและส่งค่า counter * 2 ออกไปเป็น Expression\n        }\n    }; \u002F\u002F &lt;--- อย่าลืมเซมิโคลอนปิดท้ายตรงนี้นะ!\n\n    println!(\"ผลลัพธ์คือ {}\", result); \u002F\u002F Output: 20\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>🔥 \u003Cstrong>Rust Trick: การตั้งชื่อให้ Loop (Loop Labels)\u003C\u002Fstrong> เวลาที่เราเขียนลูปซ้อนลูป (Nested Loops) แล้วต้องการสั่ง \u003Ccode>break\u003C\u002Fcode> หรือ \u003Ccode>continue\u003C\u002Fcode> ไปที่ \"ลูปชั้นนอกสุด\" Rust อนุญาตให้เราตั้งชื่อให้ลูปได้ด้วย! โดยใช้เครื่องหมาย \u003Ccode>'\u003C\u002Fcode> (Single Quote) นำหน้าชื่อ ตัวอย่างเช่น:\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>fn main() {\n    let mut count = 0;\n\n    'outer: loop { \u002F\u002F ตั้งชื่อลูปนี้ว่า 'outer\n        println!(\"เริ่มลูปนอกสุด รอบที่ {}\", count);\n        let mut inner_count = 2;\n\n        loop {\n            println!(\"  ลูปชั้นใน inner_count = {}\", inner_count);\n            if inner_count == 1 {\n                break; \u002F\u002F สั่ง break ปกติ จะหยุดแค่ \"ลูปชั้นใน\"\n            }\n            if count == 2 {\n                break 'outer; \u002F\u002F สั่งหยุดทะลุออกไปที่ลูป 'outer ทันที!\n            }\n            inner_count -= 1;\n        }\n        count += 1;\n    }\n    \n    println!(\"หลุดออกมาจากทุกลูปแล้ว! (count = {})\", count);\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>3. การวนลูปแบบมีเงื่อนไขด้วย\u003Cstrong> \u003Ccode>while\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fh2>\u003Cp>หากเราต้องการวนลูปโดยเช็คเงื่อนไขก่อนทุกครั้ง \u003Ccode>while\u003C\u002Fcode> คือคำตอบที่ใช่ ลูปจะทำงานก็ต่อเมื่อเงื่อนไขยังคงเป็น \u003Ccode>true\u003C\u002Fcode> และจะหยุดทำงานทันทีเมื่อเงื่อนไขกลายเป็น \u003Ccode>false\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>fn main() {\n    let mut number = 3;\n\n    while number != 0 {\n        println!(\"{}!\", number);\n        number -= 1; \u002F\u002F ลดค่า number ลงทีละ 1\n    }\n\n    println!(\"LIFTOFF!!!\");\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>🔥 \u003Cstrong>Rust Trick: \u003Ccode>while\u003C\u002Fcode> รีเทิร์นค่าแบบ \u003Ccode>loop\u003C\u002Fcode> ไม่ได้นะ!\u003C\u002Fstrong> ในหัวข้อที่แล้ว เราเห็นความสามารถสุดเท่ของ \u003Ccode>loop\u003C\u002Fcode> ที่สั่ง \u003Ccode>break\u003C\u002Fcode> พร้อมกับส่งค่า (Return) ออกมาได้ แต่สำหรับ \u003Ccode>while\u003C\u002Fcode> \u003Cstrong>เราไม่สามารถทำแบบนั้นได้ครับ\u003C\u002Fstrong> เหตุผลก็คือ \u003Ccode>while\u003C\u002Fcode> มีโอกาสที่จะ \u003Cstrong>\"ไม่ถูกรันเลยแม้แต่รอบเดียว\"\u003C\u002Fstrong> (ถ้าเงื่อนไขเป็น false ตั้งแต่แรก) Rust ที่เน้นความปลอดภัยเป็นหลักจึงไม่อนุญาตให้ดึงค่าออกจาก \u003Ccode>while\u003C\u002Fcode> ครับ (มันจะคืนค่าว่างๆ ที่เรียกว่า Unit Type \u003Ccode>()\u003C\u002Fcode> เสมอ)\u003C\u002Fp>\u003Cblockquote>\u003Cp>\u003Cem>👉 ดังนั้น กฎจำง่ายๆ: ถ้าแค่วนลูปเช็คเงื่อนไขใช้ \u003Ccode>while\u003C\u002Fcode> แต่ถ้าต้องวนลูปเพื่อ \"ค้นหาและส่งค่ากลับ\" ให้ใช้ \u003Ccode>loop\u003C\u002Fcode> ครับ\u003C\u002Fem>\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch2>4. การวนลูปผ่านคอลเล็กชันด้วย\u003Cstrong> \u003Ccode>for\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fh2>\u003Cp>\u003Ccode>for\u003C\u002Fcode> loop เป็นพระเอกของการวนลูปใน Rust เลยก็ว่าได้ เพราะใช้งานง่าย ปลอดภัย และลดโอกาสเกิดบั๊ก (เช่น การเข้าถึง index ที่ไม่มีอยู่จริง หรือ Out of bounds) มักใช้ร่วมกับ Arrays, Vectors หรือการสร้าง Range (ช่วงตัวเลข)\u003C\u002Fp>\u003Cp>\u003Cstrong>การใช้ for กับ Array:\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>fn main() {\n    let a = [10, 20, 30, 40, 50];\n\n    for element in a {\n        println!(\"ค่าคือ: {}\", element);\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>การใช้ for กับ Range (ช่วงตัวเลข):\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>fn main() {\n    \u002F\u002F 1..4 หมายถึง 1 ถึง 3 (ไม่รวม 4)\n    \u002F\u002F .rev() คือการสั่งให้วนจากหลังมาหน้า (Reverse)\n    for number in (1..4).rev() {\n        println!(\"{}!\", number);\n    }\n    println!(\"LIFTOFF!!!\");\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>🔥 \u003Cstrong>Rust Trick: รวมตัวเลขสุดท้ายด้วย Inclusive Range (\u003Ccode>..=\u003C\u002Fcode>)\u003C\u002Fstrong> บางครั้งการใช้ \u003Ccode>1..4\u003C\u002Fcode> อาจจะทำให้สับสนว่ามันจบที่เลขอะไร Rust มีอีกหนึ่ง Syntax คือ \u003Ccode>..=\u003C\u002Fcode> (ใส่เครื่องหมายเท่ากับเพิ่มเข้าไป) ซึ่งหมายถึง \"เอาตัวเลขสุดท้ายด้วย\" เช่น:\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>fn main() {\n    \u002F\u002F 1..=3 หมายถึง 1 ถึง 3 (รวมเลข 3 ด้วย!) อ่านง่ายกว่าเดิม\n    for number in (1..=3).rev() {\n        println!(\"{}!\", number);\n    }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003C\u002Fp>\u003Cdiv data-type=\"horizontalRule\">\u003Chr>\u003C\u002Fdiv>\u003Ch2>สรุป\u003C\u002Fh2>\u003Cp>Control Flow ใน Rust ถูกออกแบบมาให้เขียนได้กระชับและมีความปลอดภัยสูง การเข้าใจวิธีการทำงานของ \u003Ccode>if-else\u003C\u002Fcode>, \u003Ccode>loop\u003C\u002Fcode>, \u003Ccode>while\u003C\u002Fcode> และ \u003Ccode>for\u003C\u002Fcode> อย่างแม่นยำ จะช่วยให้คุณเขียนลอจิกของโปรแกรมได้อย่างลื่นไหล\u003C\u002Fp>\u003Cp>📌 \u003Cstrong>ใน EP. ถัดไป (EP.7):\u003C\u002Fstrong> เราจะก้าวเข้าสู่ \"แก่นแท้\" ที่ทำให้ Rust กลายเป็นภาษาที่แตกต่างและทรงพลังที่สุด นั่นคือ \u003Cstrong>กฎแห่งการครอบครอง (Ownership)\u003C\u002Fstrong> ระบบที่ใช้จัดการ Memory โดยไม่ต้องพึ่งพาระบบ Garbage Collector และไม่ทำให้โปรแกรมช้าลง! เตรียมตัวให้พร้อม แล้วพบกันในบทความหน้าครับ 🦀\u003C\u002Fp>\u003Ch3>🎯 ติดตามความรู้สาย Dev แบบสุดจัดได้ที่:\u003C\u002Fh3>\u003Cp>ไม่อยากพลาดบทความเทคนิคเชิงลึกและอัปเดตใหม่ๆ จากเรา ติดตาม \u003Cstrong>Superdev Academy\u003C\u002Fstrong> ได้ทุกช่องทางที่นี่ครับ:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>🔵 \u003Cstrong>Facebook:\u003C\u002Fstrong> \u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.facebook.com\u002Fsuperdev.academy.th\">Superdev Academy Thailand\u003C\u002Fa> (อัปเดตข่าวสารและบทความใหม่)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>🎬 \u003Cstrong>YouTube:\u003C\u002Fstrong> \u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.youtube.com\u002F@SuperdevAcademy\">Superdev Academy Channel\u003C\u002Fa> (ติวเข้มแบบวิดีโอ)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>📸 \u003Cstrong>Instagram:\u003C\u002Fstrong> \u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.instagram.com\u002Fsuperdevacademy\u002F\">@superdevacademy\u003C\u002Fa> (เกร็ดความรู้สั้นๆ และเบื้องหลังการทำงาน)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>🎬 \u003Cstrong>TikTok:\u003C\u002Fstrong> \u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.tiktok.com\u002F@superdevacademy?lang=th-TH\">@superdevacademy\u003C\u002Fa> (Tips &amp; Tricks ฉบับย่อยง่าย)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>🌐 \u003Cstrong>Website:\u003C\u002Fstrong> \u003Ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"http:\u002F\u002Fsuperdevacademy.com\">superdevacademy.com\u003C\u002Fa> (คลังบทความและคอร์สเรียนฉบับเต็ม)\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>\u003C\u002Fp>","11ed6ehk1wyb_5m9n9uptb9.png","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclblg987654321\u002Fffaj44o2544h3j7\u002F11ed6ehk1wyb_5m9n9uptb9.png","2026-04-08 10:26:11.089Z","",{"keywords":15,"locale":48,"school_blog":58},[16,23,28,33,38,43],{"collectionId":17,"collectionName":18,"created":19,"created_by":13,"id":20,"name":21,"updated":22,"updated_by":13},"sclkey987654321","school_keywords","2026-03-16 05:10:32.092Z","s8r1st4glsmm7yl","ภาษา Rust","2026-04-10 16:14:41.900Z",{"collectionId":17,"collectionName":18,"created":24,"created_by":13,"id":25,"name":26,"updated":27,"updated_by":13},"2026-03-23 03:08:18.875Z","pu1hva5rmnc4672","สอน Rust","2026-04-10 16:14:44.507Z",{"collectionId":17,"collectionName":18,"created":29,"created_by":13,"id":30,"name":31,"updated":32,"updated_by":13},"2026-03-23 03:08:56.729Z","ttp78s7jayewgl4","Rust","2026-04-10 16:14:44.997Z",{"collectionId":17,"collectionName":18,"created":34,"created_by":13,"id":35,"name":36,"updated":37,"updated_by":13},"2026-04-08 10:25:37.373Z","uc1966vvgodzu1e","Rust Control Flow","2026-04-10 16:14:48.949Z",{"collectionId":17,"collectionName":18,"created":39,"created_by":13,"id":40,"name":41,"updated":42,"updated_by":13},"2026-04-08 10:25:48.924Z","zylttvpmcyo75ae","if-else Rust","2026-04-10 16:14:49.050Z",{"collectionId":17,"collectionName":18,"created":44,"created_by":13,"id":45,"name":46,"updated":47,"updated_by":13},"2026-04-08 10:25:57.816Z","imnwjhhvn1fcs2t","เขียนโปรแกรม Rust","2026-04-10 16:14:49.212Z",{"code":49,"collectionId":50,"collectionName":51,"created":52,"flag":53,"id":54,"is_default":55,"label":56,"updated":57},"th","pbc_1989393366","locales","2026-01-22 10:59:55.832Z","twemoji:flag-thailand","s8wri3bt4vgg2ji",true,"Thai","2026-04-10 15:42:46.614Z",{"category":59,"collectionId":60,"collectionName":61,"expand":62,"id":76,"views":77},"mfqe235iv6x1or8","pbc_2105096300","school_blogs",{"category":63},{"blogIds":64,"collectionId":65,"collectionName":66,"created":67,"created_by":13,"id":59,"image":68,"image_alt":13,"image_path":69,"label":70,"name":71,"priority":72,"publish_at":73,"scheduled_at":13,"status":74,"updated":75,"updated_by":13},[],"sclcatblg987654321","school_category_blogs","2026-03-16 04:40:07.104Z","47vt5s1gglj_tz0b90vnge.png","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclcatblg987654321\u002Fmfqe235iv6x1or8\u002F47vt5s1gglj_tz0b90vnge.png",{"en":71,"th":71},"Rust The Series",2,"2026-03-16 04:40:09.199Z","published","2026-04-25 02:32:15.619Z","kc8u98bzglgzyfm",111,"ffaj44o2544h3j7",[20,25,30,35,40,45],"เรียนรู้วิธีควบคุมทิศทางโปรแกรมในภาษา Rust ด้วย Control Flow เจาะลึกการใช้เงื่อนไข if-else และการวนลูป (loop, while, for) พร้อมทริคการเขียนโค้ดให้ปลอดภัย","rust-ep6-control-flow-if-else-loop","Control Flow ควบคุมทิศทางโปรแกรมด้วย if-else และลูป | Rust The Series EP.6","2026-04-20 03:13:13.364Z",1,{"th":81,"en":81}]