Saya terkadang menemukan kode yang mirip dengan contoh berikut (apa fungsi ini tidak persis di luar lingkup pertanyaan ini):
function doSomething(value) {
if (check1(value)) {
return -1;
}
else if (check2(value)) {
return value;
}
else {
return false;
}
}
Seperti yang Anda lihat, if, else ifdan elsepernyataan yang digunakan dalam hubungannya dengan returnpernyataan. Ini tampaknya cukup intuitif untuk pengamat biasa, tapi saya pikir akan lebih elegan (dari perspektif pengembang perangkat lunak) untuk menghapus else-s dan menyederhanakan kode seperti ini:
function doSomething(value) {
if (check1(value)) {
return -1;
}
if (check2(value)) {
return value;
}
return false;
}
Ini masuk akal, karena segala sesuatu yang mengikuti returnpernyataan (dalam lingkup yang sama) tidak akan pernah dieksekusi, membuat kode di atas secara semantik sama dengan contoh pertama.
Manakah di atas yang lebih cocok dengan praktik pengkodean yang baik? Apakah ada kekurangan pada kedua metode sehubungan dengan keterbacaan kode?
Sunting: Saran rangkap telah dibuat dengan pertanyaan ini disediakan sebagai referensi. Saya percaya pertanyaan saya menyentuh topik yang berbeda, karena saya tidak bertanya tentang menghindari pernyataan rangkap seperti yang disajikan dalam pertanyaan lain. Kedua pertanyaan berusaha mengurangi pengulangan, meskipun dengan cara yang sedikit berbeda.
-1adalah angka, falseadalah boolean, dan valuetidak ditentukan di sini sehingga bisa berupa semua jenis objek.
valuesebenarnya adalah bilangan bulat. Jika itu bisa apa saja maka itu bahkan lebih buruk.
elselebih kecil, masalah yang lebih besar adalah Anda jelas mengembalikan dua tipe data dari satu fungsi, yang membuat API dari fungsi tersebut tidak dapat diprediksi.