Kotlin 基礎

Hello World

fun main(args: Array<String>) {
    println("Hello World!")
}

基本數據類型

  • Byte 1字節整數
  • Short 2字節整數
  • Int 4字節整數
  • Long 8字節整數
  • Float 4字節浮點數
  • Double 8字節浮點數
  • Boolean 布爾型
  • Char 字符型

變量、常量聲明

var聲明變量,用val聲明常量,有初始值時類型可由編譯器自動推斷

var t:Int = 123

var a = 123
a = 345

val A = 123
A = 345 // error

val B:Int
B = 123
B = 345 //error

// 標明類型時,變量默認不可空
var c:Int = null // error c爲不可空

// 聲明可空變量,在類型後加 ?
var d:Int? = null

類型轉換

只允許顯式類型轉換

toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
toString(): String

接收用戶輸入

println("你輸入了:${readLine()}")

  • 使用java.util.Scanner輸入時,傳入System.in參數會產生錯誤,因爲in在kotlin中是保留字。使用反引號訪問該字段(類似於在js中用obj[name]訪問對象)

    val sc:Scanner = Scanner(System.in) // error
    
    val sc:Scanner = Scanner(System.`in`)  
    sc.nextInt()

控制流

while,do-while,if-else 正常使用
沒有switch語句 使用when表達式代替

if-else 表達式

if-else中最後執行的表達式爲返回值

var a = 1
var b = if(a == 0) 123 else 456
println(b) // 456

for-in

for循環只有for-in形式,沒有for(;;)形式
遍歷有迭代器的對象

val array = arrayOf(1,2,3,4,5)

for (item in array) print(item)

for (i in array.indices) {
    print(array[i])
}

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

when表達式

when 既可以被當做表達式使用也可以被當做語句使用。如果它被當做表達式, 符合條件的分支的值就是整個表達式的值,如果當做語句使用, 則忽略個別分支的值。

val x = 12
// 增強switch
when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    3, 4 -> print("x == 3 or x == 4")
    in 1..10 -> print("x is in the range")
    !in 10..20 -> print("x is outside the range")
    is String -> x.startsWith("prefix")
    else -> { 
        print("else")
    }
}

// 增強if-else
when {
    x.isOdd() -> print("x is odd")
    x.isEven() -> print("x is even")
    else -> print("x is funny")
}

字符串

Kotlin字符串可以使用模版語法

val i = 123
val s = "i = $i" // i = 123
val s2 = "i = ${i}" // i = 123

使用3對引號創建原生字符串,會忽略轉義字符,可以多行
模版語法正常使用

val i = 123
val s = """
afdsfas
i = $i
\n\t\n 
""" // \n\t\n不會被轉義爲換行和製表符

數組

使用Array類表示
使用arrayOf()創建數組,arrayOfNulls()創建指定長度的null數組

    val array = arrayOf(1, 2, 3, 4, 5) // [1, 2, 3, 4, 5]
    val nullArray = arrayOfNulls<Int>(5) // [null * 5]
    array[0] = 123

    // 通過長度和初始化函數創建數組
    val arr = Array(4, fun(index: Int): Int { return index }) // [0, 1, 2, 3]

函數

Lambda

{參數列表 -> 函數體}

  • 參數列表爲空時,可省略->
  • 只有一個參數時,可省略參數列表和->,該參數用it訪問
  • 當函數的最後一個參數是Lambda時,可以把Lambda寫在函數後

使用Lambda進行數組操作

val arr = arrayOf(2, 4, 5, 7, 10)

// 遍歷操作
arr.forEach { print(it) } // 245710 

// 帶index的遍歷操作
arr.forEachIndexed { index, s ->  println(" $index:$s") }  
// 0:2 1:4 2:5 3:7 4:10

// 映射一個新數組(不改變原數組)
arr.map { it * 2 }.forEach { print(it) } // 48101420

// 累積計算
print(arr.reduce {a, b -> a + b}) // 28
//arr.reduceIndexed { index, a, b -> a + b } 帶index的累積計算
//arr.reduceRight arr.reduceRightIndexed 逆序累積計算
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章