Saya selalu diajari bahwa memiliki efek samping dalam suatu if
kondisi 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
/ some
dalam 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
some
danevery
( 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 ... some
dan every
jangan biarkan saya mengakses informasi itu, jadi saya tidak bisa gunakan mereka, atau saya harus menambahkan efek samping.
some
di saya if
kondisi untuk menentukan apakah elemen tertentu dalam array pameran properti tertentu, 9/10 saya perlu untuk beroperasi pada elemen di saya if
tubuh; sekarang, karena some
tidak 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).
every
juga, tentu saja.