精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Kotlin的語法糖解析

jf_78858299 ? 來源:labuladong ? 作者:labuladong ? 2023-04-19 10:21 ? 次閱讀

最近又開始要寫一些客戶端代碼,現在項目都是使用Kotlin,但是之前沒有系統的學習過Kotlin,對于Kotlin的一些語法糖還不熟悉,所以寫篇文章總結下。

變量聲明與類型推斷

Kotlin中可以使用關鍵字val和var聲明不可變變量和可變變量,而且可以根據變量的初始值自動推斷出變量的類型。例如:

// Java代碼
String str = "Hello, world!";
List<String> list = new ArrayList<>();

// Kotlin代碼
val str = "Hello, world!"
val list = mutableListOf<String>()

使用上述Kotlin代碼,可以更加簡潔地完成變量的聲明和類型推斷。

空安全機制

Kotlin中使用?和!!運算符來處理空安全問題,可以避免空指針異常的發生。例如:

// Java代碼
String str = null;
if (str != null) {
    int length = str.length();
}

// Kotlin代碼
val str: String? = null
val length = str?.length ?: 0

使用上述Kotlin代碼,可以更加簡潔地處理空安全問題。

Lambda表達式

Kotlin中可以使用Lambda表達式來代替匿名內部類,可以更加簡潔地編寫函數式代碼。例如:

// 接收一個Int類型參數,返回一個Int類型參數
val square: (Int) -> Int = { x -> x * x }

// 簡化形式,使用it代替參數名
val square: (Int) -> Int = { it * it }

區間表達式

Kotlin中可以使用區間表達式來表示一段連續的數值范圍,可以更加簡潔地完成一些循環操作。例如:

// Java代碼
for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

// Kotlin代碼
for (i in 0 until 10) {
    println(i)
}

數據類

Kotlin中的數據類是一種特殊的類,用于存儲數據。數據類可以自動生成equals()、hashCode()、toString()等方法。在Kotlin中,可以使用data class關鍵字來定義數據類。例如:

// 定義一個數據類Person,包含name和age兩個屬性
data class Person(val name: String, val age: Int)

// 創建一個Person對象
val person = Person("John", 20)

// 自動生成toString()方法,輸出:Person(name=John, age=20)
println(person)

擴展函數

Kotlin中的擴展函數是一種特殊的函數,可以為任意類型添加新的函數。在Kotlin中,可以使用fun關鍵字來定義擴展函數。例如:

// 為Int類型添加一個times()擴展函數,用于計算平方值
fun Int.times() = this * this

// 使用擴展函數計算2的平方值
val square = 2.times() // 等價于2 * 2

命名參數

Kotlin中的命名參數可以讓函數調用更加靈活,可以指定參數的名稱。在Kotlin中,可以使用=符號來指定參數的名稱和值。例如:

// 定義一個函數,包含兩個參數name和age
fun printInfo(name: String, age: Int) {
   println("$name is $age years old.")
}

// 使用命名參數調用函數,參數的名稱可以任意指定
printInfo(age = 20, name = "John")

默認參數

Kotlin中的默認參數可以為函數參數指定默認值,如果調用函數時沒有傳遞這個參數,則使用默認值。在Kotlin中,可以使用=符號來為參數指定默認值。例如:

// 定義一個函數,包含兩個參數name和age,age的默認值為18
fun printInfo(name: String, age: Int = 18) {
   println("$name is $age years old.")
}

// 調用函數時不傳遞age參數,將使用默認值18
printInfo("John")

// 調用函數時傳遞age參數,將使用傳遞的值
printInfo("Mary", 20)

中綴表示法

中綴表達式是 Kotlin 中另一個有趣的語法糖。在 Kotlin 中,我們可以使用 infix 關鍵字將某個函數標記為中綴函數。這意味著我們可以在函數名和參數之間省略點號和括號。 例如,下面的代碼展示了如何使用中綴表達式:

class MyInt(val value: Int) {
    infix fun add(other: MyInt): MyInt {
        return MyInt(value + other.value)
    }
}

fun main() {
    val a = MyInt(2)
    val b = MyInt(3)

    val c = a add b // Using infix notation

    println(c.value) // Output: 5
}

在上面的代碼中,add 函數被標記為中綴函數。因此,我們可以像使用運算符一樣使用它,而無需使用點號和括號。

在實際編碼中,中綴表達式常常用于更自然地表達某些操作,例如 and 和 or 操作符:

fun main() {
    val a = true
    val b = false

    val c = a and b // Using infix notation
    val d = a or b // Using infix notation

    println(c) // Output: false
    println(d) // Output: true
}

在這個例子中,我們使用 and 和 or 操作符來演示中綴表達式的用法。由于這些操作符被標記為中綴函數,因此我們可以使用它們的中綴表達式形式來更自然地表達布爾運算。

Elvis 運算符 ?:

