[程式碼異味 #5] 散彈式修改 vs 發散式變更
散彈式修改是指一項變更分散在多個檔案中的異味,而發散式變更則是其鏡像:同一檔案因多種原因而變更。本文整理如何透過提交紀錄實測並區分這兩種處方完全相反的異味。
閱讀文章SEARCH THE GROUND
同時搜尋標題、說明、分類與標籤。
顯示最新 15 篇文章。
散彈式修改是指一項變更分散在多個檔案中的異味,而發散式變更則是其鏡像:同一檔案因多種原因而變更。本文整理如何透過提交紀錄實測並區分這兩種處方完全相反的異味。
閱讀文章上帝物件是不斷吸收周邊責任與資料而膨脹的類別,也是團隊中最常修改、最常衝突的檔案。本文整理辨識膨脹的訊號、拆解順序,以及拆分失敗的兩種方式。
閱讀文章2019 年 Swift 5 與 iOS 12.2 發布後,App 容量縮小是 ABI 穩定性帶來的結果。本文整理 Swift 執行階段從每個 App 搭載移至 OS 的過程,以及模組穩定性與 @frozen 的取捨。
閱讀文章函式全都只有五行、各自也只有一項職責,卻沒人能回答按下按鈕後會發生什麼事,這就是 Ravioli 程式碼。本文整理過度拆分的原因、跳轉次數所反映的成本,以及找回流程的方法。
閱讀文章同步與非同步關注由誰處理工作完成,阻塞與非阻塞則關注是否立即交還控制權。由於兩個軸彼此獨立,因此 2×2 的四種組合都存在;本文搭配 Swift 範例說明原因。
閱讀文章檔案控制代碼或鎖這類只有唯一一份才有意義的資源,不應該被複製。本篇整理如何用 Swift 5.9 的 ~Copyable 將禁止複製刻進型別,以及 borrowing、consuming、inout 三種傳遞方式與適用時機。
閱讀文章Swift 5.9 的巨集是嵌入編譯器的程式碼產生外掛。本篇整理接收語法樹並回傳程式碼的原理、freestanding(#) 與 attached(@) 兩大類,以及自行建立時必須付出的成本。
閱讀文章struct 大小不是屬性大小的單純總和。本篇整理 size、stride、alignment、填充、利用 extra inhabitant 的 Optional,以及 64 位元 existential container 的實測結果。
閱讀文章即使整齊地分層,新增一個欄位仍需修改七個檔案的程式碼,就是千層麵程式碼。本文整理層數增加的原因、成本產生的位置,以及何時需要保留或移除分層。
閱讀文章Claude Code 權限透過 allow、ask、deny 規則運作,並依 deny 優先的順序評估。本文整理 /permissions 用法、Bash 萬用字元語法、Shift+Tab 模式循環,以及設定檔優先順序。
閱讀文章方法呼叫會編譯為直接呼叫、vtable 或 objc_msgSend。本文整理 final 與 private 提升效能的機制、協定 extension 的陷阱,以及如何透過分析工具驗證。
閱讀文章KVO 在加入觀察者的瞬間,執行階段會將物件的類別動態替換成子類別。本文整理 isa-swizzling 的運作方式、class 為何會說謊,以及不經過 setter 就不會收到通知的條件。
閱讀文章Claude Code 計畫模式(plan mode)會在修改程式碼前先要求核准計畫。本篇整理 Shift+Tab・/plan 的啟用方式、3 種核准選項、用 Ctrl+G 編輯計畫,以及預設值設定。
閱讀文章測試計畫以 .xctestplan 檔案管理要執行的測試與條件,並整理僅靠 Scheme 設定不足的原因、目標選擇、組態拆分、涵蓋率、執行順序、重複設定及 xcodebuild 整合。
閱讀文章結構化並行處理回答了誰要負責非同步工作的結束。本文整理子工作無法離開父層範圍的原理、取消訊號的傳播方式,以及使用 Task.detached 時必須手動補回的保證。
閱讀文章