1. 程式人生 > >Kotlin基礎之區間和型別轉換

Kotlin基礎之區間和型別轉換

fun main(args: Array<String>) {

    // 1.區間可以使用.. 表示,  注意..在使用的時候要保證起始值要小於結束值
    // 輸出1 2 3 4
    for (i in 1..4) {
        println(i)
    }
    // 沒有輸出, 因為起始值大於結束值了
    for (i in 4..1) {
        println(i)
    }

    println("=============")
    // 同樣適用於char型別
    for (i in 'a'..'d') {
        println(i)
    }
    for (i in 'd'..'a') {
        println(i)
    }

    println("=============")
    // 2.如果想要從大到小, 可以使用downTo
    for (i in 4 downTo 1) {
        println(i)
    }

    // 3.如果想要一個從1到10但不包含10的區間, 可以使用until關鍵字
    // 列印 1 2 3 4 5 6 7 8 9
    for (i in 1 until 10) {
        println(i)
    }

    // 4.使用step關鍵字 可以指定步長
    // 輸出1 3 5 7 9
    for (i in 1..10 step 2) {
        print(i)
        print(" ")
    }

    println()
    // 可以定義一個區間變數
    var range = 1..10
    // range同樣含有很多可用的屬性
    var first = range.first
    var last = range.last
    var start = range.start
    var step = range.step

    println("first : " + first)
    println("last : " + last)
    println("start : " + start)
    println("step : " + step)
    println("是否包含2, ${range.contains(2)}")
}

上述程式碼的執行情況如下:

1
2
3
4
=============
a
b
c
d
=============
4
3
2
1
1
2
3
4
5
6
7
8
9
1 3 5 7 9 
first : 1
last : 10
start : 1
step : 1
是否包含2, true

主要就是對:   .. ,  downTo, until以及區間的一些屬性做了簡單的測試和解讀


關於Kotlin的型別轉換, 舉個簡單的例子:

/**
 * Any就表示能接收任意型別的引數
 * Any是任何Kotlin類的父類
 * Int? 表示返回結果為Int型, 也可為null, 如果不加? 則不能返回null
 * The root of the Kotlin class hierarchy. Every Kotlin class has [Any] as a superclass.
 */
fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // 這裡實際已經被轉化成了String型別, 可以直接使用String的length屬性
        println(obj.javaClass)
        println(obj.substring(1))
        return obj.length
    }
    println(obj.javaClass)
    return null
}

fun getStringLength2(obj: Any): Int? {
    if (obj !is String) {
        println(obj.javaClass)
        return null
    }
    // 這裡實際已經被轉化成了String型別, 可以直接使用String的length屬性以及其他的屬性如substring
    println(obj.javaClass)
    println(obj.substring(1))
    return obj.length
}

fun getStringLength3(obj: Any): Int? {
    // 也可以直接在 && 右邊就把obj當作String來進行操作
    if (obj is String && obj.length > 0) {
        return obj.length
    }
    return null
}


fun main(args: Array<String>) {
    println(getStringLength("1111111"))
    println(getStringLength(123))
    println(getStringLength('a'))
    println(getStringLength2("1234567"))
    println(getStringLength3("890"))
}

對應的輸出結果為:

class java.lang.String
111111
7
class java.lang.Integer
null
class java.lang.Character
null
class java.lang.String
234567
7
3
        Ktolin的自動型別轉換實際就是如果使用is 關鍵字做了判斷, 那麼在對應的邏輯分支中該變數就會自動轉化成對應的資料型別, 也就是可以直接把該變數當作對應的型別進行操作, 不需要再顯示的轉換型別