1. 程式人生 > >Kotlin學習筆記1_基礎語法

Kotlin學習筆記1_基礎語法

1. What’s Kotlin?

– 引自百度百科 Kotlin 是一個用於現代多平臺應用的靜態程式語言,由 JetBrains 開發。 Kotlin可以編譯成Java位元組碼,也可以編譯成JavaScript,方便在沒有JVM的裝置上執行。 Kotlin已正式成為Android官方支援開發語言。

Kotlin和IntelliJ IDEA都出自同一家公司JetBrains , 因此建議使用 IntelliJ IDEA 開發 Kotlin。

2. 基礎語法

宣告變數

var a = 1 //自動推斷型別是Int
a = 2 //OK

val b = 1
b = 2 //Error

var str:
String = "hello world" val m = intArrayOf(1,2,3) m[0] = 4 //OK

流程控制if 使用

var x = 10
var y = 20

//簡化寫法
var max = if (x > y) x else y
var min = if (x < y) x else y

max = if (x > y) {
    println("x > y")
    x  //
} else {
    println("x <= y")
    y //
}

min = if (x > y) {
    println(
"x > y") y } else { println("x <= y") x } println("min : $min , max: $max")

流程控制 for 使用

fun main(args: Array<String>) {
    var array: IntArray = intArrayOf(1,2,3)
    
    //遍歷 for(x in y)
    for(item: Int in array) {
        println(item)
    }

    println("========================"
) //獲取下標索引 for(i: Int in array.indices) { println("array[$i] = ${array[i]}") } }

定義函式:

//main函式
fun main(args: Array<String>) {
}

//定義一個sum求和函式
fun sum(a: Int, b: Int): Int {
    return a + b
}

//語法糖
fun sum2(a: Int, b: Int) = a + b

//字串模板
fun myPrint(a: Int, b: Int) {
    println("$a + $b = ${a + b}")
}

//可能返回null的特殊函式
/**
 * 核心在與Int?, 類似Java8的 Optional
 */
fun convertStr2Int(str: String): Int? {
    try {
        return str.toInt()
    } catch (ex: NumberFormatException) {
        return null
    }
}

fun printMultiply(a: String, b: String) {

    var a2Int = convertStr2Int(a)
    var b2Int = convertStr2Int(b)

    //思考為啥這裡寫會報錯
    //println(a2Int * b2Int)

    if (a2Int != null && b2Int != null) {
        println(a2Int * b2Int) //編譯器很聰明,因為if判斷了,所以不會報錯了
    } else {
        println("can't get value")
    }
}

//入參是Any型別
fun convert2UpperCase(str: Any): String? {

    if(str is String) { //自動識別str為字串
        return str.toUpperCase() //這裡不需要強制轉換了
    }
    return null
}

convert2UpperCase("hello world")  //  ⇒ HELLO WORLD
convert2UpperCase(123)   // ⇒ null

when 關鍵字 有點類似switch case 語法,但是when是及時返回結果的。

fun main(args: Array<String>) {

    println(printStr("hello"))
    println(printStr("other"))

    val result1 = describe("Hello")
    println("describe(\"Hello\") is $result1")
    println("=================")

    var a = 6
    var result = when (a) {
        1 -> {
            println("a == 1")
            10
        }
        2 -> {
            println("a == 2")
            2
        }

        3, 4, 5 -> {
            println("a == 3 or a == 4 or a == 5")
            30
        }
        //區間
        in 6..10 -> {
            println("in 6 ... 10")
            40
        }
        else -> {
            println("a is other value")
            50
        }
    }

    println(result)
}

fun printStr(str: String): String {
    when (str) {
        "hello" -> return "HELLO"
        "world" -> return "WORLD"
        "hello world" -> return "HELLO WORLD"
        else -> return "other input"
    }
}

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

區間用法 kotlin區間左右都是閉區間

/**
 * range 使用小記
 * Kotlin的區間是左右都是閉區間
 */
fun main(args: Array<String>) {

    val a = 5
    val b = 10

    if(a in 2..b) {
        println("in the range")
    }

    if (a !in 2..3) {
        println("out of the range")
    }

    println("-------------------")
    for(i in 2.rangeTo(10)) {
        println(i)
    }

    println("-------------------")

    for(i in 2..10 step 2) {
        println(i)
    }

    println("-------------------")

    //倒著遍歷
    for(i in 10 downTo 2 step 1) {
        println(i)
    }

    var list = listOf("hello", "world", "hello world", "say good bye", "study kotlin")
    //判斷是否在區間外
    if (-1 !in 0..list.lastIndex) {
        println("-1 is out of range")
    }
    //判斷在區間內
    if(0 in 0..list.lastIndex) {
        println("0 is in of range")
    }
	list.filter{ it.length > 5 }.map { it.toUpperCase() }.sorted().forEach(System.out::println)
}

3 . 其他

轉義字元特殊處理

fun main(args: Array<String>) {
    var s = "hello world"
    // 對於 """ """ 中的字串,特殊字元不會轉義
    s = """hello \n world \t"""
    println(s)
}

包名的特殊性 目錄與包的結構無需匹配,原始碼可以在檔案系統的任意位置

//包名放在檔案的第一行,與目錄結構無關,是邏輯的概念
package com.dcj.test