Saya menerima tinjauan kode dari pengembang senior hari ini dengan bertanya, "Ngomong-ngomong, apa keberatan Anda untuk mengirim fungsi dengan menggunakan pernyataan switch?" Saya telah membaca di banyak tempat tentang bagaimana memompa argumen melalui metode switch to call adalah OOP yang buruk, tidak dapat diperluas, dll. Namun, saya tidak dapat benar-benar memberikan jawaban yang pasti untuknya. Saya ingin menyelesaikan ini untuk diri saya sendiri sekali dan untuk semua.
Berikut adalah saran kode kami yang bersaing (php digunakan sebagai contoh, tetapi dapat diterapkan secara lebih universal):
class Switch {
public function go($arg) {
switch ($arg) {
case "one":
echo "one\n";
break;
case "two":
echo "two\n";
break;
case "three":
echo "three\n";
break;
default:
throw new Exception("Unknown call: $arg");
break;
}
}
}
class Oop {
public function go_one() {
echo "one\n";
}
public function go_two() {
echo "two\n";
}
public function go_three() {
echo "three\n";
}
public function __call($_, $__) {
throw new Exception("Unknown call $_ with arguments: " . print_r($__, true));
}
}
Bagian dari argumennya adalah "Ini (beralih metode) memiliki cara yang jauh lebih bersih dalam menangani kasus default daripada apa yang Anda miliki dalam metode sihir __call () generik."
Saya tidak setuju tentang kebersihan dan bahkan lebih suka menelepon, tetapi saya ingin mendengar apa yang orang lain katakan.
Argumen yang bisa saya kemukakan dalam mendukung Oop
skema:
- Sedikit lebih bersih dalam hal kode yang harus Anda tulis (lebih sedikit, lebih mudah dibaca, lebih sedikit kata kunci untuk dipertimbangkan)
- Tidak semua tindakan didelegasikan ke metode tunggal. Tidak banyak perbedaan dalam eksekusi di sini, tetapi setidaknya teks lebih terkotak.
- Dalam nada yang sama, metode lain dapat ditambahkan di mana saja di kelas daripada tempat tertentu.
- Metode diberi nama, yang bagus.
- Tidak berlaku di sini, tetapi mempertimbangkan kasus di mana
Switch::go()
dioperasikan pada anggota daripada parameter. Anda harus mengubah anggota terlebih dahulu, lalu memanggil metode. UntukOop
Anda dapat memanggil metode secara mandiri kapan saja.
Argumen yang bisa saya kemukakan dalam mendukung Switch
skema:
- Demi argumen, metode yang lebih bersih untuk menangani permintaan default (tidak diketahui)
- Tampaknya kurang ajaib, yang mungkin membuat pengembang asing merasa lebih nyaman
Adakah yang punya sesuatu untuk ditambahkan di kedua sisi? Saya ingin memiliki jawaban yang bagus untuknya.
Oop
memungkinkan untuk memiliki phpdoc untuk menggambarkan setiap metode, yang dapat diuraikan oleh beberapa IDE (misalnya, NetBeans).