Kotlin when 表達式完全指南:從基礎到高級的12種實戰用法

掌握 when 的靈活運用,告別繁瑣的 if-else 鏈
以下是 Kotlin 中 when 表達式的 12種核心用法 的全面總結,涵蓋基礎到高級場景,并附帶實用示例:
一、基礎用法
1. 替代 Java 的 switch-case

when (x) {1 -> println("一")2 -> println("二")else -> println("其他")
}

2. 多條件合并

when (x) {1, 2 -> println("一或二")in 3..5 -> println("三到五")else -> println("其他")
}

二、高級匹配
3. 類型檢查(智能轉換)

when (obj) {is String -> println(obj.length) // 自動轉為Stringis Int -> println(obj.plus(1))   // 自動轉為Intelse -> println("未知類型")
}

4. 范圍匹配

when (score) {in 90..100 -> "A"in 80 until 90 -> "B"!in 60..79 -> "不及格" else -> "C"
}

5. 函數調用作為分支條件

when {x.isOdd() -> println("奇數")x.isEven() -> println("偶數")else -> println("非整數")
}

三、特殊場景
6. 無參數形式(布爾表達式鏈)

when {network.isConnected() -> fetchData()cache.isValid() -> showCachedData()else -> showError()
}

7. 枚舉匹配

enum class Color { RED, GREEN, BLUE }when (color) {Color.RED -> println("紅色")Color.GREEN -> println("綠色")Color.BLUE -> println("藍色")
}

8. 解構聲明

when (val (x, y) = point) {(0, 0) -> println("原點")(1, 1) -> println("對角線點")else -> println("其他坐標")
}

四、返回值特性
9. 作為表達式返回結果

val result = when (input) {"yes" -> "同意""no" -> "拒絕"else -> "無效輸入"
}

10. 配合 let 處理可空變量

val message = nullableStr?.let { when (it.length) {0 -> "空字符串"in 1..10 -> "短文本"else -> "長文本"}
} ?: "變量為null"

五、實用技巧
11. 與 sealed class 配合(狀態機)

sealed class Result {data class Success(val data: String) : Result()data class Error(val msg: String) : Result()
}when (result) {is Result.Success -> showData(result.data)is Result.Error -> showError(result.msg)
}

12. 替代 if-else 鏈

// 傳統寫法
if (x == 1) {// ...
} else if (x in 2..5) {// ...
} else {// ...
}// Kotlin 優雅寫法
when (x) {1 -> { /* ... */ }in 2..5 -> { /* ... */ }else -> { /* ... */ }
}

六、注意事項
窮盡性檢查:當作為表達式時,必須包含 else 分支(枚舉或密封類除外)

執行順序:按從上到下匹配,首個滿足條件的分支執行后即退出

性能優化:編譯器會將密集的整型匹配優化為 跳轉表

掌握這些用法后,when 可以替代絕大多數條件判斷場景,使代碼更簡潔安全。建議在 Android 開發中優先使用 when 替代復雜的 if-else 嵌套。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73677.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73677.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

新加坡 PSB 認證:安全標準、證書特點及申請注意事項

目錄 什么是PSB認證? 涉及產品范圍 強制性認證產品類別 自愿性認證產品 認證項目與測試標準 1. 安全測試 2. 電磁兼容性(EMC)測試 3. 能效測試(特定產品) 認證流程詳解 第一步:準備階段 第二步&a…

UE4學習筆記 FPS游戲制作26 UE中的UI

文章目錄 幾個概念創建一個UI藍圖添加UI獲取UI的引用 切換設計器和UI藍圖將UI添加到游戲場景錨點軸點slotSizeToContent三種UI數據更新方式函數綁定屬性綁定事件綁定 九宮格分割圖片 幾個概念 UMG:UE的UI編輯器 slate UI: UE的UI的編輯語言 創建一個UI藍圖 右鍵用…

HttpRunner v4.x 遠程調用實踐指南

一、基于 SSH 的遠程執行方案 1. 環境準備流程 在目標服務器部署 HttpRunner 運行時環境: # 遠程服務器執行(需 Golang 1.18 和 Python 3.8) curl -ksSL https://httprunner.com/script/install.sh | bash配置免密登錄(本地機器…

頭條項目的文章延遲發布功能

最近做的頭條項目其中有個功能是創作者發表的文章可以設置在未來某個時間發表,在實現這個功能的時候就在想該怎么實現呢?剛開始想的是利用Spring的定時任務定時的去數據庫中查詢,可以這個查詢頻率該怎么設置,每次從數據庫中需要查…

Celery 全面指南:Python 分布式任務隊列詳解

Celery 全面指南:Python 分布式任務隊列詳解 Celery 是一個強大的分布式任務隊列/異步任務隊列系統,基于分布式消息傳遞,專注于實時處理,同時也支持任務調度。本文將全面介紹 Celery 的核心功能、應用場景,并通過豐富…

OpenHarmony NativeC++應用開發speexdsp噪聲消除案例

隨著5.0的版本的迭代升級,筆者感受到了開源鴻蒙前所未有大的版本更替速度。5.0出現了越來越多的C API可以調用,極大的方便了native c應用的開發。筆者先將speexdsp噪聲消除的案例分享,老規矩,還是開源!!&am…

