วันจันทร์ที่ 19 กันยายน พ.ศ. 2554

การเขียนโปรแกรมแบบเงือนไข

Swich Case

คำสั่ง switch นั้นมีลักษณะการทำงานคล้ายกับคำสั่ง if มาก ซึ่งจะถูกใช้ในกรณีที่เมื่อเราต้องการเปรียบเทียบตัวแปร ที่มีค่าต่าง ๆ กัน และทำการประมวลผลคำสั่งแตกต่างกันไปตามค่าของตัวแปร ดังตัวอย่าง
01.<?php
02.// ในกรณีที่เราใช้คำสั่ง if เพื่อตรวจสอบเงื่อนไข
03.if ($i == 0) {
04.    echo "i equals 0";
05.} elseif ($i == 1) {
06.    echo "i equals 1";
07.} elseif ($i == 2) {
08.    echo "i equals 2";
09.}
10.  
11.// เราสามารถเปลี่ยนจากคำสั่ง if มาเป็น switch ได้ดังนี้
12.switch($i) {
13.    case 0:
14.        echo "i equals 0";  
15.        break;
16.    case 1:
17.        echo "i equals 1";
18.        break;
19.    case 2:
20.        echo "i equals 2";
21.        break;
22.}
23.?>

ตัวอย่างการใช้คำสั่ง switch เพื่อตรวจสอบเงื่อนไขของตัวแปรชนิด string
01.<?php
02.switch($i) {
03.    case "apple":
04.        echo "i is apple";
05.        break;
06.    case "bar":
07.        echo "i is bar";
08.        break;
09.    case "cake":
10.        echo "i is cake";
11.        break;
12.}
13.?>

เมื่อเราได้เห็นตัวอย่างแล้ว เรามาดูความหมายของมันกันดีกว่า ว่าทำไมต้องใช้คำสั่ง break; ทุกเงื่อนไขที่ทำการตรวจสอบ ก็เพราะว่าคำสั่ง switch นั้นมันทำการประมวลผลคำสั่งแบบ line by line (หรือ statement by statement) ในส่วนเริ่มต้นของเงื่อนไขต่าง ๆ ที่กำหนด จะไม่มีคำสั่งที่ต้องประมวลผล เพราะมีเพียงแต่คำสั่ง case ที่ใช้ตรวจสอบเงื่อนไขของตัวแปรเท่านั้น แต่เมื่อโปรแกรมทำการตรวจสอบเงื่อนไขเรียบร้อยแล้ว ก็จะเข้ามาทำงานใน statement ของ case นั้น ๆ ที่ตรงตามเงื่อนไข ซึ่งถ้าเราไม่มีคำสั่ง break; ในแต่ละ case นั้น โปรแกรมก็จะทำการประมวลผลคำสั่งทุกคำสั่งที่อยู่ใต้ case ที่ตรวจสอบเงื่อนไขผ่าน (เป็น true) ดังนั้นเราจึงต้องมีคำสั่ง break; ในแต่ละ case ด้วย เพื่อเป็นตัวบ่งบอกให้โปรแกรมออกจากบล็อก switch ทันทีเมื่อประมวลผลคำสั่งใน case ที่ตรงตามเงื่อนไข
เราลองไปดูตัวอย่าง ในกรณีที่ไม่มีคำสั่ง break กันเลยครับ เพื่อให้เห็นภาพที่ชัดเจนขึ้น
01.<?php
02.$i = 1;
03.switch ($i) {
04.    case 0:
05.        echo "$i equals 0\n";
06.    case 1:
07.        echo "i equals 1\n";
08.    case 2:
09.        echo "i equals 2\n";
10.}
11.  
12./* ผลลัพธ์ที่แสดง
13.i equals 1
14.i equals 2
15.เนื่องจากไม่มีคำสั่ง break เพื่อสั่งให้โปรแกรมหยุดการทำงาน 
16.มันจึงทำการประมวลผลคำสั่งใน case อื่น ๆ ต่อทันที */
17.?>

ในกรณีที่เราต้องการตรวจสอบค่าหลาย ๆ ค่า ซึ่งในบางค่าที่เราทำการตรวจสอบนั้นจะมี statement (หรือคำสั่ง) ใน case นั้น ๆ เหมือนกัน สามารถทำได้โดย
01.<?php
02.switch ($i) {
03.    case 0:
04.    case 1:
05.    case 2:
06.        echo "i is less than 3 but not negative";
07.        break;
08.    case 3:
09.        echo "i is 3";
10.}
11./* นั่นก็คือถ้า $i = 0, $i = 1, $i =2 ก็จะทำตาม statement เดียวกัน */
12.?>

เมื่อเรากำหนด case ในการตรวจสอบเงื่อนไขแล้วแต่เราไม่อาจจะกำหนดได้หมดทุก case ดังนั้นใน case อื่น ๆ ที่เราไม่ได้กำหนด เราสามารถกำหนด statement ผ่าน case อื่น ๆ ได้โดยใช้ default ดังตัวอย่าง
01.<?php
02.switch ($i) {
03.    case 0:
04.        echo "i equals 0";
05.        break;
06.    case 1:
07.        echo "i equals 1";
08.        break;
09.    case 2:
10.        echo "i equals 2";
11.        break;
12.    default:
13.        echo "i is not equal to 0, 1 or 2";
14.}
15./* หมายความว่าถ้า $i > 3 หรือ $i < 0 จะทำใน statement ของ default */
16.?>

เราสามารถใช้คำสั่ง switch ในรูปแบบโครงสร้าง alternative syntax (colon syntax) ก็ได้ ดังตัวอย่าง
01.<?php
02.switch($i) :
03.    case 0:
04.        echo "i equals 0";
05.        break;
06.    case 1:
07.        echo "i equals 1";
08.        break;
09.    case 2:
10.        echo "i equals 2";
11.        break;
12.    default:
13.        echo "i is not equal to 0, 1 or 2";
14.endswitch;
15.?>

ไม่มีความคิดเห็น:

แสดงความคิดเห็น