Daily Digest

每日新聞摘要

2026年03月21日

今日總結

內容會跟隨語言切換。

📝 今日焦點:涵蓋 Mohini Kavach 的宣稱影響、Jetpack Compose 的修飾子與點擊處理、精簡的導覽抽屜實作、導覽升級指引與 DSL 範式建議,並提醒真偽檢核。 🔧 架構設計:介紹 Aalekh Gradle 外掛的互動依賴圖、歷史指標與 CI 檢查,說明其設計動機與分層可測試性,並說明 RustSensei 手機端離線 SLM 的部署取捨。 ✅ 測試與品質:主張將模擬器定位為受控測試平台,注意 SimpleDateFormat 的執行緒與時區風險,並警示 Kotlin 源碼修改可能引發的 JVM ABI 斷裂問題。 🚀 語言演進:提醒 sealed 與 enum 的取捨、擴充函式與預設參數對 ABI 的影響,建議介面或封裝並生成 .api 以維護相容性。

01

Mohini Kavach for Love, Charm & Influence

Dev.to Kotlin 作者:Sanjana Rathour 發布:03-21 09:37

Mohini Kavach:增進愛情、魅力與影響力的神聖護符

源自摩希妮女神的護符,可增強吸引力、改善關係、提高魅力並防護負能量。

重點摘要

提升吸引力與情感連結,助長愛情與婚配機會
增強個人魅力、自信與表達力,利於社交與職場影響力
提供靈性防護,抵擋情緒操控、妒忌與負面能量

文章介紹Mohini Kavach(摩希妮護甲)──以摩希妮女神為本的加持護符,據稱可提升吸引力、增強魅力與自信、改善情感連結並抵禦負能量。正確加持且佩戴(建議純銀、沐浴祈禱後、週五佩戴、靠近心口)能放大其靈性能量;對尋求愛情、婚配、社交影響力或情緒平衡者特別有幫助。護符同時有助於提升口才、肢體語言與第一印象,對行銷、演講與談判等職業有利。文章強調選擇經誦咒加持的真品以確保安全與長效,且效果會因個人信念與業力而異。

02

The Easiest & Cleanest Android Navigation Drawer Ever (Architecture-Proof!)

Medium Kotlin 作者:RAFA 發布:03-21 09:14

最簡單且最乾淨的 Android Navigation Drawer(與架構無關!)

如果你曾在 Android 裡實作過 Navigation Drawer,會發現它很快就會變得混亂──大量樣板碼、重複的狀態處理,等等…

重點摘要

Navigation Drawer 的實作容易變得雜亂
常見問題為大量樣板程式與重複的狀態處理
文章提出簡單、乾淨且與架構無關的解法

這篇由 RAFA 發表於 Stackademic 的文章,提出一種簡單且與架構無關的 Android Navigation Drawer 實作方式。作者指出傳統的抽屜介面實作容易產生大量樣板碼與重複的狀態處理,導致程式碼混亂;文中主張透過分離關注(separation of concerns)與可重用元件來降低複雜度,使同一方案能適用於 MVVM、MVI 或傳統架構。文章說明了設計動機、常見陷阱,並強調精簡抽屜設定與狀態管理以維持程式碼的簡潔性與可維護性,幫助開發者以更清晰、可重複使用的方式實作導航抽屜。

03

Android Emulator Is Not Just a Device — It’s a Controlled Testing Environment

Medium Kotlin 作者:Nolifek 發布:03-21 10:24

Android 模擬器不只是裝置——它是一個受控的測試環境

大多數 Android 開發者把模擬器當作實體手機的替代品。

重點摘要

多數開發者將模擬器視為實機替代
模擬器應被視為受控的測試環境
調整測試策略以發揮模擬器優勢

文章指出,多數 Android 開發者把模擬器當作實體手機的替代品,但作者主張應以不同角度看待模擬器:它更像是一個受控的測試環境,而非完全等同於實機。藉由將模擬器用於可重現、可控制的測試情境,開發團隊可以有效進行自動化和可觀察的測試,同時在需要真實行為驗證時補以實機檢查。文章呼籲調整開發與測試流程,從「替代品」轉為「受控測試平台」,以設計更完整且能降低僅在實機才會出現問題的測試策略。

