Tôi luôn được dạy rằng có tác dụng phụ trong if
tình trạng là xấu. Ý của tôi là;
if (conditionThenHandle()) {
// do effectively nothing
}
... như trái ngược với;
if (condition()) {
handle();
}
... Và tôi hiểu điều đó, và đồng nghiệp của tôi rất vui vì tôi không làm điều đó, và tất cả chúng tôi về nhà vào lúc 17:00 ngày thứ Sáu và mọi người đều có một ngày cuối tuần vui vẻ.
Bây giờ, ECMAScript5 đã giới thiệu các phương thức như every()
và some()
đến Array
, và tôi thấy chúng rất hữu ích. Chúng sạch hơn so với for (;;;)
, cung cấp cho bạn một phạm vi khác và làm cho phần tử có thể truy cập được bằng một biến.
Tuy nhiên, khi xác thực đầu vào, tôi thường không thấy mình sử dụng every
/ some
trong điều kiện để xác thực đầu vào, sau đó sử dụng every
/ some
một lần nữa trong phần thân để chuyển đổi đầu vào thành một mô hình có thể sử dụng được;
if (input.every(function (that) {
return typeof that === "number";
})) {
input.every(function (that) {
// Model.findById(that); etc
}
} else {
return;
}
... khi điều tôi muốn làm là;
if (!input.every(function (that) {
var res = typeof that === "number";
if (res) {
// Model.findById(that); etc.
}
return res;
})) {
return;
}
... Điều này mang lại cho tôi những tác dụng phụ trong một if
tình trạng tồi tệ.
Trong so sánh, đây là mã sẽ nhìn với một cái cũ for (;;;)
;
for (var i=0;i<input.length;i++) {
var curr = input[i];
if (typeof curr === "number") {
return;
}
// Model.findById(curr); etc.
}
Câu hỏi của tôi là:
- Đây chắc chắn là một thực hành xấu?
- Am I (mis | ab) sử dụng
some
vàevery
( nên tôi được sử dụng mộtfor(;;;)
cho việc này?) - Có một cách tiếp cận tốt hơn?
some
, tôi muốn làm gì đó với phần tử, nếu tôi sử dụng every
, tôi muốn làm gì đó cho tất cả các phần tử đó ... some
và every
đừng để tôi truy cập thông tin đó, vì vậy tôi không thể sử dụng chúng, hoặc tôi phải thêm tác dụng phụ.
some
trong if
điều kiện của mình để xác định xem một phần tử nào đó trong mảng có thể hiện một thuộc tính nhất định hay không, 9/10 tôi cần phải hoạt động trên phần tử đó trong if
cơ thể; bây giờ, khi some
không cho tôi biết mà các yếu tố trưng bày tài sản (chỉ là "một đã"), tôi hoặc là có thể sử dụng some
lại trong cơ thể (O (2n)), hoặc tôi có thể chỉ cần thực hiện các hoạt động bên trong nếu điều kiện ( đó là xấu, bởi vì nó là một tác dụng phụ trong đầu).
every
như vậy.