不是每個人都能成為明星,但是所有人都可以努力做到能力範圍的最好,並持續提高 - Henk Vermeyden
接下來幾天,我會把這個專案開發前所需具備的基礎知識分幾個主題向各位分享,希望這些文章能給初學者正確的觀念、也能讓老手思考自己開發上是否有忽略的細節
我直到近一年才真正意識到好的程式碼在團隊合作中有多麼重要
在團隊裡面你不只是要完成自己負責的功能,你更要讓其他同事能在短時間理解你的程式
就算你是一個人獨立完成專案,好的程式碼能讓你在日後維護上節省更多的時間及精力
希望未來我們回頭看一年前寫的專案時,不求內心的小精靈呼喊:"X,寫得太精采了!",只希望內心的小精靈不要滿嘴髒話就好
對我來說高效能演算法與複雜的語法並不是我所追求的東西(其實是因為筆者資質駑鈍看不懂)
所以今天的目標就是如何寫出讓笨笨的筆者都能看懂的程式XD,這在程式界有個專有名詞叫做 Clean Code(無暇程式碼)
我將裡面幾個重要的點列在下方,並用我實際的經驗作解釋
用對的方式宣告變數才會讓人了解到他的意義
function test() {
// 宣告時給一個初始值
var baby = "寶寶本尊"
// 再次宣告
var baby = "寶寶被污染了"
console.log(baby) // 會印出'寶寶被污染了'
}
let 與 const 皆不可重複宣告會報錯
function test() {
// 宣告時給一個初始值
let baby = "寶寶本尊"
// 重新指定值
baby = "寶寶變身"
console.log(baby) // 會印出'寶寶變身'
// 再次宣告
let baby = "寶寶壞掉了"
// 會跳出錯誤 SyntaxError: Identifier 'baby' has already been declared
}
function test() {
// 宣告時給一個初始值
const baby = "寶寶不可改變"
// 重新指定值
baby = "寶寶變身失敗"
// 會跳出錯誤 TypeError: Assignment to constant variable.
}
function test () {
// 宣告為物件
const baby = { name: "寶寶本尊" }
// 重新指定值
baby.name = "寶寶變身"
console.log(baby) // 會印出'{ name: '寶寶變身' }'
}
這裡要看你工作環境的默契去做調整,但還是有幾個基礎要求
函式(function)的命名
// 不好的命名,你無法從名字理解他要做的事情
function abc(a, b) {
return a + b
}
// 好的命名,淺顯易懂
function sum(a, b) {
return a + b
}
// 不好的命名,一個函式做太多事情了
function goBackpageWriteContent() {...}
// 好的命名,一個函式昨一件事,上面的function可以做拆分
function goBackpage() {...}
function writeContent() {...}
變數(variable)的命名能直接知道他代表甚麼
// 不好的命名,你看到會覺得疑惑
let haha = '猜猜看這個變數代表甚麼'
// 好的命名,非常直觀無須猜想
let name = '好想兔'
在快速開發時期複製貼上是最爽的事情,但你在未來會付出沉重的代價
如下
解決方案
我周圍曾經遇過程式能力極強,但是幾乎無法與人合作的工程師,他們所寫的程式有幾個特點
也遇過只求完成功能得過且過的工程師,他們也有幾個特點
遇到前者是你的幸運也是你的不幸,雖然你可以與神同行,但是要不斷的提升自己才能夠勉強跟上他們的思路;遇到後者就當成鍛鍊,你要嘗試將這些不明所以的程式碼重構,讓他足以被大眾理解
而我寫程式的目標是希望在交接的時候被人輕易理解,所以在撰寫的過程中會不斷反思這些程式碼寫在這裡的意義是甚麼,如果自己都無法解釋的程式,就不用期待他人能夠理解了
雖然有神人說過:最好的註解就是程式碼本身
但我想絕大多數的人都難以到達這個境界,所以要乖乖地寫註解
寫的再好的程式都會有漏洞,而完善的錯誤處理 & 明確的日誌紀錄可以協助你更快速的除錯(debug)
以上是我對 Clean Code 的個人感想,如果大家對於文章的內容有任何想法歡迎討論~
我在 Medium 平台 也分享了許多技術文章
❝ 主題涵蓋「MIS & DEVOPS、資料庫、前端、後端、MICROSFT 365、GOOGLE 雲端應用、個人研究」希望可以幫助遇到相同問題、想自我成長的人。❞
在許多人的幫助下,本系列文章已出版成書,並添加了新的篇章與細節補充:
- 加入更多實務經驗,用完整的開發流程讓讀者了解專案每個階段要注意的事項
- 將爬蟲的步驟與技巧做更詳細的說明,讓讀者可以輕鬆入門
- 調整專案架構
- 優化爬蟲程式,以更廣的視角來擷取網頁資訊
- 增加資料驗證、錯誤通知等功能,讓爬蟲執行遇到問題時可以第一時間通知使用者
- 排程部分改用 node-schedule & pm2 的組合,讓讀者可以輕鬆管理專案程序並獲得更精確的 log 資訊
有興趣的朋友可以到天瓏書局選購,感謝大家的支持。
購書連結:https://www.tenlong.com.tw/products/9789864348008