04

Day 4 — Modifiers, Click Handling, and Building Reusable UI in Jetpack Compose

Medium Kotlin 作者:Yodgorbek Komilov 發布:03-21 10:28

第 4 天 — 在 Jetpack Compose 中的 Modifiers、點擊處理與可重用介面構建

在學會 Column、Row 與 Box 等佈局後,本篇探討 modifiers、點擊事件處理,以及如何構建可重用的 Composable UI。

重點摘要

說明 modifiers 用途與常見操作
說明如何處理點擊與互動事件
介紹建立可重用 Composable 的設計方式

本篇為 Jetpack Compose 系列教學的延續,承接第 3 天對 Column、Row 與 Box 等佈局元件的介紹,重點放在三個實作面向:modifiers(用於調整 Composable 的外觀、排版與行為)、點擊處理(為元件綁定互動事件並回應使用者輸入),以及如何設計與組合可重用的 UI 元件。文章旨在將基礎佈局知識延伸到更具互動性且易於維護的界面設計,說明 modifiers 與事件處理如何與 Composable 函式整合,並示範促進元件重用與乾淨架構的做法。

05

SimpleDateFormat: You Never Know What Time You’ll Get

Medium Kotlin 作者:Yeoncheol Jang 發布:03-21 11:18

SimpleDateFormat:你永遠不知道會得到什麼時間

SimpleDateFormat 的行為在實際使用中可能會出現不可預期的結果。

重點摘要

作者 Yeoncheol Jang,文章刊於 Medium
提供內容僅含「Introduction」標題與「Continue reading on Medium」連結
主題聚焦於 SimpleDateFormat 的不可預期行為與相關陷阱

本文原標題為「SimpleDateFormat:你永遠不知道會得到什麼時間」,作者為 Yeoncheol Jang,來源為 Medium。提供的內容僅包含「Introduction」標題與「Continue reading on Medium」連結,未包含文章主體。因此本摘要只能以標題推測主旨:文章應聚焦於 Java 的 SimpleDateFormat 在實務上可能出現的不可預期行為與陷阱。常見相關議題包括執行緒安全、時區與區域設定對格式化與解析的影響等,但原文完整論述與範例須透過連結閱讀。

06

Navigation 2’den Navigation 3’e Geçiş Rehberi (Compose)

Medium Kotlin 作者:muhammet emin kaçan 發布:03-21 11:42

從 Navigation 2 過渡到 Navigation 3 的指南(Compose)

Jetpack Compose 已大幅改變 Android 的 UI 開發,本文引導在 Compose 專案中從 Navigation 2 遷移到 Navigation 3。

重點摘要

Jetpack Compose 改變了 Android 的 UI 開發方式
針對從 Navigation 2 遷移到 Navigation 3 的實務指南
說明升級背景並引導讀者至原文取得詳細實作範例

本文由 Muhammet Emin Kaçan 撰寫,作為在 Jetpack Compose 專案中從 Navigation 2 過渡到 Navigation 3 的導覽升級說明。文章指出 Jetpack Compose 已大幅改變 Android 的 UI 開發方式,因此現有的 navigation 模式需要相應調整。本文在導讀中說明升級的背景與重要性,提供高層次的遷移方向與考量,並引導讀者到原文 Medium 文章以取得詳細程式範例與實作說明。對於計畫將 Compose 應用之導覽層升級的開發者,本文提供了進一步閱讀與實作的上下文與導向。

07

Kotlin API Design

Dev.to Kotlin 作者:Krun_pro 發布:03-20 22:38

Kotlin API 的可演化設計

Kotlin 原始碼與 JVM 位元組碼之間的落差,正是公開契約悄然崩壞的所在。

重點摘要