Elvis 運算符 ?: 可以用于縮短空值檢查的代碼。它的使用方法是:當左側的表達式非空時,返回左側的值,否則返回右側的值。例如:

val name: String? = null
val message = "Hello, ${name ?: "Guest"}"
println(message) // Output: "Hello, Guest"

在上面的例子中,我們使用了 Elvis 運算符 ?: 來檢查變量 name 是否為空。由于 name 是空的,所以表達式的結果是右側的字符串 "Guest"。

類型別名

類型別名可以讓我們給一個類型起一個別名,使得代碼更易讀。例如:

typealias UserName = String
typealias Password = String

fun login(username: UserName, password: Password) {
    // ...
}

在上面的代碼中,我們為 String 類型起了兩個別名,UserName 和 Password。這樣在函數參數中使用別名可以使代碼更具有可讀性。

in 運算符

Kotlin 中的 in 運算符可以用于判斷一個元素是否在一個區間、集合或數組中。例如:

val numbers = listOf(1, 2, 3, 4, 5)

if (3 in numbers) {
    println("3 is in the list")
}

在上面的代碼中,我們使用 in 運算符來判斷數字 3 是否在 numbers 集合中。

解構聲明

在 Kotlin 中,我們可以使用解構聲明從一個對象中快速提取多個屬性并賦值給多個變量。例如:

data class User(val name: String, val age: Int)

val user = User("Alice", 25)
val (name, age) = user

println("Name: $name, Age: $age")

在上面的代碼中,我們定義了一個 User 類,并且使用解構聲明從 user 對象中提取了 name 和 age 屬性并分別賦值給了 name 和 age 變量。

對象表達式和對象聲明

在 Kotlin 中,我們可以使用對象表達式創建一個匿名對象,也可以使用對象聲明創建一個單例對象。例如:

// 對象表達式
val obj = object {
    val x = 10
    fun printX() {
        println(x)
    }
}

obj.printX() // 輸出 10

// 對象聲明
object Singleton {
    fun doSomething() {
        println("Singleton object is doing something.")
    }
}

Singleton.doSomething() // 輸出 "Singleton object is doing something."

在上面的代碼中,我們使用對象表達式創建了一個匿名對象,并且在這個對象中定義了一個 x 屬性和一個 printX() 函數。我們還使用對象聲明創建了一個單例對象,并且在這個對象中定義了一個 doSomething() 函數。

with 和 apply 函數

Kotlin 中的 with() 和 apply() 函數可以用于簡化某些操作。with() 函數接收一個對象和一個 Lambda 表達式,可以在 Lambda 表達式中直接訪問對象的屬性和方法,例如:

val person = Person("Alice", 25)

with(person) {
    name = "Bob"
    age += 1
}

println("Name: ${person.name}, Age: ${person.age}") // 輸出 "Name: Bob, Age: 26"

在上面的代碼中,我們使用 with() 函數修改了 person 對象的 name 和 age 屬性。

apply() 函數和 with() 函數類似,但是它返回對象本身,可以使用鏈式調用的方式設置多個屬性,例如:

val person = Person("Alice", 25).apply {
    name = "Bob"
    age += 1
}

println("Name: ${person.name}, Age: ${person.age}") // 輸出 "

let語法

let 函數是一個非常有用的語法糖,它允許您在一個對象上執行一個操作,并返回結果。這個操作可以是一個函數或一個代碼塊。let 函數有以下兩種形式:

  • let { }:執行給定的代碼塊,以當前對象作為其參數,并返回結果。
  • obj.let { }:執行給定的代碼塊,以 obj 作為其參數,并返回結果。 下面是一個使用 let 函數的例子,假設我們有一個字符串列表,我們想打印列表中所有元素的長度,但只有在元素不為空時才打印:
val stringList = listOf("Hello", null, "World", null, "Kotlin")
stringList.filterNotNull().map { it.length }.forEach { println(it) }

這里我們使用了 filterNotNull() 函數來過濾空元素,并使用 map 函數將非空元素轉換為它們的長度,然后使用 forEach 函數打印每個長度。這個例子很簡單,但它可能會讓代碼變得混亂和難以閱讀。讓我們使用 let 函數來重寫這個例子:

val stringList = listOf("Hello", null, "World", null, "Kotlin")
stringList.forEach {
    it?.let { str ->
        println(str.length)
    }
}

在這個例子中,我們使用 forEach 函數來遍歷字符串列表。在每個元素上調用 let 函數,如果元素不為空,則打印它的長度。這個例子使用了簡潔的語法,使代碼更易于閱讀和理解。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4753

    瀏覽量

    68368
  • kotlin
    +關注

    關注

    0

    文章

    60

    瀏覽量

    4185
