Saya selalu diajari bahwa memiliki efek samping dalam suatu ifkondisi adalah buruk. Yang saya maksud;
if (conditionThenHandle()) {
// do effectively nothing
}
... sebagai lawan;
if (condition()) {
handle();
}
... dan saya mengerti itu, dan kolega saya senang karena saya tidak melakukannya, dan kami semua pulang pukul 17:00 pada hari Jumat dan semua orang memiliki akhir pekan yang meriah.
Sekarang, ECMAScript5 memperkenalkan metode seperti every()dan some()untuk Array, dan saya menemukan mereka sangat berguna. Mereka lebih bersih daripada for (;;;), memberi Anda ruang lingkup lain, dan membuat elemen dapat diakses oleh variabel.
Namun ketika memvalidasi input, saya lebih sering menemukan diri saya menggunakan every/ somedalam kondisi untuk memvalidasi input, kemudian menggunakan every/ some lagi dalam tubuh untuk mengubah input menjadi model yang dapat digunakan;
if (input.every(function (that) {
return typeof that === "number";
})) {
input.every(function (that) {
// Model.findById(that); etc
}
} else {
return;
}
... ketika apa yang ingin saya lakukan adalah;
if (!input.every(function (that) {
var res = typeof that === "number";
if (res) {
// Model.findById(that); etc.
}
return res;
})) {
return;
}
... yang memberi saya efek samping dalam if, kondisi, yang buruk.
Sebagai perbandingan, ini adalah kode yang akan terlihat dengan yang lama for (;;;);
for (var i=0;i<input.length;i++) {
var curr = input[i];
if (typeof curr === "number") {
return;
}
// Model.findById(curr); etc.
}
Pertanyaan saya adalah:
- Apakah ini benar-benar praktik yang buruk?
- Apakah saya (mis | ab) menggunakan
somedanevery( haruskah saya menggunakanfor(;;;)ini?) - Apakah ada pendekatan yang lebih baik?
some, saya ingin melakukan sesuatu dengan elemen, jika saya menggunakan every, saya ingin melakukan sesuatu untuk semua elemen itu ... somedan everyjangan biarkan saya mengakses informasi itu, jadi saya tidak bisa gunakan mereka, atau saya harus menambahkan efek samping.
somedi saya ifkondisi untuk menentukan apakah elemen tertentu dalam array pameran properti tertentu, 9/10 saya perlu untuk beroperasi pada elemen di saya iftubuh; sekarang, karena sometidak memberitahu saya yang dari unsur-unsur dipamerkan properti (hanya "satu melakukan"), saya bisa menggunakan some lagi dalam tubuh (O (2n)), atau saya bisa saja melakukan operasi di dalam jika kondisi ( yang buruk, karena efek sampingnya di kepala).
everyjuga, tentu saja.