---
# System prepended metadata

title: Clean Code

---

# Clean Code

* Ch1 - 無瑕的程式碼
    1. 重構程式碼不要說待會 *(勒布朗克法則 Law later equals never)*
    2. 每個Function、Class、Module 都要能表達單一的意圖
    3. 真正用心照料過的程式碼，你會找不到可以改良的地方
    4. 撰寫程式是為了解決問題而存在，而不是把問題複雜化
    5. 撰寫程式碼的難易度，取決於周遭程式碼的可讀性高低

* Ch2 - 有意義的命名
    1. 名稱要能代表程式意圖
    2. 使用很好被搜尋的名字
    3. 使用能唸得出來的名稱
    4. 不要用會造成混淆的單字
    5. 取出用get、修改用set

* Ch3 - 函式
    1. 開發有兩項準則，一是簡短；二是比一更簡短
    2. 函式應該只做一件事，並且把這件事給做好
    3. 用高中低層次將每個函式拆到只剩一個抽象概念
    4. 軟體歷年來的創新，都是為了消除重複的程式碼
    5. 寫程式要像說故事一樣，簡單明瞭無冗詞贅字

* Ch4 - 註解
    1. 好的註解提升程式碼的用意，反之則是變更亂
    2. 若某些細節容易被忽略，就可用註解強調重要性
    3. 若程式碼本身就能清楚表達意思就不用寫註解
    4. 被註解掉的程式碼是最可怕的，會讓人不敢動它
    5. 條列式註解是很容易弄亂模組且枯燥乏味的

* Ch5 - 編排
    1. 程式碼的編排要井然有序，並且要保持一致
    2. 要像報紙一樣利用空行將不同區塊給區分開來
    3. 關係緊密的程式碼要盡可能的離彼此相近一點
    4. 檔案 > 類別 > 方法 > 主程式 > 子程式
    5. 一行程式碼的寬度應以不滾動捲軸往右為基準

* Ch6 - 物件及資料結構
* Ch7 - 錯誤處理
    1. 將商業邏輯與錯誤處理的區塊給切割開來
    2. 將第三方庫與自定義錯誤給包裹(wrap)起來
    3. 發生錯誤時應提供詳細資訊(who、how...)
    4. 不要回傳Null，因為會添加判斷Null的負擔
    5. 也不要傳遞Null，除非該函式已做相關處理

* Ch8 - 邊界
    1. 別在系統傳遞第三方API，否則一變動就會大量修改
    2. 同上，也能封裝第三方API，寫進自訂的API方便控管
    3. 用學習式測試來熟悉第三方API，一邊測試一邊開發
    4. 可以用ADAPTER來作為已知與未知的API之間的橋樑
    5. 同上，之後只需修改ADAPTER，達到隔離邊界的效果

* Ch9 - 單元測試
    1. 撰寫單元測試，可以增加對系統的信心，也不怕會改壞
    2. TDD(測試驅動開發)，先寫完測試後再進行功能開發
    3. 測試也需整潔，同時要有可讀性與清楚表達意圖
    4. 建立假資料 > 對假資料進行操作 > 驗證回傳結果
    5. 一個測試一個概念，每個測試都只有一種存在的理由
    6. F.I.R.S.T 快速:執行得快、獨立:不該互相依賴
    7. 複用:不受環境限制、驗證:呈現結果、及時:TDD

* Ch10 - 類別
    1. 單一職責 (Single Responsibility)
    2. 開放封閉 (Open Close)
    3. 里氏替換 (Liskov Substitution)
    4. 介面隔離 (Interface Segregation)
    5. 依賴反轉 (Dependency Inversion)

* Ch11 -









信長的野望重製小隊- ２０２０新年快樂✧*｡٩(ˊᗜˋ*)و✧*｡ 在這新的一年我們會繼續努力...
【基本資訊】
職務：遊戲產品工程師
公司：響雨互動娛樂有限公司
工作地點：遠端
薪資條件：55,000
回覆相關：面試後7日內無論錄取與否都會進行通知。
 
【工作內容】
第一階段
1. 維護Dota2信長運行、串接Rank配對系統、Skin系統等等
2. 維護資料站官網
 
第二階段
1. 開發信長相關的新遊戲（使用unreal engine）
2. 以循序漸進的方式開發信長相關的遊戲。
 
公司產品相關影片連結：
https://www.youtube.com/watch?v=163AueG-OI8
 
【必要技能】
無
 
【加分條件】
*熟悉Dota2地圖製作
*熟悉JS、TS、Angular等網頁開發相關技能
*熟悉Steam、Android、IOS等各式平台上架流程
*熟悉C++、Unreal Engine專案開發 
*熟悉Rust、Actix專案開發 
*熟悉Lua、OpenResty, Lapis專案開發 
*熟悉Linux系統
*熟悉Mysql資料庫
 