Switch
written by คีตภัทร แก้วพลงาม 630710316
คำสั่ง switch ใช้เพื่อดำเนินการคำสั่งหนึ่งจากหลายเงื่อนไข ทำงานคล้ายกับคำสั่ง if-else-if มาเรียนรู้เรื่องนี้ไปพร้อม ๆ กันนะคะ
ข้อสังเกตเกี่ยวกับ switch case:
1. default เป็นคำสั่งที่ไม่จำเป็นต้องมีก็ได้ แต่ถ้ามี default ต้องอยู่เป็นคำสั่งสุดท้ายเสมอ
2. switch มี default ได้เพียงตัวเดียวเท่านั้น หากมีมากกว่าหนึ่งจะทำให้เกิดข้อผิดพลาดแบบ Fatal error
3. แต่ละ case จะมีคำสั่ง break เพื่อใช้หยุดการทำงานของลำดับคำสั่งใน case นั้น
4. คำสั่ง break ใน switch มีหรือไม่มีก็ได้ แต่ถ้าไม่มี คำสั่งหลังจากที่เจอค่า case ที่ตรงกันจะถูกดำเนินการทั้งหมด
5. สามารถซ้อนคำสั่ง switch ด้วย switch อีกตัวได้(Nested switch) แต่โปรแกรมจะซับซ้อนและอ่านยากขึ้น
6. ใช้เครื่องหมายเซมิโคลอน (;) แทนเครื่องหมายโคลอน (:) ได้ โดยจะไม่ทำให้เกิดข้อผิดพลาดใด ๆ
PHP Switch Flowchart

