如果你在一個凌亂的房間裡,你就找不到鑰匙。衣服到處都是,書籍堆積如山。
這適用於混亂的程式碼。這是同樣的災難,只不過現在是你的大腦正在失去能量。
另一方面,乾淨的程式碼就像走進一個一塵不染的房間。一切都在它應該在的地方。沒有壓力。沒有混亂。只是清晰度。
事實是:如果你想在軟體開發中生存,編寫乾淨的程式碼不是可選的。人工智慧已經可以寫比你更乾淨的程式碼。
你可以寫出凌亂的程式碼,努力修復每個錯誤,在面試中被拒絕,無法建立一個可管理的新創公司,或者你可以掌握乾淨的程式碼並主宰你接觸的每個專案。
下面的圖表顯示了兩種類型的程式設計師的旅程:
⚠️ 糟糕的程式設計師(紅線):啟動快但崩潰嚴重。他們寫的行越多,製造的麻煩就越多。
⚡ 乾淨的程式碼(藍線):開始緩慢但保持一致。成長不會停止-而是加速。
現在,您決定要遵循哪條路線。
為了示範此圖表,在初始開發階段,更改不良程式碼的成本比更改乾淨程式碼的成本稍高。
然而,當我們進入維護和重構階段時,差距顯著擴大,不良程式碼的成本幾乎是乾淨程式碼的兩倍。
到了遺留階段,不良程式碼的成本達到 100% ,現在更新成本極為昂貴,而乾淨的程式碼仍然更容易管理,成本為 45%。
毫無疑問,糟糕的程式碼是軟體開發中一個代價高昂的問題。
將變數或函數命名為b或x是犯罪行為。就叫他們什麼吧。
// Weak and vague
let b = 5;
// Strong and clear
let numberOfUsers = 5;
寫不清楚名字的人不想承認自己的錯誤。不要成為那個人。
函數應該要做一件事——而且做得完美。這稱為單一職責原則( SRP )。
好的程式碼就像一把錘子。它擊中了一個釘子,而不是十個。
// Clean: One job, one focus
function calculateTotal(a, b) {
return a + b;
}
function logTotal(user, total) {
console.log(`User: ${user}, Total: ${total}`);
}
// Dirty: Trying to do EVERYTHING
function calculateAndLogTotal(a, b, user) {
let total = a + b;
console.log(`User: ${user}, Total: ${total}`);
}
當你混合任務時,你就將混亂與災難混為一談。
每次有人走進房間時,您都不會解釋門的作用。您的程式碼應該以同樣的方式運作。
// Clean: Self-explanatory
let userAge = 25;
// Messy: Needs an explanation
let a; // This means "age of the user"
評論還不錯,但如果你的程式碼不能獨立存在,那麼你就已經失敗了。
如果有人讀你的程式碼感覺像是在解謎,那麼你就已經成為一個麻煩製造者了。
// Clean: Reads like a story
if (isLoggedIn) {
console.log("Welcome!");
} else {
console.log("Please log in.");
}
// Messy: Feels like chaos
if(isLoggedIn){console.log("Welcome!");}else{console.log("Please log in.");}
可讀的程式碼不僅適合其他人,也適合六個月後的您。
如果您懶得編寫測試,請不要在程式碼損壞時抱怨。
class Calculator {
add(a, b) { return a + b; }
subtract(a, b) { return a - b; }
}
// Test it (Unit Test)
const calculator = new Calculator();
console.assert(calculator.add(2, 3) === 5, "Addition failed");
console.assert(calculator.subtract(5, 3) === 2, "Subtraction failed");
測試是你的保險。忽視它們,你就是在拿自己的時間做賭注。
依賴性就像交易。找到正確的,你就贏了。如果選擇不當,你就會陷入讓自己後悔的境地。
// Dependency: Sending emails with Nodemailer
const nodemailer = require('nodemailer');
function sendEmail(to, subject, message) {
const transporter = nodemailer.createTransport({ /* config */ });
return transporter.sendMail({ from: "[email protected]", to, subject, text: message });
}
避免硬編碼依賴。使用抽像或設定檔進行安全維護。
這只是一個例子。作為開發人員,您可能會使用數百個程式庫或依賴項。
我並不是說你不應該依賴它們,現在很難避免它們。但在將它們安裝到編碼專案中之前,您應該非常小心。
您應該檢查組織軟體系統的安全性、效能、品質或功能。因為它們有時包含可能毀掉您整個專案的風險。
始終控制您的工具,不要讓它們控制您。
一個組織良好的專案是舊貨拍賣和*高端精品店的*區別。
以下是每個資料夾的組織方式:
如果你的程式碼庫看起來像一個垃圾抽屜,那麼你已經失去了未來的自己的尊重。
電子郵件應用程式的簡潔專案結構:
假設您正在建立一個向使用者發送電子郵件的應用程式。您乾淨的專案結構應該如下所示:
不要像一個擁有 10 種性格的人那樣寫程式碼。與您的格式保持一致。
使用Prettier或ESLint等工具來強制執行一致的風格。如果每個文件看起來都不同,那麼您就會造成無人願意修復的混亂。
我想說,格式的一致性是乾淨編碼最重要的方面之一。
看看...
在整個程式碼庫中一致使用2 或 4 個空格進行縮排。避免使用選項卡以保持不同編輯器之間的一致性。
保持行最多 100-120 個字符,以防止水平滾動並提高可讀性。
將相關邏輯組合**在一起,並用空白行分隔程式碼區塊*以突出*其用途。
最後,避免程式碼過度對齊;相反,讓縮排自然引導邏輯流程。
硬編碼是偽裝成努力的懶惰。
// Bad: Hardcoded and rigid
function createUser() {
const maxUsers = 100;
if (currentUsers >= maxUsers) throw "Too many users!";
}
// Clean: Dynamic and flexible
const MAX_USERS = 100;
function createUser() {
if (currentUsers >= MAX_USERS) throw "Too many users!";
}
所以,不惜一切代價避免它。硬編碼是讓你墜入懸崖的捷徑。
如果你的函數超過 20 行,它可能試圖做太多事情。分解它。
function updateCart(cart, item) {
addItemToCart(cart, item);
let total = calculateTotal(cart);
logTransaction(item, total);
return total;
}
function addItemToCart(cart, item) {
cart.items.push(item);
}
短函數是銳函數。他們每次都達到了目標。
🎄🎁新年禮物!
您剛剛在本文中讀到的內容只不過是我的書《從零到一的乾淨程式碼》中的一小部分。
這10條規則?它們只是表面。
因為現在是新年,所以我會讓這對你來說變得容易。使用促銷程式碼HAPPYNEWYEAR可享20% 的折扣。
但不要等太久——此優惠將於2025 年 1 月 14 日結束。
或繼續與你混亂的程式碼作鬥爭。選擇權在你。
閱讀更多: 在 React 中編寫乾淨、可重複使用的元件
原文出處:https://dev.to/codewithshahan/how-to-write-clean-code-tips-for-developers-with-examples-25ic