Serials Javascript Style Guide – Iterators and Generators
Iterators and Generators
11.1 Nope
Không sử dụng các vòng lặp. Khuyến khích sử dụng các higher-order functions thay vì các vòng lặp như for-in
or for-of
. eslint: no-iterator
no-restricted-syntax
Tại sao ư? Hãy hiểu đây là quy tắc bất di bất dịch. Vì việc hàm thuần túy trả về giá trị luôn dễ hơn so với side effects
Hãy sử dụng
map()
/every()
/filter()
/find()
/findIndex()
/reduce()
/some()
/ … để lặp với array, vàObject.keys()
/Object.values()
/Object.entries()
để tạo ra array và do đó cũng có thể lặp với objects.
const numbers = [1, 2, 3, 4, 5];
// bad
let sum = 0;
for (let num of numbers) {
sum += num;
}
sum === 15;
// good
let sum = 0;
numbers.forEach((num) => {
sum += num;
});
sum === 15;
// best (use the functional force)
const sum = numbers.reduce((total, num) => total + num, 0);
sum === 15;
// bad
const increasedByOne = [];
for (let i = 0; i < numbers.length; i++) {
increasedByOne.push(numbers[i] + 1);
}
// good
const increasedByOne = [];
numbers.forEach((num) => {
increasedByOne.push(num + 1);
});
// best (keeping it functional)
const increasedByOne = numbers.map(num => num + 1);
11.2 Nope
Bây giờ bạn không nên sử dụng generators
.
Tại sao ư? Vì việc chuyển đổi code sang ES5 chưa được hỗ trợ tốt nhất.
11.3 Spacing
Nếu bạn bắt buộc phải sử dụng generators hoặc nếu bạn phớt lờ lời khuyên, thì hãy chắc chắn rằng ký hiệu function có khoảng trắng hợp lý. eslint: generator-star-spacing
Tại sao ư?
function
và*
luôn là từ khóa trong cùng 1 khái niệm -*
không là modifier chofunction
,function*
là 1 cấu trúc duy nhất, khác vớifunction
.
// bad
function * foo() {
// ...
}
// bad
const bar = function * () {
// ...
};
// bad
const baz = function *() {
// ...
};
// bad
const quux = function*() {
// ...
};
// bad
function*foo() {
// ...
}
// bad
function *foo() {
// ...
}
// very bad
function
*
foo() {
// ...
}
// very bad
const wat = function
*
() {
// ...
};
// good
function* foo() {
// ...
}
// good
const foo = function* () {
// ...
};
Tổng hợp Serial Javascript Style Guide