Kotlin在Android开发中那些让人舒适的地方(2)

// print :a - 1 b - 2

for ((key, value) in map) {

print(“$key - $value”)

}

/ 强大易用的迭代器 /


遍历集合是基操,对于一些稍微复杂一点的数据逻辑,Java实现起来并不友好。当然后面有了RxJava来进行补救,不过Kotlin做的似乎要更好一点。(这里就不讨论Kotlin的集合框架架构了)

val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)

list.forEach { print(it) }

// 映射

val listUp = list.map { it + 2 }

// 过滤

val listFilter = list.filter { it % 2 == 0 }

// asSequence 懒处理 map filter中都存在遍历操作 asSequence可以将它们合并起来 只存在一次遍历 提升性能

val listMore = list.asSequence().map { it + 2 }.filter { it % 2 == 0 }.toList()

asSequence 对提升效率大有裨益,其他的操作就不一一列举了。

/ 默认参数 /


重载是很比较常见的操作,但是有时候这种方式会出现很多相同的模板代码。Kotlin的默认参数,可以给参数指定默认值,并且在调用的时候像给变量赋值一样给参数赋值而不用像Java一样非要按照顺序去传值。并且因为具有默认值的原因,所以调用的时候可以根据具体情况传递参数,更加灵活、更加易读和简洁。

class Point(val x: Float = 0F, val y: Float = 0F)

val x = Point(x = 10F)// x 10 y 0

val y = Point(y = 10F)// x 0 y 10

val xy = Point(x = 10F, y = 10F)// x10 y10

/ DataClass /


开发中Bean文件是必不可少的,但是Java的Bean文件大部分都是模版代码,虽然有插件自动生成,但是依然会觉得比较繁琐,Kotlin可以将这些类申明为Data类,这些类会默认实现equals(),hashCode(),toString() 和copy() 方法,从几十行Java代码简洁到几行代码,Kotlin只用声明 一个data class。

data class Person(

val name: String,

val age: Int,

val sex: Int

){

//…

}

/ 简短强大的标准函数库 /


这是Kotlin提供的函数库,使用后会简化不少的样板代码。稍微不一样的地方是它们的this和it各自指向不一样,以及返回值得不一样,使用得时候根据具体得情况来就可以了。

run

val str = “a”

val res = str.run{

// this 指向 “a” it没有指向

// 可以直接访问对象得属性

print(length)

1 // 最后一行返回值为1

}

let

val str = “a”

val res = str.let{

// this 指向当前class

// it 指向a

print(it.length)

“let” // 返回值"let"

}

with

val res = with(user){

// this 指向user it无指向

println(age)

println(name)

“with” // 返回值

}

apply

val str = “a”

val res = a.apply{

// this指向a it 无指向

2 // 返回值

}

/ 通吃的when /


对于Java的switch再熟悉不过,但是它使用起来有比较多的限制,有时候面对复杂的逻辑会显得乏力。Kotlin的when表达式可以匹配几乎任何东西(字面值,枚举,数字,范围,类型,表达式,甚至函数(kotlin函数至上)) 简单感受下:

fun whenTest(number: Number?): String {

return when (number) {

null, 0 -> “empty”

1 -> “tiny”

in 2…5 -> “small”

is Long -> “big number”

else -> “unKnow”

}

}

当然有时候使用when会有一些比较麻烦的事情,比如对else情况的处理,因为你的程序中明明只有这么几种情况,但是你却不得不写上关于else的情况处理,这样的代码让人觉得不安心,也降低了可读性,这个时候可以结合Koltin的密封类来处理,比如对网络情况的回执,对错误的处理,Android对RecyclerView的适配中多中ViewHolder的处理。

// 密封类的存在让整个过程中可能出现的情况更加严谨

sealed class NetWorkResult

data class Success(val resJson: String) : NetWorkResult()

data class Failure(val error: Error) : NetWorkResult()

// 代码更加易读

fun netWorkTest(result: NetWorkResult) {

when (result) {

is Success -> {

showResult(result.resJson)

}

is Failure -> {

showError(result.error)

}

}

}

/ 扩展 /


扩展可能是最受欢迎的一个特性,因为它可以让你少写很多工具类,并且让代码看起来更易读,更简洁。比如做一个防止重复点击的操作。

// 扩展点击事件属性(重复点击时长)

var T.lastClickTime: Long

set(value) = setTag(1766613352, value)

get() = getTag(1766613352) as? Long ?: 0

// 重复点击事件绑定

inline fun T.singleClick(time: Long = 800, crossinline block: (T) -> Unit) {

setOnClickListener {

val currentTimeMillis = System.currentTimeMillis()

if (currentTimeMillis - lastClickTime > time || this is Checkable) {

lastClickTime = currentTimeMillis

block(this)

}

}

}

/ 简单的Bundle快速的Parcelable /


一开始我并没有注意到这个特性,因为项目是组件化开发,在跳转传值上都采用了ARouter,但是当我发现Kotlin对这个做的改造的时候还是非常开心~

// 创建Bundle 和创建map 一样优雅

val bundle = bundleOf(

“KEY_ONE” to 1,

“KEY_TWO” to 2L,

“KEY_THREE” to true

)

// 再也不用写繁琐的Parcelable实现

@Parcelize

data class Person(val name:String):Parcelable

最后

总而言之,成功是留给准备好的人的。无论是参加什么面试,都要做好充足的准备,注意好面试的礼仪和穿着,向面试官表现出自己的热忱与真诚就好。即使最后没有过关,也要做好经验的总结,为下一次面试做好充足准备。

这里我为大家准备了一些我在面试后整理的面试专题资料,除了面试题,还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家,希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

毕竟不管遇到什么样的面试官,去面试首先最主要的就是自己的实力,只要实力够硬,技术够强,就不怕面试拿不到offer!

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
时间来学习。**

毕竟不管遇到什么样的面试官,去面试首先最主要的就是自己的实力,只要实力够硬,技术够强,就不怕面试拿不到offer!

[外链图片转存中…(img-h9Y04In9-1715671019665)]

[外链图片转存中…(img-4PUPEAE4-1715671019667)]

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

[外链图片转存中…(img-GL6SpbGc-1715671019668)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值