1. 程式人生 > >Kotlin學習(三)—— 基本型別,包,控制流:if、when、for、while,Break和continue

Kotlin學習(三)—— 基本型別,包,控制流:if、when、for、while,Break和continue

一.基本型別

Kotlin的數字表現,如下

  • Double 64
  • Float 32
  • Long 64
  • Int 32
  • Short 16
  • Byte 8

這些就是全部的定義數字的方式了,而我們一般的寫法也和JAVA類似

  • 十進位制: 10086
  • 十六進位制:0x0F
  • 二進位制: 0b00001011
  • Long型別:10086L
  • Float型別:10086f
  • Double型別:100.86

同時,Kotlin上有一個下劃線的定義,可以讓程式碼的可讀性更加的強,我們來看下

fun main(args: Array<String>) {
    val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L val socialSecurityNumber = 999_99_9999L val hexBytes = 0xFF_EC_DE_5E val bytes = 0b11010010_01101001_10010100_10010010 print("$oneMillion \n") print("$creditCardNumber \n") print("$socialSecurityNumber \n") print("$hexBytes \n") print("$bytes
\n"
) }

這段程式碼輸出的數字

這裡寫圖片描述

下劃線並不像JAVA一樣會影響我們的程式碼,而是讓我們的程式碼可讀性變得更強

並且在JAVA平臺中,== 和 === 的概念 就跟我們JAVA中 == 和eques類似

    val a: Int = 10000
    // true
    print(a === a)
    val boxedA: Int? = a
    val anotherBoxedA: Int? = a
    // false
    print(boxedA === anotherBoxedA)

這段程式碼中,我們可以看到,我們定義了一個Inta,又定義了兩個可空Int 賦值 a,結果算出===false,但是如果我們
改成== ,那就是值相等了,===是地址相同,很明顯,我們是兩個不同的變數,所以false

另外,在Kotlin中,小型別也不是大型別的子類,所以不存在強轉的概念

比如這種錯誤的示範

    val b: Byte = 1 
    val i: Int = b 

這就隱式轉換,但是我們可以用個顯示轉換來達到我們的需求

    val b: Byte = 1
    val i: Int = b.toInt()
    print(i)

每個數字都是可以通過顯示轉換來達到自己想要的轉換

我們再來看下邏輯運算

  • shl(bits) ‒ 有符號左移 (Java 的 << )
  • shr(bits) ‒ 有符號右移 (Java 的 >> )
  • ushr(bits) ‒ 有符號右移 (Java 的 >>> )
  • and(bits) ‒ 位與
  • or(bits) ‒ 位或
  • xor(bits) ‒ 位異或
  • inv() ‒ 位非

我們來寫一段演示的示例


    val a: Int = 3
    //<< 1
    print("${a shl 1} \n")
    //>> 1
    print("${a shr 1} \n")
    //>>> 1
    print("${a ushr 1} \n")
    //and 1
    print("and: ${a.and(5)} \n")
    //or  7
    print("or : ${a.or(5)} \n")
    //xor 6 
    print("xor : ${a.xor(5)} \n")
    //inv -4 
    print("inv : ${a.inv()} \n")

再來看下Char,Char不能作為一個單獨的字元或數字存在,需要‘’單引號宣告,比如

    var a : Char = '1'

我們再來看下如何定義一個數組

    //定義items["1","2","3"]
    val items = listOf<String>("1","2","3")
    //指定大小,內容為空
    val itemNulls = arrayOfNulls<Int>(10)
    // 建立⼀個 Array<String> 初始化為 ["0", "1", "4", "9", "16"]
    //val asc = Array(5, { i -> (i * i).toString() })
    // 定義五個數 一直遞增
    val asc = Array(5, {i -> (i * i)})

listOf直接宣告,arrayOfNulls宣告一個長度固定的空陣列Array定義一個指定長度,值的陣列

再來看下字串

    for (c in "Hello") {
        println("$c")
    }

這是我們常見的字串,可以包含轉義,還有一種

    val text = """
        for (c in "foo")
            print(c)
        """

這是原生的字串,用三個”“”表示,裡面不包含轉義,是什麼就是什麼,當然,這樣的話裡面就有很多空格了

    val text = """
        |for (c in "foo")
            |print(c)
        """.trimMargin()
    print(text)

我們可以|聲明當前起始位,並且trimMargin()去除空格,得到的結果

這裡寫圖片描述

如果你沒有這樣處理的話,你輸出的值是這個樣子的

這裡寫圖片描述

二.包

包的作用我相信大家都是知道的


package com.liuguilin.kt_package

fun main(args: Array<String>) {

    print(sum(1,3))
}

fun sum(a: Int, b: Int): Int {
    return a + b;
}

三.控制流:if、when、for、while

1.if表示式

在kotlin中,if的用法不侷限於判斷,他還會有返回,所以我們的寫法也很多,比如

    val a = 12;

    //傳統
    if (a > 10) {
        print(">")
    } else {
        print("<")
    }

    //表示式
    if (a > 10) print(">") else print("<")

    //表示式
    var b = if (a > 10) 10 else 20

2.When表示式

    val today = 4;
    when (today) {
        1 -> print("春季")
        2 -> print("春季")
        3 -> print("春季")
        4 -> print("夏季")
        5 -> print("夏季")
        6 -> print("夏季")
        7 -> print("秋季")
        8 -> print("秋季")
        9 -> print("秋季")
        10 -> print("冬季")
        11 -> print("冬季")
        12 -> print("冬季")
    }

但是我們一般是需要else結尾的,而且我們可以用in來表達

    val today = 4;
    when (today) {
        in 1..3 -> print("春季")
        in 4..6 -> print("夏季")
        in 7..9 -> print("秋季")
        in 10..12 -> print("冬季")
        else -> print("error")
    }

當然,你還可以用is來判斷型別,這裡就不講了

3.For 迴圈

    var items = listOf(1,2,3);

    //out 123
    for(a in items) print(a)

    //out 012
    for (a in items.indices) print(a)

    //out 0 , 1  1 , 2  2 , 3
    for ((a,b)in items.withIndex()) print("$a , $b \n")

4.While 迴圈

    var a = 5;

    while (a > 3){
        print(a)
        a--;
    }

    do {
        print(a)
        a--;
    }while (a > 3)

四.Break和continue

Kotlin 有三種結構化跳轉表示式:

  • return。預設從最直接包圍它的函式或者匿名函式返回。
  • break。終止最直接包圍它的迴圈。
  • continue。繼續下一次最直接包圍它的迴圈。

我們來看一個例子

    var items = listOf(1, 3, 5, 7, 9)

    for (a in items) {
        if (a == 5) {
            continue | break | return
        }
        print("$a \n")
    }

這裡迴圈一個數組,如果等於5就分別執行continue,break,return,如果是break,return會跳出迴圈,也就
只會列印1,3而continue會跳出本次迴圈,也就會列印1,3,7,9

如果有興趣的話,可以來Github參與一下

我的公眾號,期待你的關注

weixin