Kotlin 实战(一):初探 kotlin 时间: 2018-02-08 01:27 分类: Kotlin,修仙日记 ####前言 关于 Kotlin 的介绍就不再过多的赘述了,原因有二:① 就目前情况,对 Kotlin 算是一无所知,根本写不出什么介绍。② 官网自身就有介绍,看了也未必就能弄清 Kotlin 到底是个什么玩意儿,当然了,看了的话还是有一定好处的,在这里也就不复制粘贴上来了。 所以还是在实战中慢慢摸索吧。现在及以后的学习全部基于《Kotlin in Action》英文版。 ####编译及运行 在写 Kotlin 代码之前,心中一定会有个疑惑:Kotlin 代码如何编译以及如何运行? 在《Kotlin in Action》书中有个非常不错图: ![start1.jpg](https://0o0.me/usr/uploads/2018/02/1607179392.jpg) 由此可以看出 Kotlin 最终还是编译出`*.class`文件,运行方法和`java`一致。我想这也是为什么 Kotlin 能够完全支持`java`代码的原因。至于图中`Kotlin runtime`作用还未知,从名字上看应该是和运行有关的,但已经打包成`jar`了,为什么还要这个东西,这里暂且不知。 `*.kt`文件编译官方有提供,一个简单的编译运行方法如下: ``` #编译 kotlinc -include-runtime -d #运行 java -jar ``` ####第一个 Kotlin 程序 在这里,就不用传统的 Hello World 例子了,《Kotlin in Action》一书中有更好的例子来展现 Kotlin 的特点。 ```java package me._0o0.start /** * Created by Mr.Xu on 2018/2/7. */ data class Person(val name: String, //#1 val age: Int? = null) //#2 fun main(args: Array) { //#3 val persons = listOf(Person("Alice"), Person("Bob", age = 19)) //#4 val oldest = persons.maxBy { it.age ?: 0 } //#5 println("The oldest is: $oldest") //#6 } ``` \#1: `data class`数据类的意思,这是在`java`中没有的,表示一个单纯的数据类而已,相当于`java`中没有业务逻辑方法的普通类,说白了就是 [DTO](https://baike.baidu.com/item/dto/16016821 "DTO")。 \#2: `Int?`可空类型(这里是Int,还有String、布尔类型等也有,就是类型后面加个问号以及等号后面给定默认值),默认值为 null,这也是`java`没有的特性,个人感觉非常好用。 \#3: `fun main(args: Array)`Kotlin的程序入口函数,和`java`中的`main`函数差不多。 \#4: `Person("Bob", age = 19)`参数中允许显示给出参数名字,我猜这个是为了有利于团队开发或者维护吧,虽然现在的 IDE 都能够自动显示参数,但 Kotlin 支持显示的给出,也是一个非常不错的点子。 \#5: 这里涉及到`Lambda`表达式,暂且不说,后面学习到了`Lambda`再具体分析吧。`it.age ?: 0` ?:(elvis) 操作符,就是 `else value is`的意思,和`java`的`if-else`三元表达式差不多,但它还有个作用就是相当于`if null`然后执行下一个语句。与之对应的还有`if not null`的写法,在这里就不多说了,以后专门学习语法的时候再介绍。 \#6 `The oldest is: $oldest`字符串模板,也就是说 Kotlin 支持像其他脚本语言那样的写法,与`java`对比,这也是一个独特的地方。它不仅仅支持变量,还支持表达式,类似`jsp`中的`EL表达式`,写法也是`${执行的语句}`这种形式。 最终运行程序输出结果: > The oldest is: Person(name=Bob, age=19) 自动生成`toString`方法并调用。 ####结语 以上,一个简单的 Demo,简单地让我们看到了 Kotlin 的语法结构,也能够与 java 语法上做一个简单的比较了,可以看出,在语法上 Kotlin 的简洁性是完全超过了 java 的,也许有人不喜欢,但至少大多数人是这么认为的。让我,也渐渐地爱上这门语言吧~! 标签: 无
不错。