เมื่อคืน pFz เอา url ที่เกี่ยวกับการเปรียบเทียบระหว่าง switch กับ if-else โดยคำตอบก่อนที่ pFz จะแจมไปก็คือ if-else เร็วกว่า แต่ pFz แย้งไปตรงข้ามเพราะ compiler ส่วนใหญ่จะมีการแต่ง switch ให้เร็วขึ้นโดยการแปลงเป็น hash table ซะ ดูไปก็ไม่รู้หรอกว่าอะไรจะเร็วกว่า เลยลองเขียน จาวากับซีมาทดลองดูให้เห็นกันไปเลย
ผลสรุปก็คืออะไรจะเร็วกว่าอะไรขึ้นกับ
- จำนวนกรณีที่นำมาเปรียบเทียบยิ่งเยอะจะยิ่งเห็นผลชัด
- กรณีที่ตกลงไปในการเปรียบเทียบ จากโค้ดก็คือค่า cSample นั่นเอง โดยถ้าตกในกรณีแรกของ if หรือ case แน่นอน if จะเร็วกว่า แต่ถ้าตกกรณีหลังๆ switch จะเร็วกว่า
ผลลัพธ์
เลขบนคือ switch เลขล่างคือ if-else
Java, cSample = 0
llun@pluto:~/Desktop/test$ java Test
1467552309
1264288753
Java, cSample = 50 (default/else)
llun@pluto:~/Desktop/test$ java Test
2286091238
2327289899
Java, cSample = 15 (middle)
llun@pluto:~/Desktop/test$ java Test
1424442862
1570707918
Java ยิ่งตกเคสหลังๆ if/else จะช้าลง คล้าย switch แต่ switch หลังๆ จะเร็วหว่า
C, cSample = 0
llun@pluto:~/Desktop/test$ ./test
8.00
7.00
C, cSample = 50 (default/else)
llun@pluto:~/Desktop/test$ ./test
6.00
43.00
C, cSample = 15 (middle)
llun@pluto:~/Desktop/test$ ./test
8.00
26.00
ของ C นี่ switch แทบจะเป็นค่าคงที่เลย
สำหรับ php ยังไม่ได้เขียน แค่คิดว่าผลน่าจะไปทาง if/else มากกว่าเนื่องจาก php ไม่มีการแปลง code ก่อนเหมือนสองภาษาข้างบน ไว้เย็นๆ ค่อยเขียนลองอีกทีละกัน
เอกสารเพิ่มเติมที่ pFz เอามาให้อ่าน :
เพิ่มเติมสำหรับภาษา php
Runtime, Sourcecode
เพิ่มเติมอีกภาษา ruby
Sourcecode
หลังจากทดลองพบความแตกต่างอย่างสิ้นเชิง เพราะ php กับ ruby switch ช้ากว่า if-else ทุกกรณี โดยเฉพาะ ruby switch นี่เมื่อตกกรณี default นี่ช้าโคตรๆ เลย แต่ php ผลกับใกล้เคียงกัน เห้อ อยู่กับ php ต่อไป ![]()