Kotlin -特殊用法详解

本文详细讲解了Kotlin中的特殊用法,包括解构声明、let、takeIf等标准库方法、流程控制、中缀表示法、?表达式和Elvis表达式、对象声明等。通过实例解析了Kotlin如何使代码更加简洁和高效。
摘要由CSDN通过智能技术生成

本文适合已经了解Kotlin基本用法,想更加深入的使用Kotlin方法和性能的同学们
如果你是Kotlin小白,可以先了解一下Kotlin的基础用法

Kotlin-中文官网基础用法

解构声明

我们在一个文件中定义一个Person类

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

我们可以通过简单的语法获得这个类的name和age属性

val (name, age) = Person("tom", 11)
println(name)
println(age)

上面的Person是数据类(data class)当我们定义一个普通的类,不能简单的通过下面的方法获取name和age的值

class Dog(val name: String, val age: Int)
val (nameDog, ageDog) = Dog("James", 5)

为什么数据类可以,普通类就不可以呢? 因为数据类帮我们实现了解构声明需要的componentN方法这个N可以是1或者2等.

标准库中的let, takeIf, takeUnless,apply, also,with,run方法

let

let方法接收一个参数,参数是个方法。这个方法的名字叫block。let接收的方法是一个穿入值是T类型返回值是R类型的方法。并且我们知道这个方法的反回值就是整个let方法的返回值。绕口,见谅

// Java
if (message != null) {
   
    System.out.println(message)
}
// Kotlin 如果message是null下面这行忽略
message?.let {
    println(it) }
takeIf

定义

/**
 * Returns `this` value if it satisfies the given [predicate] or `null`, if it doesn't.
 */
@kotlin.internal.InlineOnly
@SinceKotlin("1.1")
public inline fun <T> T.takeIf(predicate: (T) -> Boolean): T? = if (predicate(this)) this else null
  • takeIf是个扩张方法
  • 参数是个方法,(T) -> Boolean,这个方法的参数是类型T的对象,返回值是一个布尔类型
  • if (predicate(this)) this else null,这个是方法体。通过predicate这个函数为真,返回对象T,要么返回null

举例

val result = "Hello World".takeIf {
   
    it.length > 1
}
println(result)
//打印结果System.out: Hello World
takeUnless

定义上看,takeIf和takeUnless只是在方法体中的if的判断相反,其他都一样。

/**
 * Returns `this` value if it _does not_ satisfy the given [predicate] or `null`, if it does.
 */
@kotlin.internal.InlineOnly
@SinceKotlin("1.1")
public inline fun <T> T.takeUnless(predicate: (T) -> Boolean): T? = if (!predicate(this)) this else null
apply

apply函数是这样的,调用某对象的apply函数,在函数范围内,可以任意调用该对象的任意方法,并返回该对象

fun testApply() {
   
    // fun <T> T.apply(f: T.() -> Unit): T { f(); return this }
    ArrayList<String>().apply {
   
        add("testApply")
        add("testApply")
        add("testApply")
        println("this = " + 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值