-
不可变性
-
引用透明
-
无副作用
-
高阶函数与lambda表达式
-
Monad结构
-
柯里化
-
模式匹配
-
智能类型推断
-
递归
-
并发安全
函数式编程有如下等式:
程序 = 可变性程序 + 不可变性程序
可变性程序 = 对象 + 依赖关系
不可变程序 = 纯函数 + 组合 (Monad结构)
Kotlin的语言特性对此都做了支持,相比于Java在组件化和响应式上Kotlin更加简洁、直观。
类型差异
Kotlin和Java类型上的差异,有类型声明差异和类型体系差异。
类型声明差异
val a: String = “I am Kotlin”
这与函数定义时返回类型,类继承,接口实现提供了一致的书写体验
fun sum(x: Int, y: Int): Int {
Java是类型前置的写法,定义方法时返回类型写在了前面,但是继承和实现是后置的。类型后置的好处:通过类型推导实现类型省略时一致的书写体验;Kotlin做到了三种场景符号一致,书写一致(类型推导)
类型体系差异
下图是Kotlin类型体系,Kotlin把基本数据类型统一成对象类型,形成了面向对象的继承体系。
Kotlin的瑕疵
kotlin的语言特性丰富而有力,带来了与Java的特性差异。任何事物都有正、反两面,kotlin也不例外。
1)多维数组需要通过嵌套的方式创建
val bytes = Array(3) { ByteArray(4) }
对比一下Java
byte[][] bytes = new byte[3][4];
相比Kotlin的,Java清晰简便多了
2)Kotli