5 Tips to Write Better Conditionals in JavaScript
1. Use Array.includes for Multiple Criteria // condition function test ( fruit ) { if ( fruit == 'apple' || fruit == 'strawberry' ) { console . log ( 'red' ) ; } } Điều gì sẽ xảy ra nếu có nhiều trái cây màu đỏ hơn, chúng ta sẽ phải so ...
1. Use Array.includes for Multiple Criteria
// condition function test(fruit) { if (fruit == 'apple' || fruit == 'strawberry') { console.log('red'); } }
Điều gì sẽ xảy ra nếu có nhiều trái cây màu đỏ hơn, chúng ta sẽ phải so sánh so sánh rất nhiều mà không phải với 2 loại nữa. Hãy viết tối ưu như bên dưới:
function test(fruit) { // extract conditions to array const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries']; if (redFruits.includes(fruit)) { console.log('red'); } }
2. Less Nesting, Return Early
function test(fruit, quantity) { const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries']; // condition 1: fruit must has value if (fruit) { // condition 2: must be red if (redFruits.includes(fruit)) { console.log('red'); // condition 3: must be big quantity if (quantity > 10) { console.log('big quantity'); } } } else { throw new Error('No fruit!'); } } // test results test(null); // error: No fruits test('apple'); // print: red test('apple', 20); // print: red, big quantity
Hãy return sớm nếu điều kiện không hợp lệ:
/_ return early when invalid conditions found _/ function test(fruit, quantity) { const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries']; // condition 1: throw error early if (!fruit) throw new Error('No fruit!'); // condition 2: must be red if (redFruits.includes(fruit)) { console.log('red'); // condition 3: must be big quantity if (quantity > 10) { console.log('big quantity'); } } }
Bằng cách này, chúng ta có thể giảm thiểu câu lệnh lồng nhau. Kiểu viết này đặc biệt tối ưu, dễ nhìn, dễ hiểu khi bạn có câu lệnh if dài (hãy tưởng tượng bạn cần cuộn xuống phía dưới cùng để biết có một câu lệnh khác hay không).
Và chúng ta có thể giảm hơn nữa các câu lện lồng bằng cách đảo ngược các điều kiện và return sớm. Nhìn vào điều kiện 2 dưới đây để xem nhé:
/_ return early when invalid conditions found _/ function test(fruit, quantity) { const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries']; if (!fruit) throw new Error('No fruit!'); // condition 1: throw error early if (!redFruits.includes(fruit)) return; // condition 2: stop when fruit is not red console.log('red'); // condition 3: must be big quantity if (quantity > 10) { console.log('big quantity'); } }
3. Use Default Function Parameters and Destructuring
function test(fruit, quantity) { if (!fruit) return; const q = quantity || 1; // if quantity not provided, default to 1 console.log(`We have ${q} ${fruit}!`); } //test results test('banana'); // We have 1 banana! test('apple', 2); // We have 2 apple!
Thực tế chúng ta có thể loại bỏ biến q bằng việc sử dụng các tham số mặc định:
function test(fruit, quantity = 1) { // if quantity not provided, default to one if (!fruit) return; console.log(`We have ${quantity} ${fruit}!`); } //test results test('banana'); // We have 1 banana! test('apple', 2); // We have 2 apple!
Nếu tham số đầu vào là object:
function test(fruit) { // printing fruit name if value provided if (fruit && fruit.name) { console.log (fruit.name); } else { console.log('unknown'); } } //test results test(undefined); // unknown test({ }); // unknown test({ name: 'apple', color: 'red' }); // apple
Viết lại như sau:
// destructing - get name property only // assign default empty object {} function test({name} = {}) { console.log (name || 'unknown'); } //test results test(undefined); // unknown test({ }); // unknown test({ name: 'apple', color: 'red' }); // apple
4. Object Literal than Switch Statement
function test(color) { // use switch case to find fruits in color switch (color) { case 'red': return ['apple', 'strawberry']; case 'yellow': return ['banana', 'pineapple']; case 'purple': return ['grape', 'plum']; default: return []; } } //test results test(null); // [] test('yellow'); // ['banana', 'pineapple']
Viết lại như này nè:
// use object literal to find fruits in color const fruitColor = { red: ['apple', 'strawberry'], yellow: ['banana', 'pineapple'], purple: ['grape', 'plum'] }; function test(color) { return fruitColor[color] || []; }
5. Use Array.every & Array.some for All / Partial Criteria
const fruits = [ { name: 'apple', color: 'red' }, { name: 'banana', color: 'yellow' }, { name: 'grape', color: 'purple' } ]; function test() { let isAllRed = true; // condition: all fruits must be red for (let f of fruits) { if (!isAllRed) break; isAllRed = (f.color == 'red'); } console.log(isAllRed); // false }
Chúng ta có thể giảm thiểu số lượng dòng code mà vẫn sễ hiểu như sau:
Array.every
const fruits = [ { name: 'apple', color: 'red' }, { name: 'banana', color: 'yellow' }, { name: 'grape', color: 'purple' } ]; function test() { // condition: short way, all fruits must be red const isAllRed = fruits.every(f => f.color == 'red'); console.log(isAllRed); // false }
Array.some
const fruits = [ { name: 'apple', color: 'red' }, { name: 'banana', color: 'yellow' }, { name: 'grape', color: 'purple' } ]; function test() { // condition: if any fruit is red const isAnyRed = fruits.some(f => f.color == 'red'); console.log(isAnyRed); // true }
Cảm ơn các bạn đã đọc bài!!! Hy vọng bài viết hữu dụng