以上這是在書上的定義
那為了實現Clean Code 我們到底該要做的是什麼呢?
這邊我會分成6個部分
在開始之前先補充一下常見的命名法
假如今天我們要來找目標顏色是否在顏色陣列中
//Bad
const tc = "red";
const fc = false;
const ls = ["yellow","red","green"];
//Better
const targetColor = "red";
const findColor = false;
const colors = ["yellow","red","green"];
以顏色陣列為例的話
//Bad
const colorList = ["yellow","red","green"];
//Better
const colors = ["yellow","red","green"];
const colorsArray = ["yellow","red","green"];
const colorGroup = ["yellow","red","green"];
因為List這個單字有可能對應到 Linked-List,你用colors、colorArray、colorGroup都比你用colorList好一點
取名稱還是讓他可以被唸出來比較好一點拉,除非是大家都知道的縮寫
//Bad
const mu_biao = "red"; //別用拼音!!!
const tatc = "red" //縮寫還是大家看的懂比較好拉
const 🫵 = "red" //你嗑了什麼!?
function targetColorFind(){ //按照文法的話念起來比較不順,較不容易記憶
//...
}
//Better
const targetColor = "red";
function findTargetColor(){
//...
}
今天如果是要去修改檢查 email 的 function 好了,通常我們找程式為搜尋的關鍵字不外乎是 :
email 、check、validate 之類的 ,那如果你的function剛好長得像
const userFirstInputComparison = () => {
//...
}
恩….那我可能找不到你的function
方法的命名方式也盡量統一,物件內的話就避免重複物件的名稱
//如果這些是專門user相關資料的function
const getUserName = () => {
//...
}
const getUserEmail = () => {
//...
}
const fetchUserGender = () => {
//...
}
const fetchUserHeight = () => {
//...
}
假如你看到這個程式碼,應該會有個疑問,get 跟 fetch 不是差不多的意思嗎? 怎麼會同時出現,雖然他們的命名沒什麼問題,但可以的話專案請統一動作的名稱
直接看範例應該就很清楚了,不用重複物件本身的名字了
// Bad
const book = {
bookTitle: "Clean Code",
bookId: 12345,
bookAuthor: "author",
bookISBN: "123-456-789",
};
// Better
const book = {
title: "Clean Code",
id: 12345,
author: "author",
isbn: "123-456-789",
};
這是我們用 create-react-app 建立的react app
my-app/
README.md
node_modules/
package.json
public/
index.html
favicon.ico
src/
App.css
App.js
App.test.js
index.css
index.js
logo.svg
我們可以從範例來看,他在每個檔案的命名都可以讓你知道他是做什麼的,那往下個例子,如果今天專案複雜一點的話呢 (這邊檔案結構大家習慣會不同,還請不要介意)
my-app/
README.md
node_modules/
package.json
public/
index.html
favicon.ico
assets/
2023_06_04.png
IMG_8787.png
components/
first-element/
index.js
second-element/
index.js
pages/
first-page/
index.js
second-page/
index.js
src/
App.css
App.js
App.test.js
index.css
index.js
logo.svg
當然上述例子應該很難在專案中看到,但如果你剛拿到這個專案的話,一定不知道components裡面的那些東西是幹嘛用的,那如果我們將 File structure 簡單的改成下方這樣呢?
my-app/
README.md
node_modules/
package.json
public/
index.html
favicon.ico
assets/
homepage.png
introduction.png
components/
navbar/
index.js
article/
index.js
pages/
homepage/
index.js
introduction/
index.js
src/
App.css
App.js
App.test.js
index.css
index.js
logo.svg
是不是就清晰很多,至少可以知道那個檔案裡面的東西是什麼,所以在命名資料夾或是檔案名稱的時候,盡量不要使用沒有意義的命名。
其實命名上面還是有很多眉眉角角的,這篇介紹只是冰山中的一角,如果大家有興趣更深入的話,歡迎去閱讀
無瑕的程式碼-敏捷軟體開發技巧守則 (Clean Code: A Handbook of Agile Software Craftsmanship)