本来是没打算写这篇的,网上这么多 kotlin 的学习文章了,跟着学就行了,没必要自己在写了总结了,但是吧,初步学习 kotlin 再使用后,写出来的还是 java 样式的 kotlin 代码,看别人的 kotlin 写的 demo 居然看不懂,我去了,这才知道 kotlin 学习不能光知道基础语法啊,还是的深入学习 kotlin 期中的特点才行,这不又深入学习的一番,领略了下函数式编程,高阶函数的味道,感触和学习自来哦很多,不写笔记是不行了呀 ~
说在开头
kotlin 上手很简单,因为可以完美支持 java ,和 java 比较像的缘故,我们熟悉下 kotlin 的语法,1-2天就能写出 java 语法式的 kotlin 代码了,但是我们绝对不能只不如此,kotlin 本身的高级特性代表着语言的发展趋势,本身也是很简单,高效的,我们必须真正熟悉 kotlin 自身的写法,不要抗拒,拥抱 kotlin,零碎东西不少,但是我们总结一下,平时多用用,也就熟悉了
我对于 kotlin 的问题是,我不是知道很多高级特性的应用场景,这是个大问题,不知道用在何处又怎么能真正理解,通惠贯通呢~
对于 kotlin 这门语言的特点,我是非常推荐大家去看看 2017 北京 GDG _ 语言选型 这个演讲的,非常 Nice ,相信看过的同学都会对如何考量一门语言有些心得的
java 毕竟30岁了,虽然一直在改变,但是底层的东西很难改,再说大家也不会用太新的 SDK ,这些年语言的发展出现了一些新的语言特性:函数式编程、Lambda 表达式、流式API、高阶函数、空指针安全,协程,这些 Kotlin 都有体现,作为移动端开发,随着 android 下一代的临近,Flutter 的横空出世,java 离开我们的日子不远了,新接触的语言必然会包含有上面这些新的语言特性,代表着编码风格也是会大幅度变化的,kotlin 作为一个向主流语言的学习过度我个人认为还是非常恰当的,就算 Flutter 以后我们用 Dart 了,现在取学习 kotlin 也是不亏的
函数式编程
kotlin 的特点是既支持面向对象又支持函数式编程,仔细体味 kotlin 的变成风格,虽未强制但是还是在引导,推荐我们走向函数式编程的道路,java 太老了,就算是 java 也在往函数式编程上靠了,所以拥抱变化吧,世界既然是这么发展的,自然有其道理,我们接受新思想,变化代码风格,寻找优点,适用变化,变为己用就好了
我们理一理语言变化的历程,能更好的理解函数式的思路:
-
从机器码 -> 汇编 -> 编程语言的出现
010101101 这就是机器码,要是这么编程,NM 要死的心都有了,实在是不友好,太难了,之后又出现了汇编,但是也不友好,最后各种变成语言出现啦,这下简单多了,语言把我们写的编译成机器码,然后交给硬件取运行
-
从面向过程到面向对象
c 是面向过程的,一切都得告诉机器怎么来,一步一步的,学习起来也是很难,没看学 c 的一上手时都哭天喊地的吗,后来面向对象兴趣了,参考自然界的法则,把任务事务都看是对象,把 c 中的那些代码过程根据逻辑包装成一个个方法,然后我们通过组合管理对象间的管理,来完成 c 的任务,好比是把纷乱的管道变成积木,我们搭积木可是让整个过程简单多了,更容易理解,更容易编写
-
从命令式编程到函数式编程
语言的变化是越来越简单,越来越逻辑话的,如果说面向对象是把 C 中的方法根据逻辑包装成一个个的对象的话,那么函数式编程比面向对象更简单,面向对象还的包装成对象,对象里写方法,函数式编程直接把这一段段方法看成对象,把纷乱的水管世界变成一条直线的,根据数据处理流程顺序组合把一段段水管拼接起来。面向对象最贴近显示世界,最符合人类的思维逻辑,所以面向对象的地位不容动摇,函数式编程是面对数据产生和处理这个特定领域出现的思维,可以让代码变得更直接,更直观,更简单,最好的例子就是 rxjava ,时下的思路使用面向对象处理业务,框架之间的逻辑,用函数式来处理数据,消息
koltin 允许我们把一个函数作为对象来使用,同样的也能在函数里把另一个函数作为参数传进来使用,这样我们就不必持有另一个对象的引用了,方便很多,我觉得也是 kotlin 和 java 最大的区别,函数式对象有很多扩展玩法,也是出上手 kotlin 同学难看懂的,但同时也是非常有意思的,学 kotlin 必学 函数式对象
学习资源:
付费视频:
* 全网首门-Kotlin入门与进阶上手科普,必看:
* 写给Android开发者的Kotlin入门
* 全民Kotlin:Java我们不一样我的学习笔记:
* kotlin - 基础语法
* kotlin - 函数(对象函数/代码补全)
* kotlin - 高级特性
* kotlin - 代码片段
* kotlin - Coroutine 协程kotlin 的静态问题
* kotlin - 实现静态的几种方式详解-
asSequence 序列
在大数据处理时,序列要比集合性能好的多,集合的任务操作符,比如 map,filter 每次操作都会生成一个新的集合,在数据量很大时这样性能是由问题的,而序列就不会,序列会一个个的发射数据,每个数据都会经过所有的变换操作,然后才是下一个数据,具体的请看下面的文章,讲的非常清晰,还有配图: 其他文章:
* [译]Kotlin中是应该使用序列(Sequences)还是集合(Lists)?
* Kotlin 泛型