本书将从语言的基本特性开始,逐渐覆盖其更多的高级特性,尤其注重讲解如何将 Koltin 集成到已有 Java 工程实践及其背后的原理。本书分为两个部分。第一部分讲解如何开始使用 Kotlin 现有的库和API,包括基本语法、扩展函数和扩展属性、数据类和伴生对象、lambda 表达式,以及数据类型系统(着重讲解了可空性和集合的概念)。第二部分教你如何使用 Kotlin 构建自己的 API,以及一些深层次特性——约定和委托属性、高阶函数、泛型、注解和反射,以及领域特定语言的构建。本书适合广大移动开发者及入门学习者,尤其是紧跟主流趋势的前沿探索者。
首著席卷而来 Android界Swift Java全兼容 谷歌官方头牌 移动开发巨变
覃宇,ThoughtWorks 高级咨询师,10余年移动应用开发经验,Android 技术专家,曾为AOSP贡献过测试用例;目前专注于移动应用的架构设计、自动化测试以及持续交付。
罗丽,高级软件工程师,移动技术开发顾问,拥有丰富的软件开发经验, 熟悉React Native,Android,iOS等多种开发技术。目前任职于ThoughtWorks海外事业部,曾在多个大型移动应用项目中担任技术顾问。
李思阳,ThoughtWorks咨询师,移动开发工程师。熟悉Android、Mobile Web相关技术,有着丰富的移动应用开发经验,在移动应用体验和兼容性相关领域有独特的见解;长期关注Android领域相关技术动向。
蒋扬海,ThoughtWorks移动开发咨询师,深耕Android开发多年,应用开发经验丰富,对Android开发领域的技术有广泛的涉猎,对Android技术动向有着敏锐的洞察力。
序
当我在 2010 年春季第一次拜访 JetBrains 的时候,我相当确定世界上不需要另一种通用编程语言了。我认为现有的 JVM 上的语言已经足够好了,谁会有想法去创建一门新语言呢?在经过大约一个小时的关于大规模代码库上产品问题的讨论后我被完全说服了,并且后来成为 Kotlin 一部分的最初想法就已经被描绘在白板上。很快我就加入了 JetBrains 来主导这门语言的设计与编译器的开发工作。
到今天,六年多的时光过去了,我们也快要发布第二个版本。我们已经拥有超过 30 人的团队和数以千计的活跃用户,还有很多让我们难以轻易实现的精彩的设计理念。但是不要担心,这些想法在进入这门语言之前还必须经过缜密的考察。我们希望这本书的篇幅依然能够容得下 Kotlin 的未来。
学习一门编程语言是一个令人兴奋而且常常是回报颇丰的尝试。如果它是你的第一门语言,通过它你能学到整个编程的新世界。如果不是,它会使你以新的术语来思考熟悉的东西,从而以更高层次的抽象来更深入地了解它们。本书主要针对后者,即面向已经熟悉 Java 的读者。
从头开始设计一门语言可能是一项具有挑战性的任务,但是使其与另一门语言融洽的工作就是另一回事了——尤其是那门语言还包含了许多的愤怒的食人魔,以及一些阴暗的地牢(在这一点上你如果不相信可以去问 C++ 的创造者 Bjarne Stroustrup)。与 Java 的互操作性(这就是 Java 与 Kotlin 之间是如何互相混合调用的)是 Kotlin 的基石之一,本书也投入了很多的注意力在这一点上。互操作性对于在一个已有的 Java 代码库中逐步地引入 Kotlin 非常重要。即使从头开始开发一个新项目时,也必须考虑到能够将这门语言融入一个拥有更大图景的平台中去,而以 Java 编写的所有函数库就是这样的一个平台。
当我在编写本书时,两个新的目标平台正在开发 :Kotlin 现在可以在 JavaScript虚拟机上运行以支持全栈 web 开发,并且还将很快能够直接编译成原生代码,从而在需要的时候能够脱离任何的虚拟机来运行。 1 所以,虽然本书是面向 JVM 的,但是你从中学到的很多东西也是可以应用于其他运行环境的。
本书作者从项目伊始就已经是 Kotlin 团队的成员,所以他们对语言本身和内部实现非常熟悉。他们在会议演讲、研讨会及 Kotlin 课程方面的经验使他们能够对预期的常见问题及可能的陷阱,提供良好的阐述。本书既阐释了语言特征背后的高级概念,也提供了足够深入的细节。
希望你能享受与我们的语言及本书相处的时光。正如我经常在我们社区的帖子中说的那样 :使用 Kotlin 愉快!
ANDREY BRESLAV,JetBrains Kotlin 首席设计师
前言
关于 Kotlin 想法的构思 2010 年诞生于 JetBrains。当时,JetBrains 已经是许多程序语言开发工具的知名供应商,包括 Java、C#、JavaScript、Python、Ruby 和 PHP。Java IDE——IntelliJ IDEA,Groovy 和 Scala 的插件,都是我们的旗舰产品。
为各种程序语言构建开发工具的经验给了我们对语言设计领域全面的理解和独特的观点。而基于 IntelliJ 平台的 IDE,包括 IntelliJ IDEA,仍然是用 Java 开发的。我们甚至都有点羡慕在 .NET 团队中的同事,他们使用 C#,一种现代、强大、迅速进化的语言进行开发。但是我们没有看到任何一种可以用来取代 Java 的语言。
对于这样的一门语言我们有哪些要求呢?首要而且最明确的要求就是它必须是静态类型的。我们想象不到其他任何一种——开发一个拥有数百万行代码的代码库许多年后——还不把人逼疯的办法。其次,我们需要与现有的 Java 代码完全兼容。这样的代码库是 JetBrains 的一笔巨大财富,我们承受不起失去它或是因为互操作性的难度而使其贬值的损失。再次,我们不愿意在工具质量方面接受任何的妥协。开发者的生产力是 JetBrains 作为一个公司最重要的价值,而强大的工具是达到这一目的的必要条件。最后,我们需要的是一种易于学习和理解的语言。
当看到一个我们公司未能满足的需要时,我们知道其他公司也处在一个相似的境地,我们希望我们的解决方案能够在 JetBrains 之外找到许多用户。带着这样的初心,我们决定走上一条创建一门新语言 :Kotlin 的道路。事实上,这个项目花费了超出我们预期的时间,在 Kotlin 1.0 最终诞生时,距离第一行代码提交到代码库中已经过去了超过五年 ;但是现在我们可以确信,这门语言找到了它的受众并且这些人都留了下来。
Kotlin 以靠近俄罗斯圣彼得堡的一座岛屿命名,Kotlin 的大部分开发团队就在那里。在使用岛屿命名这件事上,我们遵循了 Java 和 Ceylon 确立的先例,但我们决定选用一处靠近我们家乡的地方(在英语中,这个名称通常的发音是“cot-lin”,而不是“coat-lin”或者“caught-lin”)。
在这门语言临近发布之际,我们意识到一本由参与了语言设计决策人员撰写的关于 Kotlin 的书籍是有价值的,他们可以自信地解释为什么 Kotlin 中的事物是以它们的方式运行的。本书就是这种努力的结果,我们希望它能帮助你学习和理解Kotlin 语言。祝你好运,并愿你一直能愉快地进行开发。
“这本书保持了 Manning 实战系列的水准,满足了你快速提高生成力的所有需要”
应为
“这本书保持了 Manning 实战系列的水准,满足了你快速提高生产力的所有需要”
除了循环(for、do和do/while)以外大多数控制结构…
应为
除了循环(for、while和do/while)以外大多数控制结构…
“when 循环和 Java 完全一样”应为“while 循环和 Java 完全一样”
“when循环和Java完全一样”中的when应为while
“或者它的逆运算,!n” 应为 “或者它的逆运算,! in”