kotlin特性介绍及与java-kotlin特性介绍及与java
前言
本系列文章适合有一定java经验的开发者,文章主要内容来自于Dmitry Jemerov的《Kotlin实战》,并加以自己学习过程中的感悟,总结以及实战中的经验。
Kotlin官网
Kotlin中文官网
其他资源(部分需要科学上网):
Android快速转战Kotlin教程
Kotlin官方论坛
Stack Overflow上的Kotlin标签
Kotlin Reddit
Kotlin在线环境
一、Kotlin初体验
没错,如下图,纵享丝滑~~~~~~~~~~~~~~~
kotlin,用过的都说好,你好、我好、大家好!!!!!!!!!!!!!!!
我们来举个栗子:
创建一个Person类来表示一个“人”,创建一个“人”的集合,查找其中年纪最大的人,并打印结果。
data class Person(val name: String,val age: Int? = null)fun main(args: Array) {val persons = listOf(Person("Alice"),Person("Bob", age = 29))val oldest = persons.maxBy { it.age ?: 0 }println("The oldest is: $oldest")
}
输出:The oldest is: Person(name=Bob, age=29)
我们来依次解析:
"数据"类 ,括号中是参数,可空类型(?=),如果没有传该参数,则为null
data class Person(val name: String,val age: Int? = null)
"顶层函数"
fun main(args: Array) {}
其中 "age = 29" 是命名参数
Person("Bob", age = 29))
lambda表达式;Elvis运算符(左边的值不为空时返回值,否则返回右边的数据)
val oldest = persons.maxBy { it.age ?: 0 }
kotlin的String拼接方式 相当于String s = "aaa"+"bbb"+"ccc"
"The oldest is: $oldest"
有没有开始喜欢kotlin了kotlin特性介绍及与java,如果要用java实现上面的功能,代码可能需要多一半。这只是初体验,记不住没关系,没看懂没关系,后面的章节会慢慢深入讲解。
二、Kotlin的主要特征 1、目标平台广泛
(1)Kotlin 的首要目标是提供一种更简洁、更高效、更安全的替代 Java 的语言,并且适用于现今使用 Java 的所有环境,包括web,安卓等
(2)Kotlin 还可以编译成 JavaScript,允许你在浏览器中运行 Kotlin 代码。
2、静态类型
Kotlin 和 Java 一样是一种静态类型的编程语言。这意味着所有表达式的类型在编译期已经确定了,而编译器就能验证对象是否包含了你想访问的方法或者字段。
这与动态类型的编程语言形成了鲜明的对比,后者在 JVM 上的代表包括 Groovy 和 JRuby。这些语言允许你定义可以存储任何数据类型的变量,或者返回任何数据类型的函数,并在运行时才解析方法和字段引用。这会减少代码量并增加创建数据结构的灵活性。但它的缺点是,在编译期不能发现像名字拼写错误这样的问题,继而导致运行时的错误。
静态类型的好处:
3、函数式和面向对象
作为一个 Java 开发者,你一定对面向对象编程的核心概念烂熟于胸,但函数式编程对你来说却可能不是很熟悉。
函数式编程的核心概念如下 :
例子:
//=====过程式代码=====:
fun main(args: Array) {val ints = listOf(1, 2, 3, 4, 5)var sum = 0for (i in ints) sum += isum.log() // Log 15
}
//===== 函数式代码=====:
fun main(args: Array) {val ints = listOf(1, 2, 3, 4, 5)ints.fold(0){ a, b -> a + b }.log()// Log 15
}
优点:
(1)简练:函数式风格的代码 比相应的命令式风格的代码更优雅、更简练,因为把函数当作值可以让你获得更强 大的抽象能力,从而避免重复代码。 熟悉RxJava和java8的童鞋应该有所感受。
(2)安全:多线程程序中最大的错误来源之一就是,在没有采用适当同步机制的情况下,在不同的线程上修改同一份数据。如果你使用的是不可变数据结构和纯函数,就能保证这样不安全的修改根 本不会发生,也就不需要考虑为其设计复杂的同步方案。
(3)测试容易:没有副作用的函数可以独立地进行测试,因为不需要写大量的设置代码来构造它们所依赖的整个环境。
Kotlin特征集
Kotlin 允许你使用函数式编程风格但并没有强制你使用它。当你需要的时候,可以使用可变数据,也可以编写带副作用的函数,而且不需要跳过任何多余的步骤。然后,毫无疑问的是kotlin特性介绍及与java,在 Kotlin 中使用基于接口和类层次结构的库就像 Java 一样简单。当编写 Kotlin 代码的时候,可以结合使用面向对象编程和函数式编程风格,并使用最合适的工具来对付亟待解决的问题。
4、免费并开源
Kotlin 语言(包括编译器、库和所有相关工具)是完全开源的,并且可以自由使用。它采用 Apache 2 许可证 ;其开发过程完全公开在 kotlin上,并且欢迎来自社区的贡献。如果你要开发 Kotlin 应用程序,有三种开源 IDE 供你选择 :IntelliJ IDEA Community2 版、Android Studio 以及 Eclipse,它们都完 全支持 Kotlin(当然,IntelliJ IDEA Ultimate 也支持 Kotlin。)
三、Kotlin设计哲学 1、务实
Kotlin不是一门研究性语言,没有试图提升编程语言设计领域目前的技术水平,也没有尝试计算机科学的创新理念,而是尽可能依赖现有编程语言,来降低语言的复杂性,让他更容易学习。
同时,IDE的支持也对Kotlin的支持也非常完美,对探索发挥着重要作用。许多情况下,工具会提示开发者更简洁的结构替换通用代码模式。
2、简洁
举个例子:java需要1000行完成的功能,Kotlin只需要300行,就是这么霸气。
Kotlin保证你写的代码具有实际意义。而且代码越简单,你就能越快了解发生了什么。
3、安全
最显著地是NullPointerexception可以被扼杀在摇篮之中。Kotlin的类型系统跟踪哪些可以或不可以为null的值,并且禁止哪些运行时可能导致的NullPointerexception。
例如:
//可以为null
val s:String ?= null //不能为null
val s:String = ""
同时Kotlin有助于避免:ClassCastException,Kotlin中检查和转换被组合成一次操作,一旦检查过该类型,就不需要额外的转换就可以直接引用这个类型的成员。
例如:
if(value is String){ // 类型检查println(values.toUpperCase()) //直接调用该类型的方法,不用额外的类型转换
}
4、互操作性
我们任然可以使用现有的库,可以调用java的方法,继承java的类和实现java的接口,在Kotlin类上使用java的注解等等。
而且我们Koltin调用java,亦或java调用kotlin都毫不费力。
不光如此IDE的支持也是完美:
四、Kotlin的编译过程
Kotlin的源代码存放在后缀名为.kt的文件中。Kotlin的编译器会分析源码并生成.class字节码文件,这和java编译过程相同。
kotlin中
java中
下图,kotlin编译过程流程图
kotlin编译器编译的代码依赖kotlin运行时库,如上图,他包括Kotlin自己的标准库的定义,以及Kotlin对标准Java API的扩展。运行时库需要和你的应用程序一起分发。
五、小结