Kotlin五种思维模式
概述函数思维表达式思维不变性思维 Kotlin五种思维模式 概述
学习Kotlin需要做五种思维转变,即:函数思维、表达式思维、不变性思维、空安全思维、协程思维。
函数思维在Kotlin中,函数式一等公民。
函数可以独立于类之外;函数可以作为参数和返回值;函数可以像变量一样,即函数引用。
fun foo() = listOf(1, 2, 3, 4).filter { it % 2 == 0 }
表达式思维表达式,是一段可以产生值得代码;语句,是一句不产生值的代码。
Kotlin的类型系统让大部分语句都变成了表达式,同时也让无返回值的函数有了类型。
//when表达式fun foo(data: Any?): Int { val i = when (data) { is Number -> data.toInt() is String -> data.length else -> 0 } return i}
//函数表达式val f: (String) -> Unit = ::printlnf("hello world")
不变性思维Kotlin将不变性的思维发挥到极致,开发者需要定义一个变量时,需要明确指明这个变量是可变的(var),还是不可边的(val)。在定义集合时,需要指明这个集合是可变的(MutableList),还是不可变的(List)。
尽可能使用条件表达式消灭var。由于Kotlin当中大部分语句都是表达式,可以借助这种思路减少var变量的定义。使用数据类存储数据,消灭数据类的可变性。充分发挥Kotlin数据类的优势,借助copy方法,实现不变性。尽可能对外暴露只读集合。根据开闭原则,尽可能对修改封闭。只读集合底层不一定是不可变的,警惕Java代码中的只读集合访问行为。val并不意味着绝对的不可变。
//消灭var,推荐使用valval i = when (data) { is Number -> data.toInt() is String -> data.length else -> 0}
//推荐用数据类存储数据,消灭可变性data class Person(val name: String?, val age: Int?)fun changeName(person: Person, newName: String): Person = person.copy(name = newName)fun changeAge(person: Person, newAge: Int): Person = person.copy(age = newAge)
//尽可能对外暴露只读集合class Model { private val _data: MutableList
//通过自定义get()方法,打破了val的不变性object Model { val data get() = Random.nextInt()}