// print :0 1 2 3 4 5 6 7 8 9 10

for (i in 0…10) {

print("$i ")

}

// print :10 9 8 7 6 5 4 3 2 1 0

for (i in 10 downTo 0) {

print("$i ")

}

// print :0 2 4 6 8 10

for (i in 0…10 step 2) {

print("$i ")

}

// print :0 1 2 3 4 5 6 7 8 9

for (i in 0 until 10) {

print("$i ")

}

val map = mapOf(“a” to 1, “b” to 2)

// print :a - 1 b - 2

for ((key, value) in map) {

print(“$key - $value”)

}

5强大易用的迭代器

====================================================================

遍历集合是基操,对于一些稍微复杂一点的数据逻辑,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 对提升效率大有裨益,其他的操作就不一一列举了

6默认参数

================================================================

重载是很比较常见的操作,但是有时候这种方式会出现很多相同的模板代码。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

7Data Class

======================================================================

开发中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

){

//…

}

8简短而强大的标准函数库

=======================================================================

这是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 = str.apply{

// this指向str it 无指向

a // 返回值

}

9通吃的when

===================================================================

对于Java的Stwich再熟悉不过,但是它使用起来有比较多的限制,有时候面对复杂的逻辑会显得乏力。

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)

}

}

}

作者2013年从java开发,转做Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。

参与过不少面试,也当面试官 面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!

我整理了一份阿里P7级别的最系统的Android开发主流技术,特别适合有3-5年以上经验的小伙伴深入学习提升。

主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你想深入系统学习Android开发,成为一名合格的高级工程师,可以收藏一下这些Android进阶技术选型

我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

Java语言与原理;
大厂,小厂。Android面试先看你熟不熟悉Java语言

高级UI与自定义view;
自定义view,Android开发的基本功。

性能调优;
数据结构算法,设计模式。都是这里面的关键基础和重点需要熟练的。

NDK开发;
未来的方向,高薪必会。

前沿技术;
组件化,热升级,热修复,框架设计

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多,CodeChina上可见;

当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。

不出半年,你就能看出变化!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多,CodeChina上可见;

当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。

不出半年,你就能看出变化!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