字符串模板
Kotlin中允许字符串中包含“$”开头嵌入表达式。
在Java中我们可能需要这样定义来拼接字符串:
String message = "n = " + n;
但是在Kotlin中,我们可以直接使用“$”拼接:
val message = "n = $n"
很显然,使用字符串模板,可以提高我们的开发效率。
条件表达式
这是一个普通的条件判断语句。
fun maxOf(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}
在Kotlin中,if表达式具有返回值,故可以表述成如下方式:
fun maxOf(a: Int, b: Int) = if (a > b) a else b
关于空安全
空安全性是Kotlin的一大特色,在Java中,NPE(NullPointerException)是常客,但是在Kotlin中,我们将会看到NPE。
对于可为空的变量,我们必须用“?”将其特殊声明为一个具有空值的变量:
var b: String? = "abc"
而正常使用是这样的
var b: String = "abc"
如果我们直接调用b的话就会报错
val l = b.length()
那么,我们该如何使用可空变量呢?
我们可以使用安全操作符"?."对其进行方法调用,Like this:
b?.length()
如果b为空,则返回空;否则,调用b.length()。
为什么要使用空安全操作符呢?
这使得我们解决了判空的问题,与“!= null”永远说再见,而且,空安全符在链式调用中会显得非常优美。
bob?.department?.head?.name
安全转换
在Java中,类型转换错误就会产生ClassCastException,而在Kotlin中,我么你可以通过安全转换 "as?" 来避免这个问题。
val aInt: Int? = a as? Int
如果转换失败,则返回空,否则返回正确数据。
类型检查
在Java中,校验一个类型可以使用"instanceof",在Kotlin中,我们可以使用"is"
fun getStringLength(obj: Any): Int? {
if (obj is String) {
return obj.length
}
return null
}
集合
在Kotlin中,可以使用in操作符对集合进行迭代遍历。
for (item in items) {
println(item)
}
Kotlin更支持lambda对集合进行过滤等操作;
fruits
.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { println(it) }
for 循环
在Kotlin中,for循环使用in关键字进行遍历。
val items = listOf("apple", "banana", "kiwi")
for (item in items) {
println(item)
}
while 循环
这是while循环的一个简单示例
val items = listOf("apple", "banana", "kiwi")
var index = 0
while (index < items.size) {
println("item at $index is ${items[index]}")
index++
}
when 表达式
在Kotlin中使用When表达式来代替Switch语句,一个简单的示例如下:
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}