惊鸿一瞥之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()  }