Android Kotlin知识汇总(一)编程语言

在 2019 年 Google I/O 大会上宣布今后将优先采用 Kotlin 进行 Android 开发。Kotlin 是一种富有表现力且简洁的编程语言,不仅可以减少常见代码错误,还可以轻松集成到现有应用中。如果您想构建 Android 应用,建议您从 Kotlin 开始着手,充分利用一流的 Kotlin 功能。

为什么要优先使用 Kotlin 进行 Android 开发?

根据来自开发者、客户顾问委员会 (CAB)、Google Developers 专家 (GDE) 的反馈,以及我们通过开发者调研获得的反馈。许多开发者已喜欢上使用 Kotlin,且提供更多 Kotlin 支持的呼声很高。下面介绍了开发者喜欢用 Kotlin 编写代码的原因:

  • 富有表现力且简洁:您可以使用更少的代码实现更多的功能。表达自己的想法,少编写样板代码。在使用 Kotlin 的专业开发者中,有 67% 的人反映其工作效率有所提高。
  • 更安全的代码:Kotlin 有许多语言功能,可帮助您避免 null 指针异常等常见编程错误。包含 Kotlin 代码的 Android 应用发生崩溃的可能性降低了 20%。
  • **可互操作:**您可以在 Kotlin 代码中调用 Java 代码,或者在 Java 代码中调用 Kotlin 代码。Kotlin 可完全与 Java 编程语言互操作,因此您可以根据需要在项目中添加任意数量的 Kotlin 代码。
  • 结构化并发:Kotlin 协程让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理,例如网络调用、本地数据访问等任务的管理。

学习 Kotlin 编程语言

Kotlin 是一种静态类型的语言。这意味着,类型将在编译时解析且从不改变。

变量声明

Kotlin 使用两个不同的关键字(即 valvar)来声明变量。

  • val 用于值从不更改的变量。使用 val 声明的变量无法重新赋值。
  • var 用于值可以更改的变量。

类型推断

Kotlin 编译器可根据所赋值的类型来推断其类型。利用 Kotlin 的类型推断,既能确保代码简洁,又能确保类型安全。

Kotlin 复制代码
val languageName = "Kotlin"
val upperCaseName = languageName.toUpperCase()
// Fails to compile
languageName.inc()

示例,为 languageName 赋予初始值后,languageName 推断为 String,因此无法对其调用任何不属于 String 类的函数。

Null 安全

在其他语言中,声明的引用类型变量默认null值。Kotlin 变量不能持有 null 值。要使变量持有 null 值,它必须是可为 null 类型。可以在变量类型后面加上 ? 后缀,将变量指定为可为 null。

Kotlin 复制代码
// Fails to compile
val languageName: String = null

val languageName: String? = null

条件语句

Kotlin 提供了几种实现条件逻辑的机制,其中最常见的是 if-else 语句。如果每个分支都是输出一个 String。为了避免这种重复,Kotlin 提供了条件表达式:

Kotlin 复制代码
val answerString: String = if (count == 42) {
    "I have the answer."
} else if (count > 35) {
    "The answer is close."
} else {
    "The answer eludes me."
}
println(answerString)

注意 :Kotlin 不包含传统的三元运算符。也可以使用 when 表达式,如以下示例所示:

Kotlin 复制代码
val answerString = when {
    count == 42 -> "I have the answer."
    count > 35 -> "The answer is close."
    else -> "The answer eludes me."
}
println(answerString)

函数

要声明函数,请使用 fun 关键字,后跟函数名称。接下来,定义函数接受的输入类型(如果有),并声明它返回的输出类型。

Kotlin 复制代码
fun generateAnswerString(countThreshold: Int): String {
    val answerString = if (count > countThreshold) {
        "I have the answer."
    } else {
        "The answer eludes me."
    }
    return answerString
}
调用此函数时,必须在函数调用的圆括号内添加一个参数:
val answerString = generateAnswerString(42)

简化函数:

Kotlin 复制代码
fun generateAnswerString(countThreshold: Int): String = if (count > countThreshold) {
        "I have the answer"
    } else {
        "The answer eludes me"
    }

匿名函数:

Kotlin 复制代码
val stringLengthFunc: (String) -> Int = { input ->
    input.length
}
调用传入String参数,返回Int类型
val stringLength: Int = stringLengthFunc("Android")

高阶函数:

一个函数可以将另一个函数当作参数。将其他函数用作参数的函数称为"高阶函数"。

Kotlin 复制代码
fun stringMapper(str: String, mapper: (String) -> Int): Int {
    // Invoke function
    return mapper(str)
}

类&属性

如果您希望添加自己的自定义类型,可以使用 class 关键字来定义类。类使用属性来表示状态。属性是类级变量,可以包含 getter、setter 和后备字段。

例如,汽车需要轮子来驱动,添加 Wheel 对象的列表作为 Car 的属性,如以下示例所示:

Kotlin 复制代码
class Car {
    val wheels = listOf<Wheel>()
}
//或者
class Car(val wheels: List<Wheel>)

注意,wheels 默认是一个 public val ,可以从 Car 类外部访问 wheels。

Kotlin 复制代码
val car = Car() // construct a Car
val wheels = car.wheels // retrieve the wheels value from the Car

如果希望公开属性的 getter 而限制访问其 setter,则可以将该 setter 指定为 private

Kotlin 复制代码
class Car(val wheels: List<Wheel>) {
    private val doorLock: DoorLock = ...
    var gallonsOfFuelInTank: Int = 15
        private set
    fun unlockDoor(key: Key): Boolean {
        // Return true if key is valid for door lock, false otherwise
    }
}

互操作性

Kotlin与 Java 之间流畅的互操作性。由于Kotlin 代码可编译为 JVM 字节码,因此 Kotlin 代码可直接调用 Java 代码,反之亦然。这意味着,您可以直接从 Kotlin 利用现有的 Java 库。此外,绝大多数 Android API 都是用 Java 编写的,因此可以直接从 Kotlin 调用它们。

下一篇,继续介绍 Kotlin 语言在 Android 实战开发过程中最有用的一些方面。

相关推荐
一颗花生米。2 小时前
深入理解JavaScript 的原型继承
java·开发语言·javascript·原型模式
问道飞鱼2 小时前
Java基础-单例模式的实现
java·开发语言·单例模式
学习使我快乐012 小时前
JS进阶 3——深入面向对象、原型
开发语言·前端·javascript
通信仿真实验室3 小时前
(10)MATLAB莱斯(Rician)衰落信道仿真1
开发语言·matlab
勿语&3 小时前
Element-UI Plus 暗黑主题切换及自定义主题色
开发语言·javascript·ui
服装学院的IT男4 小时前
【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-2
android
Arms2064 小时前
android 全面屏最底部栏沉浸式
android
服装学院的IT男4 小时前
【Android 源码分析】Activity生命周期之onStop-1
android
人间有清欢6 小时前
十、kotlin的协程
kotlin
吾爱星辰6 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin