switch
ข้อความทั้งสองและความหลากหลายมีการใช้งานของพวกเขา โปรดทราบว่ามีตัวเลือกที่สามเช่นกัน (ในภาษาที่รองรับตัวชี้ฟังก์ชัน / lambdas และฟังก์ชันลำดับสูงกว่า): การแมปตัวระบุที่เป็นปัญหากับฟังก์ชันตัวจัดการ มีให้ในภาษา C ซึ่งไม่ใช่ภาษา OO และ C # คือ * แต่ไม่ (ยัง) ใน Java ซึ่งเป็น OO ด้วย *
ในบางภาษาขั้นตอน (ไม่มีความหลากหลายและฟังก์ชั่นลำดับสูงกว่า) switch
/ if-else
คำสั่งเป็นวิธีเดียวที่จะแก้ปัญหาในชั้นเรียน นักพัฒนาหลายคนคุ้นเคยกับวิธีคิดนี้อย่างต่อเนื่องswitch
แม้จะใช้ในภาษา OO ซึ่งความแตกต่างมักจะเป็นทางออกที่ดีกว่า นี่คือเหตุผลว่าทำไมจึงมักแนะนำให้หลีกเลี่ยง / refactor switch
งบเพื่อ polymorphism
ไม่ว่าจะด้วยวิธีใดก็ตามทางออกที่ดีที่สุดนั้นขึ้นอยู่กับแต่ละกรณี คำถามคือ: ตัวเลือกใดที่ช่วยให้คุณทำความสะอาดรหัสที่กระชับและบำรุงรักษาได้มากกว่าในระยะยาว?
คำสั่ง Switch มักจะเติบโตอย่างไม่น่าเชื่อมีหลายกรณีทำให้การบำรุงรักษาทำได้ยาก เนื่องจากคุณต้องเก็บไว้ในฟังก์ชั่นเดียวฟังก์ชั่นนั้นสามารถเติบโตได้อย่างมาก หากเป็นกรณีนี้คุณควรพิจารณาปรับโครงสร้างแผนที่และ / หรือ polymorphic
หากswitch
เริ่มเดียวกันปรากฏขึ้นในหลายสถานที่ความหลากหลายอาจเป็นตัวเลือกที่ดีที่สุดในการรวมกรณีเหล่านี้ทั้งหมดและลดความซับซ้อนของรหัส โดยเฉพาะอย่างยิ่งหากคาดว่าจะมีกรณีเพิ่มเติมอีกในอนาคต สถานที่ที่คุณต้องการอัปเดตในแต่ละครั้งยิ่งมีโอกาสมากขึ้นสำหรับข้อผิดพลาด อย่างไรก็ตามบ่อยครั้งที่ตัวจัดการเคสส่วนบุคคลนั้นเรียบง่ายหรือมีจำนวนมากหรือมีความสัมพันธ์กันอย่างมากการปรับโครงสร้างให้เป็นลำดับชั้นของโพลีมอร์ฟิคเต็มรูปแบบนั้นมากเกินไปหรือส่งผลให้มีรหัสซ้ำกัน ยากที่จะรักษาลำดับชั้นของชั้นเรียน ในกรณีนี้อาจใช้ฟังก์ชั่น / lambdas แทน (ถ้าภาษาของคุณอนุญาตให้คุณ)
อย่างไรก็ตามหากคุณมีswitch
สถานที่แห่งเดียวโดยมีเพียงไม่กี่กรณีที่ทำสิ่งที่ง่ายมันอาจเป็นทางออกที่ดีที่สุดที่จะปล่อยให้มันเป็นไปได้
* ฉันใช้คำว่า "OO" ที่นี่อย่างหลวม ๆ ฉันไม่สนใจการอภิปรายเชิงแนวคิดเกี่ยวกับ OO "ของจริง" หรือ "บริสุทธิ์"