Kotlin Basic Learning - series 1
2018-04-17 本文已影响10人
swust_cp
最近从网上看到Google推送的31天学习Kotlin,觉得还不错,所以特此Mark下
-
处理null条件?可以使用elvis operator '?:'
val name: String = person.name ?: "unknown" val age: person.age ?: return
如果name不为null,返回name,否则返回“unknown”,如果age为null,则整个函数返回。
另外此处若在不为时有很多的逻辑需要处理,可以考虑使用.let或者.appy
-
格式化String?可以在variables和experssions前面添加'$'即可。对experssions求值时,使用'${experssion}'
val language = "Kotlin" // Kotlin has 6 characters val text = "$language has ${language.length} characters"
-
Android KTX在Android开发时,实现类似Kotlin自带的解构(destructuring)操作。
// 对应的值分别是255,255,0,0,变量名可以任意命名,但是顺序分别对应是a,r,g,b val (alpha, red, green, blue) = Color.RED // 只取前面两个值 val (left, top) = Rect(1, 2, 3, 4) val (x, y) = Point(100, 200) // Not from KTZ val (name, age) = Person("Peng", 8)
Destructuring Declarations - Kotlin Programming Languagekotlinlang.org
-
Kotlin使用'when'表达式代替Java中的switch语句,when可以match很多东西,如literal values,enums,ranges of numbers,你甚至可以调用arbitrary functions
class Train(val cargo: Number?) { override fun toString(): String { return when(cargo) { null, 0 -> "empty" 1 -> "tiny" in 2..100 -> "small" is Int -> "big int" else -> "$cargo" } } }
Control Flow: if, when, for, while - Kotlin Programming Languagekotlinlang.org
-
对于loops,在Kotlin中经常使用range experssions和destructuring
//循环从1到100 for (i in 1..100) {} //循环从100到1 for (i in 100 downTo 1) {} //循环从1到array.size,不包含until后面的数[1,array.size),每隔一个 val array = arrayOf("a", "b", "x") for (i in 1 until array.size step 2){} //destructuring an array with index and element for ((index, element) in array.withIndex()){} //map的循环 val map = mapOf(1 to "one", 2 to "two") for ((key, value) in map){}
Destructuring Declarations - Kotlin Programming Languagekotlinlang.org