驚鴻一瞥之Kotlin
- 2019 年 10 月 4 日
- 筆記

看了Google開發者大會之後你啥感覺?一個是flutter真的可以入手啦,另一個就是Kotlin需要看看啦。為啥要看Kotlin呢?因為Google已經幫你想好說服領導採用Kotlin的理由啦……??????
Hello World
fun main(args: Array<String>) { println("Hello,world") }
Functions
//獨有的Unit 為了兼容Java的void fun printMessage(message: String): Unit { println(message) } fun sum(x: Int, y: Int): Int { return x + y } fun multiply(x: Int, y: Int) = x * y
fun可謂是各個高級語言出彩的地方,Kotlin的函數可是更加的豐富,可變參數,參數默認值,以及缺省主體的函數=返回,以及兼容Java的Unit修飾符……可謂是只有你想不到的,沒有Kotlin想不到花樣
Variables
var a: Person = Person("A") val b = Person("B")
變量聲明來說沒有什麼特殊的,var聲明可變變量,val不可變,只是個關鍵字不同而已
Null Safety
作為Google強烈推薦的替代Java的產品(估計恨死Java啦),null類型聲明在Java中沒有的(Java需要為變量手動聲明null,並且不存在顯示聲明null)
在這裡更確切的說是nullable更貼切,也就是說Kotlin出現的變量存儲數據有兩重含義:內部可為空、不可為空,變量聲明就註定有的可以是null而有些不能為null。這種語法更貼切顯示生活—-好比魯迅先生的那就似乎好像只有……
Classess
//infix class Person(val name: String) { private var likedPeople = mutableListOf<Person>() infix fun likes(other: Person) { likedPeople.add(other) } } class Customer class Contact(val id: Int, var email: String)
作為新興的面向對象語言,Kotlin也有class,有class就有構造函數,函數 ,屬性,這些都很常規……
既然是全新的語言,那麼就會有他自身不同之處,我們看下面的代碼
open class Dog(name: String) { open fun sayHello() { println("wow…") } } class Yorkshire(name: String) : Dog(name) { override fun sayHello() { print("wif wif") } }
出現了open這個關鍵詞,沒錯就是它,你你猜能聲明一個可繼承的class,是不是跟我們以前的有點相反—Java是默認class可繼承,swift也是…
Generics
泛型作為現代會的編程語言那是必不可少的,lz的朋友都面向對象編程的我們就不多說,直接上代碼一度以為快
//泛型 class MutableStack<E>(vararg items: E) { private val elements = items.toMutableList() fun push(element: E) = elements.add(element) fun peek(): E = elements.last() fun pop(): E = elements.removeAt(elements.size - 1) override fun toString(): String = "MutableStack(${elements.joinToString()})" }
Inheritance
繼承是面向對象的基礎特性啦,我們還是那上面的作為示例
open class Dog(name: String) { open fun sayHello() { println("wow…") } } class Yorkshire(name: String="Jack") : Dog(name) { override fun sayHello() { print("wif wif") } }
在Kotlin中fun好class默認都是final,fun需要聲明為open才可覆寫
子類要想繼承父類構造函數的屬性變量,需要在子類構造函數中做聲明。(如下里的粒子)
open class Tiger(val origin: String) { fun sayHello() { println("A tiger from $origin says: grrhhh!") } } class SiberianTiger : Tiger("Siberia") // 1 fun main() { val tiger: Tiger = SiberianTiger() tiger.sayHello() }