首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Kotlin日常高效编程技巧和作用域函数的使用。

  • 25-04-16 14:21
  • 3306
  • 7681
juejin.cn

高效编程

循环优化

  1. 使用 until 关键字
Kotlin
代码解读
复制代码
## Kotlin 提供了 `until` 关键字,用于创建不包含上限的范围(Range),增强代码可读性与安全性。 for (i in 0 until list.size) {     println("Index $i contains ${list[i]}") }
  1. 使用 indices关键字
Kotlin
代码解读
复制代码
## `indices` 属性自动生成集合的索引范围,避免手动调整或计算最后一个索引。 for (i in list.indices) {     println("Index $i contains ${list[i]}") }
  1. 增强表现力:解构声明
Kotlin
代码解读
复制代码
## 利用 Kotlin 的解构声明,可以在循环中同时访问索引与元素。 for ((index, entity) in list.withIndex()) {     println("Index $index contains $entity") }
  1. 使用 forEachIndexed 函数
Kotlin
代码解读
复制代码
## `forEachIndexed` 函数提供了简洁的方式对列自动产物操作。 list.forEachIndexed { index, entity ->     println("Index $index contains $entity") }

集合去重

1、重复项去重

Kotlin
代码解读
复制代码
## 使用 `distinct` 函数去重集合中的重复项。 ## 返回仅包含给定数组中不同元素的列表。 val objects = listOf("apple", "orange", "watermelon", "peach", "peach") val uniqueObjects = objects.distinct() println(uniqueObjects) // [apple, orange, watermelon, peach] ## 使用`Set`特性(只能包含唯一的元素),将集合转换为 `Set` val uniqueSet = objects.toSet() println(uniqueSet) // [apple, orange, watermelon, peach]

2、使用 distinctBy 函数定制化去重

Kotlin
代码解读
复制代码
## 如忽略大小写等特定条件来去重 val uniqueObjects = objects.distinctBy { it.lowercase() } println(uniqueFruits) // [apple, orange, watermelon]

完全限定名

Kotlin
代码解读
复制代码
## 如在一个类中有同名的成员函数和顶层函数,可以使用完全限定名来调用顶层函数,以消除命名冲突。 ## 使用完全限定名可以明确地调用特定范围内的函数或属性。 package com.wan618.demo fun searchHotel() {     // 顶层函数实现 } class HotelManage {     fun searchHotel() {         // 成员函数实现     }     fun findHotel() {         com.wan618.demo.searchHotel() // 调用顶层函数     } }

Elvis 操作符 ?:

Kotlin
代码解读
复制代码
## 简化代码中对可空值的处理。 fun getValueFromApi(): String? {     return null  } ## 除返回默认值外,还可以抛出异常处理。 val result = getValueFromApi() ?: throw IllegalArgumentException("Value cannot be null")

获取代码执行时间

Kotlin
代码解读
复制代码
## 使用`measureTimeMillis` 函数来测量代码执行时间。 val time = measureTimeMillis {     getLocationInfo() } println("Execution took $time ms") ## 如需同时获取返回值与执行时间,可以使用 `measureTimedValue` 函数。 val (result, time) = measureTimedValue {      getLocationInfo() } println("Execution took $time ms and result is $result")

作用域函数(let、run、with、apply、also)

五个函数主要的应用场景如下图所示(图片来源Google工程师) WeChat803df6a45847ad7a176c905a46ee1af9.jpg

返回值的区别

  • apply和also: 返回上下文对象自己
  • let、run及with:返回代码块结果

上下文对象引用的区别

区别:this 可以省略而 it 不可以

  • run、with及apply:通过关键字 this 来引用上下文对象
  • let和also:通过 it 来访问上下文字对象

函数原型上的区别

Kotlin
代码解读
复制代码
## `let`、`apply`、`also`:函数原型为扩展函数,它们必须需要一个对象才能调用。 User("David").apply { sex = "man" age = 18 } ## `with`:函数原型不是扩展函数,可直接被调用。 val names = mutableListOf("David","Mary","Paul") wiht(names) { val firstItem = first() val lastItem = last() printIn("First item:$firstItem, Iast item:$lastItem") } ## `run`:既有扩展函数又有非扩展函数的实现方式,以上两种方式都可调用。

五个作用域函数的不同点如下表所示:

函数对象引用返回值是否扩展函数
letitLambda 表达式结果是
T.run{}thisLambda 表达式结果是
run{}-Lambda 表达式结果不是:调用无需上下文对象
withthisLambda 表达式结果不是:上下文对象作为参数
applythis上下文对象是
alsoit上下文对象是
注:本文转载自juejin.cn的QING618的文章"https://juejin.cn/post/7451446336970801191"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top