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 分钟前
Python + MySQL 学生信息管理系统实战教程
android·python·mysql
ch_atu7 分钟前
使用python下载modelscope上的模型
开发语言·python
帅次8 分钟前
Android 高级工程师面试:Flutter 路由导航 近1年高频追问 18 题
android·flutter·面试
Albart57523 分钟前
Python爬虫请求头伪装后仍被反爬,基于代理池+随机延迟的绕过实战
开发语言·爬虫·python
Promise微笑25 分钟前
回路电阻测试仪采购:多维度技术评估与深度避坑指南
开发语言·matlab·语音识别
從南走到北37 分钟前
JAVA无人共享系统无人场馆预约篮球系统源码支持小程序+公众号+APP+H5
java·开发语言·小程序
码智社41 分钟前
Maven 零基础完整教程
java·开发语言·maven
半夜修仙1 小时前
Spring集成邮箱功能
java·开发语言·spring boot·spring·rabbitmq·github·maven
码农学院1 小时前
电子产品企业泉州网络推广如何精准触达目标采购商
开发语言·php
qq_33776320192 小时前
国际期货资管系统开发方案|内外盘交易平台源码授权与二次开发支持
java·c语言·开发语言·c++·c#