kotlin 官方学习教程之语法

秒速五厘米 2022-06-15 00:17 366阅读 0赞

这是 kotlin 学习教程第二篇,为大家讲解 kotlin 的语法。因为本系列文章是作者翻译官方文档而来,所以有一些描述可能不太正确,建议大家都到官网运行一下实例,有助于理解。


语法

创建 DTO(POJO / POCO)

  1. data class Customer(val name: String, val email: String)

提供带有下列功能的 Customer 类:

  • 所有属性的getter (和 var 的 setter)
  • equals()
  • hashCode()
  • toString()
  • copy()
  • 所有属性的 component1(),component2(),…

函数参数的默认值

  1. fun foo(a: Int = 0, b: String = "") { ... }

过滤列表

  1. val positives = list.filter { x -> x > 0 }

或者,可以更简洁一些:

  1. val positives = list.filter { it > 0 }

字符串插值

  1. println("Name $name")

实例检验

  1. when (x) {
  2. is Foo -> ...
  3. is Bar -> ...
  4. else -> ...
  5. }

遍历映射表/列表对

  1. for ((k, v) in map) {
  2. println("$k -> $v")
  3. }

k,v 可以调用任意事件

使用范围

  1. for (i in 1..100) { ... } // 闭区间:包括 100
  2. for (i in 1 until 100) { ... } // 半开半闭区间: 不包括 100
  3. for (x in 2..10 step 2) { ... }
  4. for (x in 10 downTo 1) { ... }
  5. if (x in 1..10) { ... }

只读列表

  1. val list = listOf("a", "b", "c")

只读映射表

  1. val map = mapOf("a" to 1, "b" to 2, "c" to 3)

访问映射表

  1. println(map["key"])
  2. map["key"] = value

Lazy 属性

  1. val p: String by lazy {
  2. // 计算字符串
  3. }

扩展函数

  1. fun String.spaceToCamelCase() { ... }
  2. "Convert this to camelcase".spaceToCamelCase()

创建一个单例模式

  1. object Resource {
  2. val name = "Name"
  3. }

If 非空简写

  1. val files = File("Test").listFiles()
  2. println(files?.size)

If 非空和 else 简写

  1. val files = File("Test").listFiles()
  2. println(files?.size ?: "empty")

If 为 null,执行语句

  1. val data = ...
  2. val email = data["email"] ?: throw IllegalStateException("Email is missing!")

If 不为 null,执行语句

  1. val data = ...
  2. data?.let {
  3. ... // 如果不为空,执行这一块代码
  4. }

when 语句中的返回值

  1. fun transform(color: String): Int {
  2. return when (color) {
  3. "Red" -> 0
  4. "Green" -> 1
  5. "Blue" -> 2
  6. else -> throw IllegalArgumentException("Invalid color param value")
  7. }
  8. }

try/catch 表达式

  1. fun test() {
  2. val result = try {
  3. count()
  4. } catch (e: ArithmeticException) {
  5. throw IllegalStateException(e)
  6. }
  7. // 与 result 一起工作
  8. }

if 表达式

  1. fun foo(param: Int) {
  2. val result = if (param == 1) {
  3. "one"
  4. } else if (param == 2) {
  5. "two"
  6. } else {
  7. "three"
  8. }
  9. }

返回类型为 Unit 的方法生成器风格用法

  1. fun arrayOfMinusOnes(size: Int): IntArray {
  2. return IntArray(size).apply { fill(-1) }
  3. }

单一表达式函数

  1. fun theAnswer() = 42

这相当于:

  1. fun theAnswer(): Int {
  2. return 42
  3. }

这可以与其它语法有效的组合在一起,简化代码。如:与 when 表达式:

  1. fun transform(color: String): Int = when (color) {
  2. "Red" -> 0
  3. "Green" -> 1
  4. "Blue" -> 2
  5. else -> throw IllegalArgumentException("Invalid color param value")
  6. }

在一个对象实例 (‘with’) 中调用各种方法

  1. class Turtle { fun penDown() fun penUp() fun turn(degrees: Double) fun forward(pixels: Double) } val myTurtle = Turtle() with(myTurtle) { //画一个 100 像素的平方 penDown() for(i in 1..4) { forward(100.0) turn(90.0) } penUp() }

Java 7 中带有资源的 try

  1. val stream = Files.newInputStream(Paths.get("/some/file.txt"))
  2. stream.buffered().reader().use { reader ->
  3. println(reader.readText())
  4. }

需要通用类型信息的通用函数的方便形式

  1. // public final class Gson {
  2. // ...
  3. // public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {
  4. // ...
  5. inline fun <reified T: Any> Gson.fromJson(json): T = this.fromJson(json, T::class.java)

使用可空的布尔值

  1. val b: Boolean? = ...
  2. if (b == true) {
  3. ...
  4. } else {
  5. // `b` 为 false 或者 null
  6. }

发表评论

表情:
评论列表 (有 0 条评论,366人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Kotlin 官方学习教程接口

    接口 Kotlin 中的接口和 Java 8 中的接口很像。他们可以包含抽象方法的说明和方法的实现。使接口和抽象类不同的是接口不能储存状态。接口可以含有参数,但必须是抽象