看例子代碼,學kotlin語法(1.2)(基本語法)

本人喜歡學習一門語言,在有一定了解之後,從他們的簡單demo開始,一邊學習,一邊敲代碼。每個人都有適合自己的一套學習方法,取其精華,去其糟粕。

相關鏈接
在線學習
Kotlin 官方文檔
中文站(更新到 1.1):https://www.kotlincn.net/
網址(更新到 1.0.3):http://tanfujun.com/kotlin-web-site-cn/
Kotlin 中文論壇:https://www.kotliner.cn/
《Kotlin for android developers》中文版翻譯
語言學習網址:RUNOOB備註:裏面的虛擬機模擬適合小demo調試,程序太大還是建議到AS中。

1、使用條件表達式if

/**
 * 比較a、b的較大值
 * if (a > b)是一個表達式,返回一個值,然後賦值給max函數返回值
 */
fun main(args: Array<String>) {
    println(max(args[0].toInt(), args[1].toInt()))
}

fun max(a: Int, b: Int) = if (a > b) a else b

2、空檢查(?)

/**
 * 將引用顯示標記爲可爲空,才能取到null的值
 */
package multiplier

// 如果str不包含數字,返回null
fun parseInt(str: String): Int? {
    try {
        return str.toInt()
    } catch (e: NumberFormatException) {
        println("One of the arguments isn't Int")
    }
    return null
}

fun main(args: Array<String>) {
    if (args.size < 2) {
        println("No number supplied");
    } else {
        val x = parseInt(args[0])
        val y = parseInt(args[1])

        // We cannot say 'x * y' now because they may hold nulls
        if (x != null && y != null) {
            print(x * y) // Now we can
        } else {
            println("One of the arguments is null")
    }
    }
}

3、is 運算符

/**
  * is運算符檢查是否是實例
  * 如果是不可變的局部變量或屬性,則可不用使用is
 */
fun main(args: Array<String>) {
    println(getStringLength("aaa"))
    println(getStringLength(1))
}

fun getStringLength(obj: Any): Int? {
    if (obj is String)
        return obj.length // 不需要強制轉換爲String
    return null
}

4、while

/**
 * `while` and `do..while` 與java的差不多
 */
fun main(args: Array<String>) {
    var i = 0
    while (i < args.size)
        println(args[i++])
}

5、for循環

/**
 * for循環提供迭代器所有的內容
 */
fun main(args: Array<String>) {
    for (arg in args)
        println(arg)

    // or
    println()
    for (i in args.indices)
        println(args[i])
}

6、範圍判斷語句

/**
 * 判斷數字在範圍內
 * 判斷數字是否超出範圍
 *判斷集合是否包含對象
 * See http://kotlinlang.org/docs/reference/ranges.html#ranges
 */

fun main(args: Array<String>) {
    val x = args[0].toInt()
    //數字是否在範圍內
    val y = 10
    if (x in 1..y - 1)
        println("OK")

    //迭代範圍
    for (a in 1..5)
        print("${a} ")

    //數字是否超出範圍
    println()
    val array = arrayListOf<String>()
    array.add("aaa")
    array.add("bbb")
    array.add("ccc")

    if (x !in 0..array.size - 1)
        println("Out: array has only ${array.size} elements. x = ${x}")

    //數組是否包含對象
    if ("aaa" in array) // collection.contains(obj)被調用
        println("Yes: array contains aaa")

    if ("ddd" in array) // collection.contains(obj) 被調用
        println("Yes: array contains ddd")
    else
        println("No: array doesn't contains ddd")
}

7、when

/**
 * when子式可以是常量、變量、返回數值的表達式、
 * 返回Boolean值的表達式,強大到用來替換if...else if
 */

fun main(args: Array<String>) {
    cases("Hello")
    cases(1)
    cases(0L)
    cases(MyClass())
    cases("hello")
}

fun cases(obj: Any) {
    when (obj) {
        1 -> println("One")
        "Hello" -> println("Greeting")
        is Long -> println("Long")
        !is String -> println("Not a string")
        else -> println("Unknown")
    }
}

class MyClass() {
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章