Loop: do-while loop
ในบทเรียนที่ผ่านมา เราได้เรียนรู้เกี่ยวกับ while loop ซึ่งจะทำการตรวจสอบเงื่อนไขก่อนที่จะเริ่มวนซ้ำ ในบทนี้ เราจะมาเรียนรู้เกี่ยวกับ do-while loop ซึ่งมีความแตกต่างกันเล็กน้อย คือจะทำการวนซ้ำชุดคำสั่งอย่างน้อยหนึ่งครั้งก่อนที่จะทำการตรวจสอบเงื่อนไข
โครงสร้างของ do-while loop
โครงสร้างของ do-while loop มีดังนี้:
do {
// ชุดคำสั่งที่ต้องการให้ทำซ้ำ
} while (condition);
จากโครงสร้างข้างต้น จะเห็นได้ว่าชุดคำสั่งภายใน do block จะถูก execute ก่อนเสมอ จากนั้นจึงจะทำการตรวจสอบ condition หาก condition เป็นจริง (true) loop จะวนซ้ำอีกครั้ง หาก condition เป็นเท็จ (false) loop จะสิ้นสุด
การทำงานของ do-while loop
- ชุดคำสั่งภายใน
doblock จะถูก execute - เงื่อนไข (
condition) จะถูกตรวจสอบ - ถ้า
conditionเป็นจริง (true) กลับไปที่ขั้นตอนที่ 1 - ถ้า
conditionเป็นเท็จ (false) loop จะสิ้นสุด
ตัวอย่างการใช้งาน do-while loop
ลองพิจารณาตัวอย่างต่อไปนี้:
<?php
$i = 0;
do {
echo "ค่าของ i คือ: " . $i . "<br>";
$i++;
} while ($i <= 5);
?>
ผลลัพธ์ที่ได้คือ:
ค่าของ i คือ: 0<br>
ค่าของ i คือ: 1<br>
ค่าของ i คือ: 2<br>
ค่าของ i คือ: 3<br>
ค่าของ i คือ: 4<br>
ค่าของ i คือ: 5<br>
ในตัวอย่างนี้ ตัวแปร $i ถูกกำหนดให้มีค่าเริ่มต้นเป็น 0 จากนั้น do-while loop จะทำการ execute ชุดคำสั่งภายใน do block ซึ่งจะทำการพิมพ์ค่าของ $i และเพิ่มค่า $i ขึ้นทีละ 1 หลังจากนั้นจะทำการตรวจสอบเงื่อนไข $i <= 5 หากเงื่อนไขเป็นจริง loop จะวนซ้ำอีกครั้ง จนกระทั่ง $i มีค่ามากกว่า 5 loop จึงจะสิ้นสุด
ตัวอย่างที่ซับซ้อนขึ้น
สมมติว่าเราต้องการให้ผู้ใช้ป้อนตัวเลข จนกว่าจะป้อนตัวเลขที่มากกว่า 10 เราสามารถใช้ do-while loop ได้ดังนี้:
<?php
$number = 0;
do {
$number = readline("กรุณาป้อนตัวเลขที่มากกว่า 10: ");
if (!is_numeric($number)) {
echo "กรุณาป้อนตัวเลขเท่านั้น!<br>";
$number = 0; // Reset number to force loop to continue
continue;
}
if ($number <= 10) {
echo "ตัวเลขที่คุณป้อนน้อยกว่าหรือเท่ากับ 10 กรุณาป้อนใหม่<br>";
}
} while ($number <= 10);
echo "ขอบคุณที่ป้อนตัวเลขที่มากกว่า 10 คือ " . $number;
?>
ในตัวอย่างนี้ เราใช้ฟังก์ชัน readline() เพื่อรับข้อมูลจากผู้ใช้ และตรวจสอบว่าข้อมูลที่ป้อนเป็นตัวเลขหรือไม่ ถ้าไม่ใช่ จะแสดงข้อความแจ้งเตือนและวนซ้ำอีกครั้ง ถ้าเป็นตัวเลข แต่มีค่าน้อยกว่าหรือเท่ากับ 10 ก็จะแสดงข้อความแจ้งเตือนและวนซ้ำอีกครั้ง Loop จะสิ้นสุดเมื่อผู้ใช้ป้อนตัวเลขที่มากกว่า 10
หมายเหตุ: ฟังก์ชัน readline() อาจไม่สามารถใช้งานได้ในทุกสภาพแวดล้อม หากไม่สามารถใช้งานได้ คุณอาจต้องใช้ฟังก์ชันอื่นในการรับข้อมูลจากผู้ใช้ เช่น การใช้ HTML form และ $_POST
ความแตกต่างระหว่าง while และ do-while
ความแตกต่างที่สำคัญระหว่าง while loop และ do-while loop คือ do-while loop จะทำการ execute ชุดคำสั่งภายใน do block อย่างน้อยหนึ่งครั้งเสมอ แม้ว่าเงื่อนไขจะเป็นเท็จตั้งแต่แรกก็ตาม ในขณะที่ while loop จะทำการตรวจสอบเงื่อนไขก่อนที่จะเริ่ม execute ชุดคำสั่ง หากเงื่อนไขเป็นเท็จตั้งแต่แรก ชุดคำสั่งภายใน while loop จะไม่ถูก execute เลย
ตัวอย่าง:
<?php
$i = 10;
// while loop
while ($i < 5) {
echo "This will not be printed by while loop.<br>";
$i++;
}
// do-while loop
do {
echo "This will be printed once by do-while loop.<br>";
$i++;
} while ($i < 5);
?>
ผลลัพธ์ที่ได้คือ:
This will be printed once by do-while loop.<br>
จากตัวอย่างข้างต้น จะเห็นได้ว่า while loop ไม่ได้ทำการ execute ชุดคำสั่งภายใน loop เลย เนื่องจากเงื่อนไข $i < 5 เป็นเท็จตั้งแต่แรก ในขณะที่ do-while loop ได้ทำการ execute ชุดคำสั่งภายใน do block หนึ่งครั้ง ก่อนที่จะทำการตรวจสอบเงื่อนไข
ข้อควรระวัง
เช่นเดียวกับ while loop การใช้ do-while loop อย่างไม่ระมัดระวังอาจทำให้เกิด infinite loop ได้ ดังนั้นจึงควรตรวจสอบให้แน่ใจว่าเงื่อนไขภายใน do-while loop จะเป็นเท็จในที่สุด เพื่อให้ loop สิ้นสุดการทำงาน
นอกจากนี้ คำสั่ง break และ continue สามารถใช้เพื่อควบคุมการทำงานของ do-while loop ได้เช่นเดียวกับ while loop
สรุป
do-while loop เป็นโครงสร้างควบคุมที่ใช้สำหรับการวนซ้ำโดยอาศัยเงื่อนไขที่กำหนด โดยจะทำการวนซ้ำชุดคำสั่งอย่างน้อยหนึ่งครั้งก่อนที่จะทำการตรวจสอบเงื่อนไข เหมาะสำหรับกรณีที่ต้องการให้ชุดคำสั่งถูก execute อย่างน้อยหนึ่งครั้งเสมอ เช่น การรับข้อมูลจากผู้ใช้และการตรวจสอบความถูกต้องของข้อมูล
ในบทต่อไป เราจะเรียนรู้เกี่ยวกับ Arrays: การสร้างและเข้าถึงข้อมูล