1. 程式人生 > >Kotlin基礎(二)

Kotlin基礎(二)

1.函式的定義與呼叫
2.函式的遞迴
3.面向物件
4.介面與抽象類
5.委託和代理
6.單例
7.列舉
8.印章類


1.函式的定義與呼叫

fun add(a: Int, b: Int): Int {
    return a + b
}
fun add2(a: Int, b: Int): Int = a + b
    var i = { x: Int, y: Int -> x + y }
    println(i(3, 5))     //8
    var j: (Int, Int) -> Int = { x, y -> x +
y } println(j(3, 5)) //8

2.函式的遞迴
//累乘

fun fact(num: Int): Int {
    return if (num == 1) {
        1
    } else {
        num * fact(num - 1)
    }
}

//累加

fun olladd(num: Int): Int {
    return if (num == 1) {
        1
    } else {
        num + olladd(num - 1)
    }
}

//尾遞迴優化 累加

tailrec
fun olladd2(num: Int, result: Int): Int { println("第$num 次運算,result=$result") return if (num == 0) { result } else { olladd2(num - 1, result + num) } }

輸出:

5次運算,result=04次運算,result=53次運算,result=92次運算,result=121次運算,result=140次運算,result=15
15

3.面向物件
// a.封裝
// b.繼承 open關鍵字允許子類繼承和重寫方法

open class Fathor {
    var xingge = "性格內向"
    open fun action() {
        println("行為鬼怪")
    }
}

//注意子類繼承和java的區別

class Son : Fathor() {
    override fun action() {
        println("行為正常")
    }
}

// c.多型 同種功能的不同形態

4.介面與抽象類
//Human為抽象類 代表事物的本質
//IMan為介面 代表事物的能力

class Man:Human(),IMan{
}

5.委託和代理(by)

interface IWashBowl{
    fun wash()
}
class BigHeadSon : IWashBowl {
    override fun wash() {
        println("我是大頭兒子,我賺了1塊錢")
    }
}
class SmallHeadFather : IWashBowl by BigHeadSon() {
    override fun wash() {
        println("我是小頭爸爸,我賺了10塊錢")
        BigHeadSon().wash()
        println("我看著兒子把碗洗好了")
    }
}
fun main(args: Array<String>) {
    val father = SmallHeadFather()
    father.wash()
}

問題:在剛才的程式碼中,小頭爸爸的代理了一個大頭兒子by BigHeadSon()之後又建立了一個BigHeadSon().wash()大頭兒子,那麼我們需要把大頭兒子定義為單例,只建立一次

6.單例
//把class改成object

object BigHeadSon : IWashBowl {
    override fun wash() {
        println("我是大頭兒子,我賺了1塊錢")
    }
}

這個時候在小頭爸爸的類裡面只用建立一次大頭兒子,去掉()即可

class SmallHeadFather : IWashBowl by BigHeadSon {
    override fun wash() {
        println("我是小頭爸爸,我賺了10塊錢")
        BigHeadSon.wash()
        println("我看著兒子把碗洗好了")
    }
}

7.列舉

enum class Week {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}

8.印章類 Sealed

  • 印章類更在意型別
  • 列舉更在意資料