遷移至 Kotlin 程式碼風格
Kotlin 編碼慣例與 IntelliJ IDEA 格式化程式
Kotlin 編碼慣例 影響著編寫慣用 Kotlin 的多個方面,其中一組旨在提高 Kotlin 程式碼可讀性的格式化建議便是其一。
不幸的是,IntelliJ IDEA 內建的程式碼格式化程式在該文件發布之前就已運作許久,現在的預設設定所產生的格式與目前建議的格式不同。
透過切換 IntelliJ IDEA 的預設值並使格式與 Kotlin 編碼慣例保持一致,看似是消除這種模糊性合乎邏輯的下一步。但這意味著所有現有的 Kotlin 專案將在安裝 Kotlin 外掛程式的那一刻啟用新的程式碼風格。這並不是外掛程式更新所預期的結果,對吧?
因此,我們有以下遷移計畫:
- 從 Kotlin 1.3 開始,預設啟用官方程式碼風格格式化,且僅限於新專案(舊格式可以手動啟用)。
- 現有專案的作者可以選擇遷移到 Kotlin 編碼慣例。
- 現有專案的作者可以選擇在專案中明確聲明使用舊的程式碼風格(這樣專案未來就不會受到切換到預設值的影響)。
- 在 Kotlin 1.4 中切換到預設格式並使其與 Kotlin 編碼慣例保持一致。
「Kotlin 編碼慣例」與「IntelliJ IDEA 預設程式碼風格」之間的差異
最顯著的改變在於續行縮排策略。有一個很好的想法是使用雙倍縮排來表示多行表達式尚未在前一行結束。這是一個非常簡單且通用的規則,但當一些 Kotlin 結構以這種方式格式化時,看起來會有點笨拙。在 Kotlin 編碼慣例中,建議在之前曾強制使用長續行縮排的情況下使用單倍縮排。

實際上,相當一部分程式碼受到影響,因此這可以被視為一次主要的程式碼風格更新。
遷移到新程式碼風格的討論
如果新程式碼風格的採用始於一個沒有以舊方式格式化程式碼的新專案,這可能是一個非常自然的過程。因此,從版本 1.3 開始,Kotlin IntelliJ 外掛程式會建立新專案,其格式來自預設啟用的 編碼慣例 文件。
更改現有專案中的格式是一項更具挑戰性的任務,可能應該先與團隊討論所有注意事項。
在現有專案中更改程式碼風格的主要缺點是,blame/annotate VCS 功能將更頻繁地指向不相關的提交。雖然每個 VCS 都有某種方法來處理這個問題(在 IntelliJ IDEA 中可以使用「註解上一版本」),但重要的是要決定新風格是否值得所有這些努力。將重新格式化提交與有意義的變更分開的實踐可以對後續調查有很大幫助。
此外,對於大型團隊來說,遷移可能更困難,因為在多個子系統中提交大量檔案可能會在個人分支中產生合併衝突。儘管每次衝突解決通常都是微不足道的,但明智的做法是了解目前是否有大型功能分支正在開發中。
通常,對於小型專案,我們建議一次性轉換所有檔案。
對於中型和大型專案,這個決定可能很艱難。如果您不準備立即更新許多檔案,您可以決定逐個模組遷移,或者僅針對修改過的檔案繼續進行漸進式遷移。
遷移到新的程式碼風格
可以透過「設定/偏好設定」|「編輯器」|「程式碼風格」|「Kotlin」對話方塊切換到 Kotlin 編碼慣例程式碼風格。將方案切換為「專案」,然後啟用「設定來自...」|「Kotlin 風格指南」。
為了在所有專案開發人員之間共享這些變更,必須將 .idea/codeStyle
資料夾提交到 VCS。
如果使用外部建置系統配置專案,並且決定不共享 .idea/codeStyle
資料夾,則可以使用額外屬性強制執行 Kotlin 編碼慣例:
在 Gradle 中
將 kotlin.code.style=official
屬性新增到專案根目錄的 gradle.properties
檔案中,並將該檔案提交到 VCS。
在 Maven 中
將 kotlin.code.style official
屬性新增到根 pom.xml
專案檔案中。
<properties>
<kotlin.code.style>official</kotlin.code.style>
</properties>
設定 kotlin.code.style 選項可能會在專案匯入期間修改程式碼風格方案,並可能更改程式碼風格設定。
更新程式碼風格設定後,在專案視圖中對所需範圍啟用「重新格式化程式碼」。

對於漸進式遷移,可以啟用「檔案未依專案設定格式化」檢查。它將突顯應重新格式化的位置。啟用「僅套用於修改過的檔案」選項後,檢查將僅顯示修改過的檔案中的格式問題。這些檔案無論如何可能很快就會被提交。
在專案中儲存舊的程式碼風格
始終可以明確將 IntelliJ IDEA 程式碼風格設定為專案的正確程式碼風格:
- 在「設定/偏好設定」|「編輯器」|「程式碼風格」|「Kotlin」中,切換到「專案」方案。
- 開啟「載入/儲存」分頁,並在「使用預設值來自」中選擇「Kotlin 過時 IntelliJ IDEA 程式碼風格」。
為了在專案開發人員之間共享變更,.idea/codeStyle
資料夾必須提交到 VCS。或者,對於使用 Gradle 或 Maven 配置的專案,可以使用 kotlin.code.style=obsolete。