預設參數會產生帶位元遮罩的 $default 複載,新增參數會改變 JVM 簽名並破壞二進位相容性
擴充函式於編譯時以宣告型別解析,會被真實成員遮蔽且跨模組衝突默默決定
sealed 類別封閉消費端階層,新增子類會使下游 exhaustive when 編譯失敗

Kotlin 的源碼變更常隱藏 JVM 層面的 ABI 變化,會在未重新編譯的下游模組產生執行或編譯錯誤。預設參數會生成帶位元遮罩的合成 $default 複載,新增選用參數會改變 JVM 簽名並可能導致 NoSuchMethodError。擴充函式在編譯時按宣告型別解析、易被真實成員遮蔽且跨模組衝突無警告,因此不宜在公開 API 承載重要商業邏輯。sealed 類別會將消費者鎖定在封閉階層,新增子類會令下游的 exhaustive when 失效。其他由編譯器產生的成員(例如 val→var 的 setter、componentN 排序、inline 展開、companion 存取器、copy()、預設參數工廠)也會無形改變 ABI。建議以介面或包裝公開、避免直接暴露 sealed 階層,並導入 kotlinx-binary-compatibility-validator 生成 .api 以揭露 ABI 變更。

08

I Got Tired of Reverse-Engineering My Own Architecture. So I Built a Tool to See It.

Dev.to Kotlin 作者:Shiva Thapa 發布:03-21 06:40

我厭倦反向工程自己的架構,於是做了一個能看見它的工具

真正的多模組專案架構藏在 Gradle 的相依圖中,而不是過期的圖表、文件或規格裡。

重點摘要

以單一自含 HTML 報告互動式呈現模組相依圖
正確辨別主程式與僅測試相依的循環,避免誤報
CI 檢查、每模組指標與即將推出的 Kotlin DSL 層級規則

Aalekh 是一款為 Gradle 多模組專案打造的外掛,解決隨專案成長而在 Gradle 相依圖中悄悄累積的架構債。作者比較了現有工具發現的缺口:有的只找未使用相依,有的產生靜態圖或需大量 Java 測試樣板,卻沒有同時做到互動式視覺化、規則強制與歷史指標追蹤,且需支援 Kotlin Multiplatform。Aalekh 在配置階段序列化相依為字串地圖以相容 Gradle 的 configuration cache,輸出 graph.json,並產生單一不依賴外部資源的 HTML 報告。功能包含循環檢測(測試專用循環只列資訊)、神模組與不穩定度指標、傳遞相依與關鍵路徑分析,並可透過 aalekhCheck 整合 CI(產出 JUnit XML 與 JSON)。內部以純 Kotlin 組件分層,便於單元測試,v0.2 計畫加入層級規則的 Kotlin DSL。

09

Kotlin Fundamentals Part 20 — Sealed Classes — Restricted Hierarchies

Medium Kotlin 作者:Kishor Ramani 發布:03-20 23:44

Kotlin 基礎(第20篇)— Sealed 類別 — 受限的繼承階層

Sealed 類別就像加強版的 enum:它們將繼承限制在已知的類型範圍內。

重點摘要

Sealed 類別類似強化的 enum
將繼承限制在已知類型集合
讓類別階層更明確且可控

本文簡短介紹 Kotlin 的 sealed 類別,將其比喻為「加強版的 enum」,重點在於 sealed 類別能把繼承限制在一組已知的類型之內。這種受限的階層讓可能的子類別範圍更明確,有助於表達設計意圖與讓開發者在設計時更容易推理所有可能情況。文章以概念性說明為主,並引導讀者前往 Medium 原文以查看範例與更深入的說明,適合想了解 sealed 類別用途與設計取捨的開發者閱讀。

10

Kotlin Fundamentals Part 21 — Enum Classes — Fixed Set of Constants

Medium Kotlin 作者:Kishor Ramani 發布:03-20 23:47

Kotlin 基礎(第 21 篇)— Enum 類別 — 固定常數集合

當你有一組固定的常數時,Enum 是你的好幫手!

重點摘要

