Kotlin标准函数

一、标准函数

标准函数是指Standard.kt文件中定义的函数,任何Kotlin代码都可以自由的调用所有标准函数,标准函数有很多我们这里主要学习下几个常用的标准函数。

1.1 apply

apply函数可看作一个配置函数,你可以传入一个接收者,然后调用一系列函数来配置它以便使用,如果提供lambda给apply函数执行,它会返回配置好的接收者。

fun main() {
    var map = mutableMapOf("帅次" to 18).apply {
        put("apply-北京",188)
        put("apply-上海",288)
    }
    println(map)//{帅次=18, apply-北京=188, apply-上海=288}
}

  • 1、创建可变Map
  • 2、通过apply()函数添加数据

如下,咱们启动一个界面并传参

        val intent = Intent(this,NextActivity::class.java).apply {
            putExtra("name","sc")
            putExtra("age",19)
        }
        startActivity(intent)

可以看到,调用一个个函数类配置接收者时,变量名(map、intent)就省掉了,这是因为,在lambda表达式里,apply能让每个配置函数都作用于接收者,这种行为有时又叫做相关作用域,因为lambda表达式里的所有函数调用都是针对接收者的,或者说,它们是针对接收者的隐式调用

1.2 let

let函数能使某个变量作用于其lambda表达式里,让it关键字能引用它。let与apply比较,let会把接收者传给lambda,而apply什么都不传,匿名函数执行完,apply会返回当前接收者,而let会返回lambda的最后一行

    var letData = 20.let {
        "不知不觉过去 $it 年了"
    }
    println(letData)

1.3 also

also函数和let函数功能相似,和let一样,also也是把接收者作为值参传给lambda,但有一点不同:also返回接收者对象,而let返回lambda结果。因为这个差异,also尤其适合针对同一原始对象,利用副作用做事,既然also返回的是接收者对象,你就可以基于原始接收者对象执行额外的链式调用

    //also
    var alsoData = "AndroidSHUAICI"
    var strAlso = alsoData.also {
        println(it.length)//14
    }.also {
        println(it.startsWith("Android"))//true
    }
    println(strAlso)//AndroidSHUAICI

1.4 run

具备接收者的隐式调用(apply)返回的是lambda的最后一行(let)

    //run
    var str = "Android帅次"
    var s = str.run {
        startsWith("Android")
    }
    println(s)//true

加强版

fun main() {
    var runS = str.run {
        startsWith("Android")
        println(this)//Android帅次
        "吼吼哈嘿"//这里决定下一个run的this类型
    }.run {
        println(this)//吼吼哈嘿
        18//这里的18传入到isAge函数
    }.run(::isAge)
    println(runS)//false
}

fun isAge(age: Int) = age > 15


从上面看出,run支持链式调用,run也支持函数引用。

1.5 with

with函数是run的变体,功能一样,但是调用with时需要值参作为其第一个参数传入

    var strWith = "Android帅次"
    var sWith = strWith.run {
        startsWith("Android")
        "run-$this"
    }
    println(sWith)//run-Android帅次
    sWith = with(strWith) {
        startsWith("Android")
        "with-$this"
    }
    println(sWith)//with-Android帅次

1.6 takelf

如果需要判断某个条件是否满足再决定是否可以赋值变量或执行某项任务takelf就非常有用,概念上讲,takelf函数类似于if语句,但它的优势是可以直接在对象实例上调用,避免了临时变量赋值的麻烦。

takelf函数需要判断lambda中提供的条件表达式,给出true或false结果:

  • 如果判断结果是true,从takelf函数返回接收者对象。
  • 如果是false,则返回null。
    val strTakeIf = "Android帅次"
    val tkif = strTakeIf.takeIf {
        it.startsWith("Android")//返回true
    }
    println(tkif)//Android帅次
    var tkifS= strTakeIf.takeIf {
        it.startsWith("Android")
    }.takeIf {
        println("Length:${it?.length}")//Length:9
        it?.length!! > 20//返回false
    }
    println(tkifS)//null

1.7 takeUnless

takelf辅助函数takeUnless,只有判断你给定的条件结果是false时,takeUnless才会返回原始接收者对象,跟takelf刚好相反

    val strTakeIfUn = "Android帅次"
    val un = strTakeIf.takeUnless {
        it.startsWith("Android")//返回true
    }
    println(un)//null
    var un2 = strTakeIfUn.takeUnless {
        it.startsWith("帅次")//返回false
    }
    println(un2)//Android帅次

takeUnless函数有点调皮,了解一下就行。还是感觉takelf比较好理解和使用。

下面给大家分享两份资料:字节跳动内部超高质量Kotlin笔记、谷歌大佬编写高级Kotlin强化实战(附Demo)。

一、字节跳动内部超高质量Kotlin笔记

1.准备开始

  • 基本语法
  • 习惯用语
  • 编码风格

2.基础

  • 基本类型
  • 控制流
  • 返回与跳转

3.类和对象

  • 类和继承
  • 属性和字段
  • 接口
  • 可见性修饰词
  • 扩展
  • 数据对象
  • 泛型
  • 嵌套类
  • 枚举类
  • 对象表达式和声明
  • 代理模式
  • 代理属性

4.函数和lambda表达式

  • 函数
  • 高阶函数与 lambda 表达式
  • 内联函数

5.其它

  • 多重申明
  • Ranges
  • 类型检查和自动转换
  • This表达式
  • 等式
  • 运算符重载
  • 空安全
  • 异常
  • 注解
  • 反射
  • 动态类型

6.互用性

  • 动态类型

7.工具

  • 使用Maven
  • 使用 Ant
  • 使用 Gradle
  • 使用Griffon

8.FAQ

  • 与java对比
  • 与Scala对比

基础知识掌握之后就是靠实战提升了!

二、谷歌大佬编写高级Kotlin强化实战(附Demo)

第一章 Kotlin入门教程

  • Kotlin 概述
  • Kotlin 与 Java 比较
  • 巧用 Android Studio
  • 认识 Kotlin 基本类型
  • 走进 Kotlin 的数组
  • 走进 Kotlin 的集合
  • 集合问题
  • 完整代码
  • 基础语法

第二章 Kotlin 实战避坑指南

  • 方法入参是常量,不可修改
  • 不要 Companion 、INSTANCE ?
  • Java 重载,在 Kotlin 中怎么巧妙过渡一下?
  • Kotlin 中的判空姿势
  • Kotlin 复写 Java 父类中的方法
  • Kotlin “狠”起来,连TODO 都不放过!
  • is、as` 中的坑
  • Kotlin 中的 Property 的理解
  • also 关键字
  • takeIf 关键字
  • takeIf 关键字
  • 单例模式的写法

第三章 项目实战《Kotlin Jetpack 实战》

  • 从一个膜拜大神的 Demo 开始
  • Kotlin 写 Gradle 脚本是一种什么体验?
  • Kotlin 编程的三重境界
  • Kotlin 高阶函数
  • Kotlin 泛型
  • Kotlin 扩展
  • Kotlin 委托
  • 协程“不为人知”的调试技巧
  • 图解协程:suspend

更多Android可以查看我的个人介绍!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容