參考書籍:代码整洁之道
// 不推薦的命名
let x = 10;
function f() {
// ...
}
// 推薦的命名
let itemCount = 10;
function calculateTotalPrice(items) {
// ...
}
const MAX_RETRIES = 5;
單一職責原則:每個函數應該只做一件事,並且做好。
// 不推薦:一個函數完成多個任務
function processOrder(order) {
validateOrder(order);
calculateTotal(order);
sendConfirmationEmail(order);
}
// 推薦:每個函數專注於單一任務
function validateOrder(order) {
// ...
}
function calculateTotal(order) {
// ...
}
function sendConfirmationEmail(order) {
// ...
}
避免副作用:函數應該儘量避免修改外部狀態。
// 不推薦:有副作用
function updateItem(item) {
item.price = 100; // 修改外部對象
}
// 推薦:無副作用
function getUpdatedItem(item) {
return { ...item, price: 100 }; // 返回新對象
}
參數數量:函數的參數數量應該盡量少,最好不超過三個。可以使用對象作為參數來組合多個值。
// 不推薦:多個參數
function createUser(name, age, email, password) {
// ...
}
// 推薦:使用對象
function createUser({ name, age, email, password }) {
// ...
}
// 不推薦:深層嵌套
function processOrder(order) {
if (order) {
if (order.items) {
if (order.items.length > 0) {
// 處理訂單
}
}
}
}
// 推薦:早期返回
function processOrder(order) {
if (!order || !order.items || order.items.length === 0) {
return;
}
// 處理訂單
}
使用 try...catch
:合理使用 try...catch
來處理異常,確保代碼健壯性。
try {
// 可能會引發錯誤的代碼
let result = someFunction();
} catch (error) {
console.error('Error occurred:', error);
}
錯誤信息:
function divide(a, b) {
if (b === 0) {
throw new Error('Division by zero is not allowed');
}
return a / b;
}
/**
* 計算訂單的總價格
* @param {Object[]} items - 訂單中的項目
* @returns {number} 總價格
*/
function calculateTotalPrice(items) {
return items.reduce((total, item) => total + item.price, 0);
}