驚鴻一瞥之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()  }