用 enum 類別表示固定且相關的常數集合
列舉項目可帶屬性、方法並實作介面
常見用法:在 when 中使用、迭代、取得 name/ordinal

本文說明 Kotlin 的 enum 類別是處理固定常數集合的最佳選擇。文章介紹 enum 的宣告語法、如何為列舉項目加上屬性與方法、以及實作介面等進階用法;說明常見場景包括在 when 表達式中使用、對列舉值迭代、取得 name 與 ordinal,以及透過建構子與函式擴充行為。文中強調 enum 可提供型別安全且具可讀性的常數群組,有助於降低以原始常數表示時的錯誤,並討論何時適合使用 enum 而非其他替代做法,為學習 Kotlin 的開發者提供實用範例與應用建議。

11

I Built an AI Tutor That Runs Entirely on a Phone, Part 2: The Architecture

Medium Kotlin 作者:Sylvester Ranjith Francis 發布:03-21 04:01

我打造了一個可完全在手機上執行的 AI 導師(第二部分):架構

在第一部分我說明了為何在一個週末內建立 RustSensei——一個由微調的 on-device SLM 支援、可離線運作的 Rust 教學助理。

重點摘要

RustSensei 是可在手機上離線執行的 Rust 程式教學助理
作者在一個週末內完成專案原型
系統由微調的 on-device SLM 提供推理能力

第二部分聚焦於 RustSensei 的整體架構與設計考量。延續第一部分說明作者如何在短時間內建立這個離線 Rust 教學助理,本文說明了將微調後的 on-device SLM 整合到手機端並離線執行的系統層面議題。文章在摘要中強調系統元件如何互動、在手機部署時面臨的限制,以及在效能、模型大小與響應速度之間必須權衡的工程取捨。完整內容請參見 Medium 上的原文,以獲得更深入的實作與架構細節。

12

8 Kotlin DSL Patterns for Expressive APIs

Medium Kotlin 作者:Prakash Sharma 發布:03-21 04:41

8 種 Kotlin DSL 範式,打造具表達力的 API

最好的 Kotlin 程式不只是能運作——它讀起來像一段對話。

重點摘要

DSL 能讓 Kotlin API 更像自然語言的對話
文章整理出 8 種設計表達式 DSL 的範式
強調可讀性、使用便利性與可維護性的取捨

本文指出,優秀的 Kotlin 程式不僅要會執行,更要讀起來像一段對話,而 DSL(領域專用語言)是達成此目標的重要手段。作者整理並說明了八種 Kotlin DSL 範式,說明何時採用、能帶來的可讀性與語意清晰度,以及常見的權衡與實作考量。文章著重 DSL 如何揭示領域意圖、減少樣板程式碼並提升 API 的使用便利性,同時提醒在流暢性與安全性之間需要平衡。目標讀者為 Kotlin 開發者與 API 設計者,提供實務導向的選擇與設計建議,協助團隊建立易讀且意圖明確的 API。

13

I Got Tired of Reverse-Engineering My Own Architecture. So I Built a Tool to See It.

Medium Kotlin 作者:Shiva Thapa 發布:03-21 06:29

我厭倦了逆向工程自己的架構,於是我做了一個工具來看清它。

我打造了 Aalekh — 一個 Gradle 外掛,為 Kotlin 與 Android 團隊提供多模組專案的架構 X 光。

重點摘要

開發 Aalekh,作為架構可視化的 Gradle 外掛
專為 Kotlin 與 Android 的多模組專案設計
源於不想再反覆逆向工程既有架構的挫折

作者因為反覆需要逆向工程自己的專案架構而感到疲累,於是開發了 Aalekh,一個能為 Kotlin 與 Android 多模組專案提供「架構 X 光」的 Gradle 外掛。此工具的目的是讓團隊能直接檢視專案的結構與模組間關係,減少靠人力推敲或逐步分析的時間與錯誤。文章強調了開發動機、目標使用者(Kotlin 與 Android 開發團隊),以及透過工具提升在複雜模組化專案中理解架構的效率與明確性。