網站建設工具 hbuild互聯(lián)網營銷師題庫
導讀大綱
- 1.1.1 Kotlin 是安全的
- 1.1.2 Kotlin 具有互操作性
- 1.1.3 什么是 idiomatic Kotlin?
1.1.1 Kotlin 是安全的
-
一般來說,當我們說一種編程語言是安全的
- 我們指的是它的設計可以防止程序中出現(xiàn)某些類型的錯誤
- 當然,這并不是絕對的;沒有一種語言能防止所有可能出現(xiàn)的錯誤
-
此外,防止錯誤通常是有代價的
- 你需要向編譯器提供更多關于程序預期運行的信息
- 這樣編譯器才能驗證這些信息是否與程序的運行相符
- 因此,您需要在所獲得的安全級別
- 和為添加更詳細注釋而損失的生產率之間做出權衡
- 你需要向編譯器提供更多關于程序預期運行的信息
-
在 JVM 上運行已經提供許多安全保障
- 例如,內存安全、防止緩沖區(qū)溢出
- 以及其他因不正確使用動態(tài)分配的內存而導致的問題
- 作為 JVM 上的靜態(tài)類型語言,Kotlin 還能確保應用程序的類型安全
- 此外,Kotlin 還能更進一步:它能輕松定義只讀變量(通過 val 關鍵字)
- 并快速將它們歸類到不可變(data)類中
- 從而為多線程應用程序提供額外的安全性
- 例如,內存安全、防止緩沖區(qū)溢出
-
除此之外,Kotlin還會在編譯時進行檢查,以防止運行時出現(xiàn)錯誤
- 最重要的是,Kotlin 致力于消除程序中的 NullPointerException
- Kotlin 的類型系統(tǒng)會可以跟蹤為空和不能為空的值
- 并禁止在運行時導致 NullPointerException 異常的操作
- 為此所需的額外成本極低
- 將一個類型標記為可空只需一個字符,即結尾的問號
- 作為補充,Kotlin 提供許多方便的方法來處理空數(shù)據(jù)
- 這大大有助于避免應用程序崩潰
fun main() {var s: String? = null // 可以為空var s2: String = "" // 不能為空println(s.length) // 不會編譯, 免于崩潰println(s2.length) // 將按預期運行
}
- Kotlin 還能幫助避免另一種異常,那就是**“類轉換異?!?*
- 當你在未檢查對象類型是否正確的情況下
- 就將其轉換到某個類型時就會發(fā)生這種異常
- Kotlin 將檢查和轉換合并為單個操作(智能轉換)
- 這意味著一旦你檢查類型,就可以引用該類型的成員
- 而無需任何額外的轉換、重新聲明或檢查
- 這意味著一旦你檢查類型,就可以引用該類型的成員
- <1> 在本例中,編譯器對值變量進行類型檢查,該變量可能是 Any 類型
- 編譯器知道,在條件的真分支中,value 必定是 String 類型
- 因此它可以安全地允許使用該類型的方法(即所謂的smart-cast)
- 當然你可以手動執(zhí)行轉換(value as String)
- 可以但是沒必要,并不符合idiomatic Kotlin
- 編譯器知道,在條件的真分支中,value 必定是 String 類型
- 當你在未檢查對象類型是否正確的情況下
fun modify(value: Any) { // <1>if (value is String) { // <1>// val value = value as Stringprintln(value.uppercase()) // <1>}
}
1.1.2 Kotlin 具有互操作性
-
關于互操作性,首先關心的可能是:"我能使用現(xiàn)有的庫嗎?
- 對于Kotlin, 答案是 “是的,絕對可以”
- 無論庫需要哪種 API,您都可以在 Kotlin 中使用它們
- 您可以調用 Java 方法、擴展 Java 類和實現(xiàn)接口
- 將 Java 注解應用到 Kotlin 類等等
-
與其他一些 JVM 語言不同, Kotlin 在互操作性方面更進一步
- 使得從 Java 調用 Kotlin 代碼也毫不費力,無需任何技巧
- Kotlin 類和方法可以像普通 Java 類和方法一樣被調用
- 這樣,您就可以在項目的任何地方靈活地混合使用Java和Kotlin代碼
- 當您開始在 Java 項目中采用 Kotlin 時
- 您可以在代碼庫中的任何一個類上運行Java到 Kotlin 的轉換器
- 而代碼的其余部分將繼續(xù)編譯和運行, 無需做任何修改
-
Kotlin 注重互操作性的另一個方面是盡可能多地使用現(xiàn)有的 Java 庫
- 例如,Kotlin 的集合幾乎完全依賴于 Java 標準庫類
- 并為它們擴展額外的功能,以便在 Kotlin 中更方便地使用
- 這意味著當你從 Kotlin 調用 Java API 時
- 永遠不需要包裝或轉換對象,反之亦然
- Kotlin 提供的所有豐富 API 在運行時無需任何成本
- 例如,Kotlin 的集合幾乎完全依賴于 Java 標準庫類
-
Kotlin 工具還為跨語言項目提供全面支持
- 它可以編譯任意混合的 Java 和 Kotlin 源文件
- 無論它們如何相互依賴
- IDEA和Android Studio中的IDE功能也能跨語言工作,允許執(zhí)行以下操作
- 在 Java 和 Kotlin 源文件之間自由導航
- 調試混合語言項目,并在不同語言編寫的代碼之間進行切換
- 重構Java方法,并正確更新它們在Kotlin代碼中的使用,反之亦然
- 它可以編譯任意混合的 Java 和 Kotlin 源文件
1.1.3 什么是 idiomatic Kotlin?
-
在討論 Kotlin 代碼時,有一個短語經常出現(xiàn): idiomatic Kotlin
-
簡單地說,idiomatic Kotlin就是母語為 Kotlin 的用戶如何編寫代碼
- 并在適當?shù)牡胤绞褂谜Z言特性和語法糖
- 這樣的代碼由慣用語組成—可識別的結構(模式)
- 以"Kotlin 方式"解決您試圖解決的問題
-
慣用化代碼符合社區(qū)普遍接受的編程風格,并遵循語言設計者的建議
- 與其他技能一樣,學習編寫慣用的 Kotlin 代碼需要時間和實踐
- 在閱讀代碼示例并編寫自己的代碼的過程中
- 將逐漸對慣用的 Kotlin 代碼的外觀和感覺形成直覺
- 并獲得在自己的代碼中獨立應用這些知識的能力