阿里巴巴|【Android大厂必问面试题】阿里4面Kotlin面试题解析

题目:说下Kotlin内置标准函数let的原理是什么?这道题想考察什么?是否了解Kotlin内置标准函数let的原理是什么与真实场景使用 , 是否熟悉Kotlin内置标准函数let的原理是什么本质?
考察的知识点Kotlin内置标准函数let的原理是什么的概念在项目中使用与基本知识
考生应该如何回答你工作这么些年 , let内置标准函数一般用的很频繁吧 , let的原理是什么?
答:
1.在使用的时候 , 任何的类型 , 都可以.let出来使用 , 这是为什么呢? 因为标准let内置函数内部对泛型进行了let函数扩展 , 意味着所有的类型都等于泛型 , 所以任何地方都是可以使用let函数的 。
使用端的感受:
2.所有类型.let { 其实是一个匿名的Lambda表达式 , Lambda表达式的特点是 , 最后一行会自动被认为是返回值类型 , 所以在表达式返回Boolean , 那么当前的let函数就是Boolean类型 , 以此类推 。
fun main() { val r1 = \"Derry\".let { true
it.length
println(r1) val r2 = 123.let { 999
\"【${it】\"
println(r2)
// inline : 是因为函数有lambda表达式 , 属于高阶函数 , 高阶函数规范来说要加inline// <T R> T.let : T代表是要为T而扩展出一个函数名let(任何类型都可以 万能类型.let) ,R代表是Lambda表达式最后一行返回的类型// block: (T) -> R : Lambda表达式名称block 输入参数是T本身 输出参数是R 也就是表达式最后一行返回推断的类型// : R { : R代表是Lambda表达式最后一行返回的类型 , 若表达式返回类型是Boolean 那么这整个let函数的返回类型就是Booleaninline fun <T R> T.let(block: (T) -> R): R {
根据上面分析的两点使用感受 , 来分析他的原理:
1.inline : 是因为函数有lambda表达式 , 属于高阶函数 , 高阶函数规范来说要加inline
2.<T R> T.let : T代表是要为T而扩展出一个函数名let(任何类型都可以 万能类型.let) ,R代表是Lambda表达式最后一行返回的类型
3.block: (T) -> R : Lambda表达式名称block 输入参数是T本身 输出参数是R 也就是表达式最后一行返回推断的类型
4.: R { : R代表是Lambda表达式最后一行返回的类型 , 若表达式返回类型是Boolean 那么这整个let函数的返回类型就是Boolean
println(\"你${this.let在${System.currentTimeMillis()这个时间点调用了我\") /*contract {
callsInPlace(block InvocationKind.EXACTLY_ONCE)
*/
// 调用Lambda表达式
// 输入参数this == T == \"Derry\" / 123
// 输出参数:用户返回String类型 , 就全部是返回String类型
return block(this)
总结:Kotlin内置标准let函数 , 运用了 高阶函数特性与Lambda , 控制环节交给用户完成 , 用户在自己的Lambda表达式中 , 若返回Boolean , 整个let函数 与 Lambda返回 都全部是Boolean
【阿里巴巴|【Android大厂必问面试题】阿里4面Kotlin面试题解析】为了保证所有的类型都能正常使用let , 给泛型增加了扩展函数let , 所以所有的地方都可以使用let函数 。
相关经验推荐
- 酷睿处理器|11/12代酷睿+Win11封杀4K蓝光碟 播放软件厂商回应:无能为力
- Google|谷歌推出首批适用于Windows系统的Android游戏
- 阿里巴巴|Intel计划以代号Bonanza Mine的ASIC架构处理器跨入挖矿热潮
- |司马南炮轰联想的背后,导致联想产生危机的原因是什么?
- 科技创新|吐槽一下三星s21网络问题
- 华为手机|华为手机拍照不好看?新手必看指南
- 苹果|重夺智能手机头把交椅,iPhone为苹果贡献2000亿美元收入
- 华为|华为满足了我们的的民族自豪感,高端手机,不止外国人可以玩的溜
- 努比亚|小米和OV的定位就不同,配置控适合小米,追星族适合OV
- |过年还在宅家玩手机?不如来刷这个电工题库!考试惊艳所有人
