惊鸿一瞥之Kotlin

2019-09-17 15:59:01 浏览数 (1)

看了Google开发者大会之后你啥感觉?一个是flutter真的可以入手啦,另一个就是Kotlin需要看看啦。为啥要看Kotlin呢?因为Google已经帮你想好说服领导采用Kotlin的理由啦……??????

Hello World

代码语言:javascript复制
fun main(args: Array<String>) {
    println("Hello,world")
}

Functions

代码语言:javascript复制

//独有的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

代码语言:javascript复制
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

代码语言:javascript复制
//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就有构造函数,函数 ,属性,这些都很常规……

既然是全新的语言,那么就会有他自身不同之处,我们看下面的代码

代码语言:javascript复制

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的朋友都面向对象编程的我们就不多说,直接上代码一度以为快

代码语言:javascript复制
//泛型
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

继承是面向对象的基础特性啦,我们还是那上面的作为示例

代码语言:javascript复制
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才可覆写

子类要想继承父类构造函数的属性变量,需要在子类构造函数中做声明。(如下里的粒子)

代码语言:javascript复制
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()
}

0 人点赞