收藏 人收藏

    評論

    相關推薦

    ZZ:口香電池

    `由Ping-Yi Lin帶來的概念設計:口香電池(Chewing Gum Battery)。將電池設計成一片一片的口香模樣,放入類似自動販賣機的太陽能基站給其充電。使用時只需要依照產品的電壓
    發表于 10-12 14:46

    果兒洛克王國輔助 1.02

      1、【洛克王國輔助】 果兒洛克王國輔助 1.02  軟件名稱:果兒洛克王國輔助 1.02   軟件大小: 4.0M  軟件分類: 洛克王國輔助  軟件語言: 簡體  運行環鏡: WinXP
    發表于 02-14 15:17

    drools高級語法解析

    drools入門(六) - drools高級語法
    發表于 09-30 06:27

    求助,官方出的MESH DEMO怎么改成了Kotlin和JAVA混和了?

    對于我們大多數搞偏硬件的,一般都是用C的,對于C++,JAVA有天生的熟悉感,稍微學習一下,在官方的基礎上搞個東西難度不大,但是現在這個Kotlin是個什么鬼?語法規則完全不同了,連分號都不
    發表于 09-21 07:31

    分析Kotlin和Java EE的關系

    本文分析了Kotlin和Java EE的關系,討論了如何利用Kotlin的運算符,可空性和可選項來優化轉換的效果。 將Java EE應用程序轉換為Kotlin開始于框架的戰斗,我們成功地超越了
    發表于 09-28 17:12 ?0次下載
    分析<b class='flag-5'>Kotlin</b>和Java EE的關系

    Kotlin的概述

    相信很多開發人員,尤其是Android開發者都會或多或少聽說過Kotlin,當然如果沒有聽過或者不熟悉也沒有關系。因為本篇文章以及博客后期的內容會涉及到很多關于Kotlin的知識分享。 在寫
    發表于 09-28 19:48 ?0次下載
    <b class='flag-5'>Kotlin</b>的概述

    Kotlin編程語言現在是Android應用程序開發人員的首選語言

    Kotlin 是一門與 Swift 類似的靜態類型 JVM 語言,由 JetBrains 設計開發并開源。與 Java 相比,Kotlin語法更簡潔、更具表達性,而且提供了更多的特性,比如,高階函數、操作符重載、字符串模板。
    的頭像 發表于 05-10 08:49 ?2599次閱讀

    Kotlin實戰與Android的應用筆記詳細說明

    Kotlin語言在Android Studio中應用前景廣闊,本文是編者在應用開發中查找資料的總結,內容主要來自網絡,讀者可以作為手冊來查找并復制有用的內容到自己的應用當中。 Kotlin語言部分
    發表于 12-31 08:00 ?0次下載
    <b class='flag-5'>Kotlin</b>實戰與Android的應用筆記詳細說明

    使用Kotlin替代Java重構AOSP應用

    最佳實踐,另外則是提供優先使用 Kotlin 進行應用開發的良好范例。Kotlin 之所以具有強大的吸引力,原因之一是其簡潔的語法,很多情況下用 Kotlin 編寫的代碼塊的代碼數量
    的頭像 發表于 09-16 09:26 ?1837次閱讀
    使用<b class='flag-5'>Kotlin</b>替代Java重構AOSP應用

    使用Kotlin構建Android應用的基礎知識

    2021 年 10 月,我們發布了 "使用 Kotlin 構建 Android 應用的基礎知識" 課程的最后一個單元,這是我們推出的免費自學編程課程,致力于幫助沒有編程經驗的人
    的頭像 發表于 03-29 09:20 ?1593次閱讀

    bilisoleil-kotlin Kotlin版仿B站項目

    ./oschina_soft/bilisoleil-kotlin.zip
    發表于 06-10 14:12 ?0次下載
    bilisoleil-<b class='flag-5'>kotlin</b> <b class='flag-5'>Kotlin</b>版仿B站項目

    將其Android應用的Java代碼遷移到Kotlin

    Meta 稱,遷移到 Kotlin 既簡單又非常復雜。因為 Kotlin 的設計允許從 Java 進行簡單的轉換,并具有經過深思熟慮的互操作性。這種設計使 JetBrains 能夠為開發人員社區提供
    的頭像 發表于 10-28 15:15 ?705次閱讀

    語法分析-Antlr

    上一節,我們通過Antlr快速的落地實現了Token的解析,這一節我們還是基于Antlr來實現語法解析
    的頭像 發表于 03-03 10:14 ?648次閱讀
    <b class='flag-5'>語法</b>分析-Antlr

    Android自定義Toast Kotlin

    電子發燒友網站提供《Android自定義Toast Kotlin.zip》資料免費下載
    發表于 06-16 11:43 ?0次下載
    Android自定義Toast <b class='flag-5'>Kotlin</b>

    由Java改為 Kotlin過程中遇到的坑

    最近了解了下 Kotlin ,其中的很多語法很有意思,并且可以與 Java 無縫兼容。故嘗試在一個 SpringBoot 工程上將部分類修改為 Kotlin ,下面記錄了由 Java
    的頭像 發表于 09-30 16:51 ?784次閱讀
    由Java改為 <b class='flag-5'>Kotlin</b>過程中遇到的坑