其次,switch中的每个case条件都要在最后主动加上一个break,否则执行完当前case之后会依次执行下面的case,这一特性可能导致许多奇怪的bug,就是因为有人忘记添加break,执行了多余的case语句。
而Kotlin中的when语句不仅解决了上述痛点,还增加了许多更为强大的新特性。when运行原理就是将它的参数依次和所有的分支条件顺序比较,直到某个分支满足条件,when语句允许传入一个任意类型的参数,可以是具体的值或某个类型;而when的分支条件语句可以是判断某个具体的值、或着是判断是否为某个类型、或者是判断是否在某个区间。当所有分支语句都不满足时,可以使用一个else语句执行匹配失败的流程,类似于Java的switch中的default语句。
下面是一个完整的示例:
when (x) {
1 -> print(“x == 1”)
2 -> print(“x == 2”)
is String -> print(“x是一个string”)
in 1…4 -> print(“在1到4之间”)
else -> {
print(“x 不是 1 ,也不是 2”)
}
}
when语句的基本用法就是这些,但其实when语句还有一种不带参数的用法,虽然这种用法可能不太常用,但有的时候却能发挥很强的扩展性。这种用法是将判断的表达式完整地写在when的结构体当中。如下所示:
when {
x == 1 -> print(“x == 1”)
x == 2 -> print(“x == 2”)
x is String -> print(“x是一个string”)
x in 1…4 -> print(“在1到4之间”)
else -> {
print(“x 不是 1 ,也不是 2”)
}
}
循环控制
Java中主要有两种循环语句:while循环和for循环。而Kotlin也提供了while循环和for循环,其中while循环不管是在语法还是使用技巧上都和Java中的while循环没有任何区别,而Kotlin在for循环方面做了很大幅度的修改,Java中最常用的for-i循环在Kotlin中直接被舍弃了,而Java中另一种for-each循环则被Kotlin进行了大幅度的加强,变成了for-in循环,在了解for-in循环之前,需要先了解一下kotlin区间的概念。
区间
kotlin中可以使用..
、until
、 downTo
表示一个区间范围, ..
和until
是从小到大,downTo
是从大到小。
..
表示两个端点都在区间的升序闭区间,如:
val range = 0…5
range的取值范围为: 0 1 2 3 4 5.
until
表示左闭右开升序区间,如:
val range = 0 until 5
range的取值范围为: 0 1 2 3 4.
downTo
表示两个端点都在区间的降序闭区间,如:
val range = 0 downTo 5
range的取值范围为: 5 4 3 2 1 0.
for-in循环
默认情况下,for-in循环每次执行循环时会在区间范围内递增1或递减1,相当于Java for-i循环中的i++或i–效果,而如果要跳过其中的一些元素,可以使用step关键字:step表示步长,默认step为1,现在给step设置为2,如下示例
for (i in 1…6 step 2) {
…
}
i的取值范围为: 1 3 5.
for-in循环除了可以对区间进行遍历之外,还可以用于遍历数组和集合,下面是一些for-in循环示例:
val items = listOf(“实”, “力”, “K”, “O”)
//实力KO
for (item in items) {
print(items.get(item))
}
//实力KO
for (index in items.indices) {
print(items.get(index))
}
//实力KO
for ((index, value) in items.withIndex()) {
print(value)
}
//实力KO
items.forEach {
print(it)
}
while循环
while循环和Java中的while循环一样, 语法如下:
while (条件) {
执行逻辑
}
当满足条件时就会执行结构体中的逻辑,然后再次执行判断条件,直到不满足条件才结束while循环,如下示例:
val items = listOf(“实”, “力”, “K”, “O”)
var index = 0
while (index < items.size) {
print(items.get(index))
index++
}
//当index小于items的size时, 执行index++,一直到index=items.size时结束
同Java一样,kotlin也支持do while循环,语法如下:
do {
执行逻辑
} while (条件)
do while循环与上面的while循环的区别在于do while循环会先执行一次结构体中的逻辑,然后再判断条件是否满足进行下一次循环, 而while循环是先判断条件是否满足再执行逻辑,所以do while循环至少会执行一次结构体逻辑, 而while至少执行0次结构体逻辑。
跳出循环
Kotlin 有三种结构化跳转表达式:
-
return, 默认从最直接包围它的函数或者匿名函数返回。
-
break, 终止最直接包围它的循环。
-
continue, 继续下一次最直接包围它的循环。
在 Kotlin 中任何表达式都可以用标签(label)来标记。 标签的格式为标识符后跟 @ 符号,例如:abc@、fooBar@
loop@ for (i in 1…100) {
最后
光有这些思路和搞懂单个知识的应用是还远远不够的,在Android开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,**这些都是属于Android开源框架设计思想的。如下图所示:
这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想PDF文档,内容详细,把Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。
由于文档内容过多,篇幅受限,只能截图展示部分
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!!!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
etpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。**
由于文档内容过多,篇幅受限,只能截图展示部分
[外链图片转存中…(img-K3Zd8vhe-1715577877401)]
[外链图片转存中…(img-UlM6NscM-1715577877413)]
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!!!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!