在 Kotlin 中,高階函數的本質是「將函數作為商品流通的交易模式」。
- 核心需求:傳統函數只能操作數據(如數字、字符串),但實際開發中常需復用邏輯流程(如「先校驗參數,再執行操作」的流程適用于多種場景)。若為每個場景單獨寫代碼,會導致大量重復。
- 解決方案:將「固定流程」作為函數定義,把「變化的邏輯」作為參數(函數)傳入,實現「流程復用 + 邏輯定制」。就像工廠生產通用設備時,預留「可替換零件」接口,讓設備能適配不同需求。
通俗類比:
把高階函數比作「外賣點餐系統」:
-
系統有固定流程:「接收訂單 → 通知商家制作 → 配送」(高階函數的骨架)。
-
但「制作餐品」和「配送方式」因商家 / 用戶而異(變化的邏輯),需作為「函數參數」傳入系統。例如:
kotlin
// 定義高階函數:處理訂單(固定流程) fun processOrder(dishMaker: () -> String, // 制作餐品的函數(參數是函數)deliveryMethod: (String) -> Unit // 配送的函數(參數是函數) ) {println("接收訂單...")val dish = dishMaker() // 調用傳入的制作函數deliveryMethod(dish) // 調用傳入的配送函數 }// 具體商家的制作邏輯(炒面) val makeNoodles = { "番茄雞蛋炒面" } // 具體配送邏輯(騎手配送) val deliverByRider = { dish: String -> println("騎手配送:$dish") }// 調用高階函數,傳入具體邏輯 processOrder(makeNoodles, deliverByRider) // 輸出:接收訂單... 番茄雞蛋炒面 騎手配送:番茄雞蛋炒面
這里?
processOrder
?是高階函數,它接收兩個函數作為參數,用統一流程處理不同邏輯,避免了為每種餐品和配送方式單獨寫代碼。
總結:高階函數是 Kotlin 對「抽象復用」思想的實踐,通過「函數參數化」將固定流程與變化邏輯分離,就像外賣系統用統一流程處理不同商家的訂單,既減少重復代碼,又讓邏輯組合更靈活。