Kotlin那些鲜为人知的秘密:1.基础入门(2)

字符串模板

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) }
复制代码

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"
    }
复制代码
相关文章
相关标签/搜索