看了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()
}