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