Kotlin語言學習筆記(1)

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

基本語法

  • 聲明常量用val,聲明變量用var,聲明函數用fun。
    類型修飾採用後置語法,省略時由編譯器根據上下文自行推導:
    聲明常量和變量時用冒號指示類型,自帶初值時類型修飾可省略。
    聲明函數時用冒號指示返回類型。
    若函數體採用代碼塊形式,則沒有返回值時返回類型可省略,有返回值時返回類型不能省略。
    若函數體採用表達式形式,則不管有沒有返回值返回類型都可省略。
      常量 變量 函數(有返回值) 函數(無返回值)
    Kotlin val i = 10
    val i: Int = 10
    var i = 10
    var i: Int = 10
    fun f(n: Int): Int {return n + 1}
    fun f(n: Int): Int = n + 1
    fun f(n: Int) = n + 1
    fun f(n: Int): Unit {println(n)}
    fun f(n: Int) {println(n)}
    fun f(n: Int): Unit = println(n)
    fun f(n: Int) = println(n)
    Swift let i = 10
    let i: Int = 10
    var i = 10
    var i: Int = 10
    func f(n: Int) -> Int {return n + 1} func f(n: Int) -> () {print(n)}
    func f(n: Int) -> Void {print(n)}
    func f(n: Int) {print(n)}
  • 字符串模板(string template)/ 字符串插值(string interpolation)的語法形式爲 $變量 以及 ${表達式}。
    字符串中若是須要表示 $ 字符,可以使用 ${'$'} 這種轉義形式。
    多行字符串使用三引號"""。
      字符串模板/字符串插值 多行字符串
    Kotlin val x = 10; val y = 20
    val s = "x=$x, y=${y + 1}"
    val price = """
    ${'$'}9.99
    """
    Swift let x = 10, y = 20
    let s = "x=\(x), y=\(y + 1)"
    var price = """
    $9.99
    """
    C# int x = 10, y = 20;
    var s = $"x={x}, y={y + 1}";
    var price = @"
    $9.99
    "
    字符串的值 x=10, y=21 <空行>
    $9.99
    <空行>
  • 區間
    Kotlin Swift 輸出
    for (i in 1..4) print(i) for i in 1...4 {print(i, terminator: "")} 1234
    for (i in 4..1) print(i) // for i in 4...1 {print(i, terminator: "")} // error 空字符串
    for (i in (1..4).reversed()) print(i) for i in (1...4).reversed() {print(i, terminator: "")} 4321
    for (i in 4 downTo 1) print(i) for i in stride(from: 4, through: 1, by: -1) {print(i, terminator: "")}
    for i in stride(from: 4, to: 0, by: -1) {print(i, terminator: "")}
    4321
    for (i in 1..4 step 2) print(i) for i in stride(from: 1, through: 4, by: 2) {print(i, terminator: "")}
    for i in stride(from: 1, to: 4, by: 2) {print(i, terminator: "")}
    13
    for (i in 4 downTo 1 step 2) print(i) for i in stride(from: 4, through: 1, by: -2) {print(i, terminator: "")}
    for i in stride(from: 4, to: 1, by: -2) {print(i, terminator: "")}
    42
    for (i in 1 until 10) print(i) for i in 1..<10 {print(i, terminator: "")} 123456789
    val x = 3
    if (x in 1..10) println(x)
    if (x !in 1..10) println(x)
    let x = 3
    if case 1...10 = x {print(x)}
    if 1...10 ~= x {print(x)}
    if (1...10).contains(x) {print(x)}
    if !(1...10).contains(x) {print(x)}
    3
  • 相等
      結構相等/值相等 引用相等
    Kotlin a == b
    a != b
    a === b
    a !== b
    Swift a == b
    a != b
    a === b
    a !== b

控制流

Kotlin語言中的控制流語句有:數組

  • if...else...語句(表達式):用於處理雙分支
    val a = 3; val b = 4
    val m1: Int
    if (a < b) m1 = a else m1 = b
    val m2 = if (a < b) a else b
    val m3 = if (a < b) {println("a"); a} else {println("b"); b}
    
  • 不帶參數的when表達式:用於處理多分支
    fun Int.isOdd() = this % 2 == 1
    fun Int.isEven() = this % 2 == 0
    val x = 3
    when {
        x.isOdd() -> print("x is odd")
        x.isEven() -> print("x is even")
        else -> print("x is funny")
    }
  • 帶參數的when表達式:用於處理值匹配
    單個值,多個值,表達式,在與不在某個區間,是與不是某個類型,以上全部狀況以外
    fun describe(obj: Any): String =
        when (obj) {
            1          -> "One"
            2, 3       -> "Two or Three"
            in 4..6    -> "Four to Six"
            "Hello"    -> "Greeting"
            is Long    -> "Long"
            !is String -> "Not a string"
            else       -> "Unknown"
        }
    println(describe(1)); // One
    println(describe(2)); // Two or Three
    println(describe(4)); // Four to Six
    println(describe(7)); // Not a string
    println(describe(9L)); // Long
    println(describe(10.0)); // Not a string
    println(describe("abc")); // Unknown
  • for...in...語句,while語句,do...while語句:用於處理循環

函數

  • 函數體有代碼塊以及表達式兩種形式。使用表達式形式時可省略返回類型。
  • 沒有返回值的函數能夠被視爲返回類型爲 Unit 的函數。
  • 函數能夠嵌套。局部函數可以使用外部函數的變量。
    fun outside() {
        var a = 1
        fun inside() {
            a++;
        }
        inside();  // a==2
    }
    
  • 函數能夠帶缺省參數。
  • 調用函數時能夠使用參數名。
    fun add(a: Int = 1, b: Int = 2) = a + b
    println(add());  // 3
    println(add(3)); // 5
    println(add(b = 3)); // 4
  • 變長參數:只能有一個,使用 vararg 修飾符,在函數內部被視爲數組。
      變長參數
    Kotlin fun avg(vararg numbers: Double): Double {}
    Swift func avg(numbers: Double...) -> Double {}
    C# double Avg(params double[] numbers) {}
    Java double avg(double... numbers) {}
  • 函數是一等公民。能夠做爲函數的參數,也能夠成爲函數的返回值。
      函數的類型(有返回值) 函數的類型(沒有返回值)
    Kotlin (Int, Int) -> Boolean (Int, Int) -> Unit
    Swift (Int, Int) -> Bool (Int, Int) -> Void
    C# Func<int, int, bool> Action<int, int>
  • 類的方法被稱爲成員函數。
  • 能夠使用擴展函數來爲既有的類添加功能。
  • 中綴形式:僅有一個參數的成員函數以及擴展函數在使用 infix 修飾符修飾的狀況下,調用方可以使用中綴形式。
相關文章
相關標籤/搜索