Kedua switch
pernyataan dan polimorfisme memiliki penggunaannya. Perhatikan bahwa opsi ketiga juga ada (dalam bahasa yang mendukung fungsi pointer / lambdas, dan fungsi tingkat tinggi): memetakan pengidentifikasi yang dipertanyakan ke fungsi handler. Ini tersedia dalam misalnya C yang bukan bahasa OO, dan C # yang *, tetapi belum (belum) di Jawa yang juga OO *.
Dalam beberapa bahasa prosedural (tidak memiliki polimorfisme atau fungsi tingkat tinggi) switch
/ if-else
pernyataan adalah satu-satunya cara untuk menyelesaikan kelas masalah. Begitu banyak pengembang, setelah terbiasa dengan cara berpikir seperti ini, terus menggunakan switch
bahkan dalam bahasa OO, di mana polimorfisme seringkali merupakan solusi yang lebih baik. Inilah sebabnya mengapa sering direkomendasikan untuk menghindari / switch
menolak pernyataan yang mendukung polimorfisme.
Bagaimanapun, solusi terbaik selalu tergantung pada kasus. Pertanyaannya adalah: opsi mana yang memberi Anda kode yang lebih bersih, lebih ringkas, dan lebih terpelihara dalam jangka panjang?
Pernyataan pergantian sering kali menjadi sulit, memiliki lusinan kasus, membuat pemeliharaannya sulit. Karena Anda harus menyimpannya dalam satu fungsi, fungsi itu dapat tumbuh besar. Jika demikian, Anda harus mempertimbangkan refactoring ke arah solusi berbasis peta dan / atau polimorfik.
Jika hal yang sama switch
mulai muncul di banyak tempat, polimorfisme mungkin merupakan pilihan terbaik untuk menyatukan semua kasus ini dan menyederhanakan kode. Terutama jika lebih banyak kasus diharapkan akan ditambahkan di masa depan; semakin banyak tempat yang Anda butuhkan untuk memperbarui setiap kali, semakin banyak kemungkinan kesalahan. Namun, sering kali penangan kasus individu sangat sederhana, atau ada begitu banyak dari mereka, atau mereka sangat terkait, sehingga refactoring mereka ke dalam hirarki kelas polimorfik penuh adalah berlebihan, atau menghasilkan banyak kode duplikat dan / atau kusut, sulit untuk mempertahankan hierarki kelas. Dalam hal ini, mungkin lebih mudah menggunakan fungsi / lambdas saja (jika bahasa Anda memungkinkan Anda).
Namun, jika Anda memiliki switch
di satu tempat, dengan hanya beberapa kasus melakukan sesuatu yang sederhana, itu mungkin merupakan solusi terbaik untuk membiarkannya seperti itu.
* Saya menggunakan istilah "OO" secara longgar di sini; Saya tidak tertarik pada perdebatan konseptual tentang apa yang "nyata" atau "murni" OO.