Kotlin是JetBrains在2011年推出的一门全新的编程语言,这门语言最早被设计成运行在JVM上——使用Kotlin编写的程序会被编译成字节码文件,该字节码文件可直接在JVM上运行(用java,命令运行)。目前Google已推荐使用Kotlin作为Android的官方开发语言,这意味着Kotlin将会在Android开发上大放异彩。
本书全面介绍了Kotlin的语法。从各平台上Kotlin程序的编译、运行开始介绍,详细介绍了Kotlin的基本语法,Kotlin的数组和集合,Kotlin函数式编程特征,Kotlin的面向对象编程、异常处理、泛型和注解,还介绍了Kotlin与Java混合调用的相关内容,以及Kotlin反射相关内容。
本书对Kotlin的解读十分系统、全面,超过Kotlin官方文档本身覆盖的内容。本书很多地方都会结合Java字节码进行深入解读,比如对Kotlin扩展的解读,对Kotlin主、次构造器的解读,这种解读目的不止于教会读者简单地掌握Kotlin的用法,而是力求让读者深入理解Kotlin,且更好地理解Java。简单来说,本书不仅是一本Kotlin的学习图书,而且也是一本能让你更深入地理解Java的图书。如果读者在阅读本书时遇到了技术问题,可以登录疯狂Java联盟(http://www.crazyit.org)发帖,笔者将会及时予以解答。
浓墨重彩剖析Kotlin、Java之间的异同,让有Java基础的读者更快、更好地上手Kotlin;函数式编程与面向对象编程独立开讲,逻辑合理、自洽
前 言
Kotlin是JetBrains在2011年推出的一门全新的编程语言,这门语言最早被设计成运行在JVM上——使用Kotlin编写的程序会被编译成字节码文件,该字节码文件可直接在JVM上运行(用java命令运行即可)。Kotlin可以与现有的Java语言包保持完全兼容,而且Kotlin代码比Java代码更简洁。Kotlin增加了扩展、对象表达式、对象声明、委托等Java原本不支持的功能,它们都是现代编程语言广泛支持的功能,并且完全可以在JVM上运行。
简单来说,Kotlin既可利用Java的优势,又比Java更简洁。
Kotlin与现有的Java语言包保持完全兼容,这意味着Kotlin不是一门简单的语言,它完全可以利用Java领域现有的各种工具和框架,如Spring、Hibernate、MyBatis、Lucene、Hadoop、Spring Cloud等。Kotlin可以直接使用它们,因此现有的Java项目完全可以采用Kotlin开发,Java开发者也很容易过渡到Kotlin。
不得不说的一点是,目前Android已推荐使用Kotlin作为官方开发语言,这意味着Kotlin将会在Android开发上大放异彩,这也是笔者决定向大家介绍这门语言的重要原因之一。
此外,Kotlin程序还可直接编译生成JavaScript代码,Kotlin程序既可编译成前端JavaScript代码,用于实现网页的DOM操作,实现前端编程;也可编译成后端JavaScript代码,与服务端技术(如Node.js)交互。
需要指出的是,虽然Kotlin提供了简洁的语法,但Kotlin的功能并不简单,Kotlin从来就不是为了更简单而设计的,而是为了更强大而设计的。Kotlin既支持函数式编程方式,也支持面向对象编程方式。Kotlin的函数式编程方式完全支持主流的函数和闭包,语法功能非常丰富。
可以这么说:Java支持的各种语法功能,Kotlin基本都支持;Java不支持的很多现代编程语言所具有的特征,Kotlin也支持,因此Kotlin绝不比Java更简单。如果读者相信网络上某些所谓“大神”肤浅的结论:Kotlin很简单,那么我建议你放弃阅读这本书。
本书有什么特点
本书对Kotlin的解读十分全面、深入,并非一本简单介绍Kotlin语法的图书,在很多地方都会结合Java语法、底层字节码进行讲解。如果读者有较好的Java功底,阅读本书能更清晰地看清Java与Kotlin之间的差异,便于快速上手Kotlin;对于没有Java功底的读者,可选择忽略将二者进行对比的部分,直接学习本书也可掌握Kotlin语言的编程。
由于Kotlin最先被设计成运行在JVM平台上的编程语言,因此Kotlin具有和Java天然的相似性,但在Java设计不足的地方又做了大量的补充、改进,所以本书也能让你更好地理解Java,以及更好地理解Java存在的一些不足。这样说并不代表Java不优秀,“知其雄,守其雌,为天下谿”,只有深入理解Java,才能更好地感悟Java的优秀。
总结起来,本书有如下几个特点。
1.逻辑结构更合理
本书在内容体系上将函数式编程和面向对象编程独立开来,先介绍函数式编程部分,再介绍面向对象编程,更符合Kotlin语言本身的知识体系。而不像某些资料一会儿函数,一会儿面向对象,搅得读者晕头转向。实际上,无论是经典的图书如《C++ Primer》,还是Swift官方文档(甚至Kotlin官方文档),几乎都没见过一会儿函数、一会儿面向对象这样介绍的。
在介绍知识时,本书会先详细讲解各种知识点的理论,然后再通过示例演示Kotlin各理论的用法,将知识点融合在示例中,符合读者的认知、学习规律。
另外,整本书的知识具有和《疯狂Java讲义》大致相同的脉络,所以《疯狂Java讲义》的读者会很容易上手。
2.讲解深入本质
Kotlin是JVM语言,所以其很多东西其实是受到Java的影响的。书中会对一些看似奇怪的语法从字节码文件层次进行剖析,让读者更好地理解Kotlin与Java的对应关系。
比如,主构造器和次构造器到底是什么?Java构造器并不区分主次,为什么Kotlin搞出这两个东西?主、次构造器为何要委托父类构造器?委托父类构造器时为什么存在区别?主、次构造器生成字节码之后到底对应Java的哪个部分?这些知识在本书7.5节有深入讲解。
再比如,Java本身不支持扩展,那么Kotlin的扩展是如何在JVM上运行的?难道Kotlin改造了JVM吗?Java本身不支持扩展,那么Java是否可以调用Kotlin扩展的成员?这些问题需要从字节码层次进行剖析,本书在8.1节有深入讲解。
还有,Java泛型的上限、下限的本质是什么?Kotlin泛型的声明处型变和使用处型变的本质是什么?与Java的对应关系是怎样的?Java本身并不支持声明处型变,那为何JVM能支持Kotlin的声明处型变?这些问题可以在本书第10章中找到答案。
3.知识内容更全面
本书内容超过Kotlin官方文档本身所覆盖的知识,比如介绍反射的章节就超过了Kotlin官方文档内容。本书反射部分不仅更详细地介绍如何获得类、函数、属性的引用,而且真正从API级别介绍KClass、KCallable、KFunction、KProperty,KProperty0、KProperty1、KProperty2的用法,以及它们的内在关联,并实实在在地教读者掌握如何用Kotlin反射动态创建对象、动态调用方法。
本书写给谁看
本书为所有打算深入掌握Kotlin编程的读者而编写,尤其适合从Java转Kotlin的学习者和开发者阅读,也适合作为大学教育、培训机构的Kotlin教材。
2017-12-3