整理学习kotlin过程中遇到的难点,记录下来,然后再理解理解。(新手写的博客,勿喷)
习惯用法:
扩展函数
fun String.spaceToCamelCase() { …… } "Convert this to camelcase".spaceToCamelCase()
If not null 缩写
val files = File("Test").listFiles() println(files?.size)
If not null and else 缩写
val files = File("Test").listFiles() println(files?.size)
If not null and else 缩写
val files = File("Test").listFiles() println(files?.size ?: "empty")
if null 执行一个语句
val data = …… val email = data["email"] ?: throw IllegalStateException("Email is missing!")
if not null 执行代码
val data = …… data?.let { …… // 代码会执行到此处, 假如data不为null }
返回类型为 Unit
的方法的 Builder 风格用法
fun arrayOfMinusOnes(size: Int): IntArray { return IntArray(size).apply { fill(-1) } }
返回类型为 Unit
的方法的 Builder 风格用法
fun arrayOfMinusOnes(size: Int): IntArray {
return IntArray(size).apply { fill(-1) }
}
单表达式函数
fun theAnswer() = 42
等价于
fun theAnswer(): Int {
return 42
}
单表达式函数与其它惯用法一起使用能简化代码,例如和 when 表达式一起使用:
fun transform(color: String): Int = when (color) {
"Red" -> 0
"Green" -> 1
"Blue" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
对一个对象实例调用多个方法 (with
)
class Turtle { fun penDown() fun penUp() fun turn(degrees: Double) fun forward(pixels: Double) } val myTurtle = Turtle() with(myTurtle) { // 画一个 100 像素的正方形 penDown() for(i in 1..4) { forward(100.0) turn(90.0) } penUp() }
Java 7 的 try with resources
val stream = Files.newInputStream(Paths.get("/some/file.txt")) stream.buffered().reader().use { reader -> println(reader.readText()) }
对于需要泛型信息的泛型函数的适宜形式
// public final class Gson { // …… // public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException { // …… inline fun <reified T: Any> Gson.fromJson(json): T = this.fromJson(json, T::class.java)
使用可空布尔
val b: Boolean? = …… if (b == true) { …… } else { // `b` 是 false 或者 null }
kotlin是门好语言,是门有前途的语言。