nuxt3 seo優化

在 Nuxt3 中,通過 nuxtjs/seo、nuxtjs/sitemap 和 nuxtjs/robots 模塊可以生成包含動態鏈接的站點地圖(sitemap.xml),但具體是“實時生成”還是“部署時生成”,取決于你的配置方式和數據更新頻率。以下是具體分析&…

es6的100個問題

基礎概念 解釋 let、const 和 var 的區別。什么是塊級作用域?ES6 如何實現它?箭頭函數和普通函數的主要區別是什么?解釋模板字符串(Template Literals)的用途,并舉例嵌套變量的寫法。解構賦值的語法是什么…

【機器學習】什么是決策樹?

什么是決策樹? 決策樹是一種用于分類和回歸問題的模型。它通過一系列的“決策”將數據逐步分裂,最終得出預測結果。可以把它看作是一個“樹”,每個節點表示一個特征的判斷,而每個分支代表了可能的判斷結果,最終的葉子…

Java面試黃金寶典15

1. 請找出增序排列中一個數字第一次和最后一次出現的數組下標 定義 由于數組是增序排列的,我們可以利用二分查找的特性來高效地定位目標數字。對于查找第一次出現的位置,當中間元素等于目標數字時,我們需要繼續向左搜索,以確保找…

CentOS 7安裝 mysql

CentOS 7安裝 mysql 1. yum 安裝 mysql 配置mysql源 yum -y install mysql57-community-release-el7-10.noarch.rpm安裝MySQL服務器 yum -y install mysql-community-server啟動MySQL systemctl start mysqld.service查看MySQL運行狀態,運行狀態如圖&#xff…

科軟25機試

題目: 2025科軟復試上機題&#xff08;回憶版&#xff09;題解_嗶哩嗶哩_bilibili 1. 字符串反轉 #include<bits/stdc.h> using namespace std;void solve(string& a, int CurN) {if (!(CurN % 2)) {int right a.size() - 1;int left 0;while (left < right)…

Oracle相關的面試題

以下是150道Oracle相關的面試題&#xff0c;涵蓋了Oracle的基礎概念、架構、SQL與PL/SQL、性能調優、高可用性、備份與恢復、安全、分區與索引、存儲與內存管理、網絡與連接、版本與升級等方面&#xff0c;希望對你有所幫助。 Oracle基礎概念 1. 什么是Oracle數據庫&#xff1…

docker安裝,鏡像,常用命令,Docker容器卷,Docker應用部署,自定義鏡像,Docker服務編排,創建私有倉庫

1.為什么使用docker 如果開發環境和測試環境的允許軟件版本不一致&#xff0c;可能會導致項目無法正常啟動 把環境和項目一起打包發送給測試環境 1.1docker的概念 開源的應用容器引擎&#xff0c;完全使用沙箱機制&#xff0c;相互隔離&#xff0c;容器性能開銷極低 一種容…

ES 字段的映射定義了字段的類型及其行為

在 Elasticsearch 中&#xff0c;字段的映射定義了字段的類型及其行為。你提供的 content_answer 字段映射如下&#xff1a; Json 深色版本 "content_answer": { "type": "text", "fields": { "keyword": { …

Manus的開源替代者之一:OpenManus通用AI智能體框架解析及產品試用

引言 在AI智能體領域&#xff0c;Monica團隊近期發布的Manus被譽為全球首個通用型AI智能體。該項目推出后迅速爆紅&#xff0c;邀請碼一號難求&#xff0c;隨之而來的是各路開發者快速構建了眾多類似的開源替代方案。其中&#xff0c;MetaGPT團隊的5位工程師僅用3小時就開發完…

Linux MariaDB部署

1&#xff1a;查看Linux系統版本 cat /etc/os-release#返回結果&#xff1a; NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI…

PHP MySQL 預處理語句

PHP MySQL 預處理語句 引言 在PHP中與MySQL數據庫進行交互時,預處理語句是一種非常安全和高效的方法。預處理語句不僅可以防止SQL注入攻擊,還可以提高數據庫查詢的效率。本文將詳細介紹PHP中預處理語句的用法,包括其基本概念、語法、優勢以及在實際開發中的應用。 預處理…

算法 | 2024最新算法:鳑鲏魚優化算法原理,公式,應用,算法改進研究綜述,matlab代碼

2024最新鳑鲏魚優化算法(BFO)研究綜述 鳑鲏魚優化算法(Bitterling Fish Optimization, BFO)是2024年提出的一種新型群智能優化算法,受鳑鲏魚獨特的繁殖行為啟發,通過模擬其交配、產卵和競爭機制進行全局優化。該算法在多個領域展現出優越性能,尤其在解決復雜非線性問題中…

HDR(HDR10/ HLG),SDR

以下是HDR&#xff08;HDR10/HLG&#xff09;和SDR的詳細解釋&#xff1a; 1. SDR&#xff08;Standard Dynamic Range&#xff0c;標準動態范圍&#xff09; ? 定義&#xff1a;SDR是傳統的動態范圍標準&#xff0c;主要用于8位色深的視頻顯示&#xff0c;動態范圍較窄&…