เรามาดูการทำงานของคำสั่ง switch-case จาก flowchart ในรูปข้างบนกันค่ะเพื่อน ๆ
1. โปรแกรมจะเริ่มตรวจสอบค่า expression ใน switch ก่อน เพื่อดูว่ามีเงื่อนไขตรงกับ case ใดบ้าง
2. แต่ละ case จะทำการเปรียบเทียบค่ากับ expression นั่นก็คือ ถ้ามีค่าที่ตรงกับกรณีใดอยู่ก็จะดำเนินการคำสั่งในกรณีนั้น และออกจากการทำงานด้วยคำสั่ง break แต่ถ้าไม่มีกรณีไหนตรง จะข้ามไปตรวจสอบในกรณีถัดไป
3. ถ้าในทุกกรณีไม่มีกรณีไหนที่ตรงเลย ระบบจะไปทำงานที่ default (ถ้ามี)
4. หลังจากประมวลผลใน switch-case เสร็จ โปรแกรมจะดำเนินการคำสั่งนอก switch-case ต่อไป
ตัวอย่างที่ 1: switch ที่มีคำสั่ง break และ default ใน PHP
เมื่อพบคำสั่ง break จะออกจากบล็อก switch และหยุดการทำงานของโค้ดที่เหลือทันที ในกรณีอื่นๆ จะไม่ตรวจสอบเงื่อนไขอีก default ไม่จำเป็นต้องมี break เพราะการทำงานของบล็อกจะสิ้นสุดที่ตรงนั้นโดยอัตโนมัติ
จากตัวอย่างโค้ดที่ 1
· กำหนดให้ตัวแปร $x เท่ากับ 2
· คำสั่ง switch จะทำการเปรียบเทียบค่าของ $x กับแต่ละกรณีใน case
· ในกรณีที่ตรงกัน ค่าของ $x เท่ากับ 2 จะทำการแสดงผลว่า "Choice is 2" มีคำสั่ง break หลังจากกรณีนี้ โปรแกรมจะหยุดการทำงานของ switch
· กรณีอื่น ๆ คือ case 1 และ case 3 จะไม่ถูกทำงาน เนื่องจากไม่ตรงกัน
· default จะไม่ทำงานเช่นกัน เพราะมีกรณีที่ตรงกันอยู่แล้ว
ตัวอย่างที่ 2: switch ที่ไม่มีคำสั่ง break และ default ใน PHP
จะทำการรันโค้ดต่อเนื่องจาก case ที่ตรงเงื่อนไขไปยัง case ถัดไป (fall-through) แม้ว่าจะไม่มีเงื่อนไขไหนตรงกันมันก็จะรันจนจบบล็อก switch หากไม่มี default และไม่มี case ใดตรง โปรแกรมจะไม่ทำงาน
จากตัวอย่างโค้ดที่ 2
· กำหนดให้ตัวแปร $x เท่ากับ 0
· คำสั่ง switch จะตรวจสอบค่าของ $x ใน
case 0: คือเมื่อ $x เท่ากับ 0 จะแสดงผลว่า "x equals 0" ไม่มีคำสั่ง break จึงทำงานต่อไป
case 1: แสดงผลว่า "x equals 1" ไม่มีคำสั่ง break จึงทำงานต่อไป
case 2: แสดงผลว่า "x equals 2".
· การทำงานของโค้ดนี้จะทำต่อเนื่องเพราะไม่มีการใช้คำสั่ง break
ตัวอย่างที่ 3: switch ที่มีมากกว่า 1 case ในบล็อกโค้ดเดียวกัน
เมื่อ switch มีหลาย case ในบล็อกเดียวกัน โปรแกรมจะทำงานในบล็อกโค้ดเดียวกันในทุก case ที่ไม่มี break ก่อน และจะหยุดการทำงานเมื่อพบคำสั่ง break
จากตัวอย่างที่ 3
· กำหนดให้ตัวแปร $d เท่ากับ 3
· คำสั่ง switch จะตรวจสอบค่าของ $d ในกรณีที่ตรงกัน นั่นก็คือ case 1, 2, 3, 4 และ 5 เมื่อ $d เท่ากับ 3 จะแสดงผล "The week feels so long!" และใช้คำสั่ง break เพื่อหยุดการทำงานของ switch
· case 6, 0 จะไม่ถูกตรวจสอบเพราะมีค่าที่ตรงกันแล้ว
· default จะไม่ทำงานเช่นกัน
ได้เห็นตัวอย่างกันไปแล้ว เป็นอย่างไรกันบ้างคะ เรื่อง Switch ไม่ยากเลยใช่ไหม? งั้นเรามาต่อกันที่การเปรียบเทียบในแต่ละภาษากันเลยค่ะ
เปรียบเทียบ switch case ในภาษา PHP, Java, C, Python และ JavaScript
ภาษา PHP
ใช้ $ เพื่อประกาศตัวแปร คือ $day
ใช้ echo เพื่อแสดงผล
ประเภทของค่าที่ใช้สามารถใช้ตัวเลขและสตริง
ใช้วงเล็บปีกกา {} เพื่อกำหนดบล็อกคำสั่งใน switch
ในโค้ดของภาษา php ได้กำหนดค่าให้ตัวแปร $day เท่ากับ 4 โดยจะทำการเปรียบเทียบเงื่อนไขกับค่าในแต่ละ case
case 6 คือ ถ้า $day มีค่าเท่ากับ 6 จะแสดงผลว่า "Today is Saturday" และหยุดการทำงานด้วยคำสั่ง break
case 7 คือ ถ้า $day มีค่าเท่ากับ 7 จะแสดงผลว่า "Today is Sunday" และหยุดการทำงานด้วยคำสั่ง break
default คือ ถ้า $day ไม่ตรงกับค่าของ case ใดเลย และในโค้ดนี้ $day = 4 ไม่ตรงกับทั้ง 6 และ 7 จึงทำงานใน default และแสดงผลว่า "Looking forward to the Weekend" นั่นเองค่ะ
ภาษา Java
ประกาศ data type ก่อนชื่อ คือ int day
ใช้ System.out.println เพื่อแสดงผล
ประเภทของค่าที่ใช้สามารถใช้ int, char, byte, short, และ String
ใช้วงเล็บปีกกา {} เพื่อกำหนดบล็อกคำสั่งใน switch
จากโค้ดภาษา Java จะทำการประกาศคลาส main ก่อน ซึ่งเป็นคลาสหลักของโปรแกรม และกำหนดให้ตัวแปร day เท่ากับ 4
คำสั่ง switch(day) จะตรวจสอบค่าของ day และเปรียบเทียบกับค่าในแต่ละ case
case 6 คือ ถ้าค่า day เท่ากับ 6 จะแสดงผลว่า "Today is Saturday" และหยุดการทำงานด้วยคำสั่ง break
case 7 คือ ถ้าค่า day เท่ากับ 7 จะแสดงผลว่า "Today is Sunday" และหยุดการทำงานด้วยคำสั่ง break
default คือ ถ้าค่า day ไม่ตรงกับกรณีใดๆ ในโค้ดนี้ day = 4 โปรแกรมจะทำงานใน default และแสดงผลว่า "Looking forward to the Weekend"
ภาษา C
ประกาศ data type ก่อนชื่อ คือ int day
ใช้ printf เพื่อแสดงผล
ประเภทของค่าที่ใช้สามารถใช้ int, char, และค่าทั้งหมดที่เป็น Numeric Types เช่น enum
ใช้วงเล็บปีกกา {} เพื่อกำหนดบล็อกคำสั่งใน switch
ในภาษา C จะต้องนำเข้าไลบรารี #include <stdio.h> และ int main() ซึ่งเป็นฟังก์ชันหลักของโปรแกรม หลังจากนั้นก็จะประกาศตัวแปร day เท่ากับ 4
switch (day) ทำการตรวจสอบค่าของ day และเปรียบเทียบในแต่ละ case
case 6 คือ ถ้าค่า day เท่ากับ 6 จะแสดงผลว่า "Today is Saturday" และหยุดการทำงานด้วยคำสั่ง break
case 7 คือ ถ้าค่า day เท่ากับ 7 จะแสดงผลว่า "Today is Sunday" และหยุดการทำงานด้วยคำสั่ง break
default คือ ถ้าค่า day ไม่ตรงกับกรณีใดๆ เลย ในโค้ดนี้ day = 4 โปรแกรมจะทำงานใน default และแสดงผลว่า "Looking forward to the Weekend"
return 0 จะทำการคืนค่า 0 เพื่อบ่งบอกว่าโปรแกรมทำงานเสร็จสิ้นแล้วนั่นเองค่ะ
ภาษา Python
ใน Python จะไม่มีคำสั่ง switch case แต่มีฟีเจอร์ที่เรียกว่า match-case ซึ่งจะทำงานคล้ายกับ switch case
ไม่ต้องประกาศ data type ก่อนชื่อ คือ day = 4
ใช้ print() เพื่อแสดงผล
ประเภทของค่าที่ใช้สามารถใช้ int, str, และค่าอื่น ๆ สามารถเปรียบเทียบได้
ไม่ใช้วงเล็บปีกกา {} แต่ใช้การย่อหน้าเพื่อกำหนดบล็อกคำสั่งใน match-case
มาถึงภาษา Python กันแล้วนะคะ โดยในโค้ดได้กำหนดฟังก์ชัน runDay ซึ่งมันจะทำงานเมื่อถูกเรียกใช้ ถัดไปทำการประกาศตัวแปร day เท่ากับ 4
match day ทำการตรวจสอบค่าของ day และเปรียบเทียบกับค่าใน case
case 6 คือ ถ้าค่า day เท่ากับ 6 จะแสดงผลว่า "Today is Saturday"
case 7 คือ ถ้าค่า day เท่ากับ 7 จะแสดงผลว่า "Today is Sunday"
case _ คือ ตัว underscore(_) เป็นการแทนค่าใดๆ ที่ไม่ตรงกับกรณีก่อนหน้า ในโค้ดนี้ day = 4 ซึ่งไม่ตรงกับกรณีใดเลย จะทำการแสดงผลว่า "Looking forward to the Weekend"
บรรทัดสุดท้ายของโค้ดเป็นการเรียกใช้งานฟังก์ชัน runDay เพื่อใช้ประมวลผลโปรแกรมนั่นเองค่ะ
ภาษา JavaScript
ใช้ let, var หรือ const เพื่อประกาศตัวแปร
ใช้ console.log() เพื่อแสดงผล
ประเภทของค่าที่ใช้สามารถใช้ตัวเลขและสตริงใน switch
ใช้วงเล็บปีกกา {} เพื่อกำหนดบล็อกคำสั่งใน switch
เดินทางมาถึงภาษาสุดท้ายกันแล้วนะคะ นั่นก็คือภาษา JavaScript โดยโค้ดนี้จะทำการประกาศตัวแปร grade เป็น 'A' และตัวแปร result ซึ่งเป็นตัวแปรที่ใช้ออกผลลัพธ์
switch (grade) เป็นการเริ่มต้นคำสั่ง switch เพื่อตรวจสอบ grade ในแต่ละ case
case 'A' คือ ถ้า grade เท่ากับ 'A' จะให้ค่า result เป็น "Grade is excellent" และหยุดการทำงานของ switch ด้วยคำสั่ง break
case 'B' คือ ถ้า grade เท่ากับ 'B' จะให้ค่า result เป็น "Grade is good" และหยุดการทำงานด้วยคำสั่ง break
case 'C' คือ ถ้า grade เท่ากับ 'C' จะให้ค่า result เป็น "Grade is Average" และหยุดการทำงานด้วยคำสั่ง break
case 'D' คือ ถ้า grade เท่ากับ 'D' จะให้ค่า result เป็น "Grade is Poor" และหยุดการทำงานด้วยคำสั่ง break
default คือ ถ้า grade ไม่ตรงกับกรณีใด ๆ เลย จะให้ค่า result เป็น "NO grades achieved"
console.log(result) เป็นการแสดงผลค่าของ result ออกมา ในโค้ดนี้ตรงกับ case 'A' ผลลัพธ์จึงเป็น Grade is excellent
อ่านมาถึงตรงนี้แล้วเพื่อน ๆ คงจะพอเข้าใจเกี่ยวกับเรื่องนี้มากขึ้นนะคะ แต่ถ้านำโค้ดแต่ละภาษามาเปรียบเทียบข้าง ๆ กันดูล่ะ
เปรียบเทียบแต่ละโค้ดในภาษา PHP, Java, C, Python และ JavaSript
ดังนั้นจะสรุปความแตกต่างได้ว่า
การประกาศตัวแปรใน PHP ใช้ $, Java กับ C ต้องระบุ data type, Python ไม่ต้องระบุ และ JavaScript ใช้ let, var หรือ const
การแสดงผลใน PHP ใช้
echo, Java ใช้System.out.println, C ใช้printf, Python ใช้print()และ JavaScript ใช้console.log()การใช้บล็อกคำสั่งใน switch สำหรับ PHP, Java, C และ JavaScript ใช้วงเล็บปีกกา ส่วน Python ใช้การย่อหน้า
ประเภทของค่าที่ใช้ในแต่ละภาษามีการรองรับที่แตกต่างกันเห็นได้จากตาราง
ตารางเปรียบเทียบความแตกต่างในภาษา PHP, Java, C และ Python
Data type
$
ระบุ
ระบุ
ไม่ระบุ
let, var หรือ const
การแสดงผลลัพธ์
echo
System.out.println
printf
print()
console.log()
ประเภทของค่าที่ใช้
ตัวเลขและสตริง
int, char, byte, short, และ String
int, char, และค่าทั้งหมดที่เป็น Numeric Types เช่น enum
int, str, และค่าอื่น ๆ ที่สามารถเปรียบเทียบได้
ตัวเลขและสตริง
กำหนดบล็อกคำสั่ง
{}
{}
{}
ย่อหน้า
{}
Slide
Video
Reference
Data, R. (Copyright 1999-2024). PHP switch Statement. Retrieved from PHP switch Statement: https://www.w3schools.com/php/php_switch.asp
Data, R. (Copyright 1999-2024). C Switch. Retrieved from C Switch: https://www.w3schools.com/c/c_switch.php
Data, R. (Copyright 1999-2024). Java Switch. Retrieved from Java Switch: https://www.w3schools.com/java/java_switch.asp
geeksforgeeks. JavaScript switch Statement. (2024, Aug 22). Retrieved from JavaScript switch Statement: https://www.geeksforgeeks.org/switch-case-in-javascript/
geeksforgeeks. PHP switch Statement. (2023, Feb 15). Retrieved from PHP switch Statement: https://www.geeksforgeeks.org/php-switch-statement/
geeksforgeeks. Python Match Case Statement. (2024, Jun 19). Retrieved from Python Match Case Statement: https://www.geeksforgeeks.org/python-match-case-statement/
javatpoint. PHP Switch. (Copyright 2024). Retrieved from PHP Switch: https://www.javatpoint.com/php-switch
tutorialspoint. PHP - Switch Statement. (Copyright 2024). Retrieved from PHP - Switch Statement: https://www.tutorialspoint.com/php/php_switch_statement.htm
Last updated