Kotlin中容许字符串中包含“$”开头嵌入表达式。java
在Java中咱们可能须要这样定义来拼接字符串:安全
String message = "n = " + n;
复制代码
可是在Kotlin中,咱们能够直接使用“$”拼接:app
val message = "n = $n"
复制代码
很显然,使用字符串模板,能够提升咱们的开发效率。ui
这是一个普通的条件判断语句。this
fun maxOf(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}
复制代码
在Kotlin中,if表达式具备返回值,故能够表述成以下方式:spa
fun maxOf(a: Int, b: Int) = if (a > b) a else b
复制代码
空安全性是Kotlin的一大特点,在Java中,NPE(NullPointerException)是常客,可是在Kotlin中,咱们将会看到NPE。code
对于可为空的变量,咱们必须用“?”将其特殊声明为一个具备空值的变量:开发
var b: String? = "abc"
复制代码
而正常使用是这样的字符串
var b: String = "abc"
复制代码
若是咱们直接调用b的话就会报错get
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) }
复制代码
在Kotlin中,for循环使用in关键字进行遍历。
val items = listOf("apple", "banana", "kiwi")
for (item in items) {
println(item)
}
复制代码
这是while循环的一个简单示例
val items = listOf("apple", "banana", "kiwi")
var index = 0
while (index < items.size) {
println("item at $index is ${items[index]}")
index++
}
复制代码
在Kotlin中使用When表达式来代替Switch语句,一个简单的示例以下:
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
复制代码