版权信息 书名:Kotlin核⼼编程 作者:⽔滴技术团队 排版:⼩暑暑 出版社:机械⼯业出版社 出版时间:2019-04-01 ISBN:9787111624318 本书由机械⼯业出版社有限公司授权北京当当科⽂电⼦商务有限公司制作与 发⾏。 —·版权所有侵权必究·— 前⾔ 为什么要写这本书 2017年5⽉,HadiHariri(JetBrains的⾸席布道师)在座⽆虚席 的GoogleI/O⼤会上介绍Kotlin时,先开了⼀个玩笑:“ ⼤概4年半之 前,我们曾在⼀个容纳900⼈的会场做过同样的事情,但结果只来了 7个⼈。” 他说的是事实,⾃从Google宣布Kotlin成为Android官⽅编程语⾔ 之后,Kotlin这门默默⽆闻的语⾔⼀下⼦成为技术圈中的“ 明星”。 随后,关于Kotlin的开源项⽬和学习资料也如⾬后春笋般出现。 同⼀时刻,在我们位于杭州的办公室⾥,⽔滴的同事也在进⾏着 ⼀个⽤Kotlin研发的Android项⽬。作为⼀个采⽤Scala全栈开发的“ ⾮ 主流” 技术团队,我们对Kotlin有天然的好感。⼀⽅⾯,它在某些地 ⽅⾮常像Scala。相⽐Java,它们都拥有更简洁的语法,以及更多的 函数式特性(如⾼阶函数、更强的类型推导、不同程度上的模式匹配 等)。另⼀⽅⾯,Kotlin还有⽐Scala更快的编译速度,同时兼容Java 6,这使得我们可以⽤它完美替代Java以更好地进⾏Android开发⼯作。 那么Kotlin到底是怎样⼀门编程语⾔呢?我们试图通过这本书来 回答这个问题。 与其他Kotlin的书籍不同,本书在⼯具属性上会显得稍弱。如果 你想快速索引Kotlin某个具体语法的使⽤,推荐你去阅读Kotlin的官⽅ ⽂档或者《Kotlin极简教程》。但假使你有⼀颗好奇的⼼,渴望窥探 Kotlin这门语⾔的设计哲学,那么本书可以提供⼀个浅薄的参考视 ⾓。本书会围绕Kotlin的设计理念,介绍其核⼼的语⾔特性,探索它 在设计模式、函数式编程、并发等⽅⾯的具体应⽤。 越来越多的公司和团队开始加⼊Kotlin的阵营。除了Android之外, 依靠KotlinNative等项⽬,Kotlin也开始在其他领域施展拳脚。在 Android官⽅⽀持Kotlin之后的数⽉,Google又推出了Android的Kotlin 扩展库,在很⼤程度上提升了Android开发的体验。Spring5正式发布 时,也将Kotlin作为其主打的新特性之⼀,使Kotlin再⼀次受到了很多 Web开发者的关注。这⼀切都预⽰着这门语⾔将有⽆⽐⼴阔的前景。 值得注意的是,除了蓬勃发展的⽣态之外,Kotlin语⾔本⾝也在 不断迭代。截⾄本书完稿时,Kotlin又发布了⼀些有趣的新特性(如 inlineclass),我们对Kotlin的未来充满了期待。 读者对象 ·Kotlin爱好者 ·想进阶的Java程序员 ·对函数式编程感兴趣的读者 ·Android开发者 ·开设Java相关课程的⼤专院校的学⽣ 本书主要内容 本书分为4部分: 第1部分为热⾝篇——Kotlin基础。介绍Kotlin设计哲学、⽣态及 基础语法。 第2部分为下⽔篇——Kotlin核⼼。涉及Kotlin的语⾔特性,包括 ⾯向对象、代数数据类型、模式匹配、类型系统、Lambda、集合、 多态、扩展、元编程等⽅⾯的知识。其中“ 代数数据类型和模式匹配” “ 多态和扩展” 在同类书籍中没有过多深⼊,但笔者认为它们是Kotlin 语⾔中相当重要的特性和应⽤,故本书中进⾏了详细介绍探索。 第3部分为潜⼊篇——Kotlin探索。该部分之所以命名为“ 探索”, 是希望进⼀步探索Kotlin的设计模式和编程范式,内容包含设计模 式、函数式编程、异步和并发编程。其中“ 函数式编程” 为超越 Kotlin本⾝的内容,但可以为读者提供深⼊理解Kotlin语⾔特性的⽰范。 第4部分为遨游篇——Kotlin实战。着重演⽰Kotlin在Android和 Web平台中的应⽤,包含基于Kotlin的Android架构、开发响应式Web 应⽤。 勘误和⽀持 由于作者的⽔平有限,编写时间仓促,书中难免会出现⼀些错误 或者不准确的地⽅,恳请读者批评指正。如果你遇到任何问题,或有 宝贵意见,欢迎发送邮件⾄邮箱[email protected],期待能够得 到你们的真挚反馈。 此外,本书所有章节相关的源代码可以通过https://github.com/ DiveIntoKotlin进⾏查看和下载。 致谢 ⾸先感谢程凯先⽣,他第⼀时间跟进并审阅了本书⼤部分稿件, 反馈了许多相当宝贵的改进意见。他所在的⼩余科技是由傅盛投资的 创业公司,有着⼀⽀⾮常优秀的Android研发团队。 感谢淘宝飞猪旅⾏的陈静波先⽣、依图科技的邵⼦奇先⽣、麦多 多的创始⼈古井好⽉(花名)、⼯⾏交易银⾏中⼼的季乔卡先⽣、图 讯科技的邹苏启先⽣、浙江⼯业⼤学的蒋博⽂同学,他们对本书进⾏ 了审阅,对内容的纠错和调整提供了很⼤的帮助。 感谢机械⼯业出版社华章公司的杨福川⽼师、孙海亮⽼师,他们 参与了本书的创作,为书籍的策划及写作细节提供了专业的指导,使 得本书可充分⾯向读者、⾯向市场。 最后,要感谢⽔滴团队所有参与本书创作的⼩伙伴们,是⼤家认 真的态度和强⼤的执⾏能⼒促成了本书的出版,他们分别是章建良、 单鑫鑫、泮关森、肖宇、汤俞龙、袁国浩。 谨以此书献给所有关注我们ScalaCool团队博客的朋友们,以及 众多热爱Kotlin的开发者! ⽔滴技术团队 热⾝篇 Kotlin基础 ·第1章 认识Kotlin ·第2章 基础语法 第1章 认识Kotlin 在Java之后,JVM平台上出现了其他的编程语⾔,Scala和Kotlin 可以算是其中的佼佼者。Scala已成为⼤数据领域的明星,⽽Kotlin在 2017年GoogleI/O⼤会之后,也成为安卓平台上潜⼒巨⼤的官⽅⽀持 语⾔。它们都因被冠以“ 更好的Java” ⽽为⼈称道,然⽽它们采⽤的 却是两种不同的设计理念。 本章我们通过对⽐Java、Scala、Kotlin这3种编程语⾔各⾃的发 展路线,来认识Kotlin的设计哲学。 1.1 Java的发展 不得不说,Java是当今最成功的编程语⾔之⼀。⾃1996年问 世,Java就始终占据着编程语⾔⽣态中很⼤的份额。它的优势主要体 现在: ·多平台与强⼤的社区⽀持。⽆论是⽤于Web开发还是⽤于移动设 备,Java都是主流的编程语⾔之⼀。 ·尊重标准。它有着严格的语⾔规范及向后兼容性,因此⾮常适合开 发团队之间的协作,即使组织变动,新⼈同样可以在相同的规范下快 速参与项⽬开发。 然⽽,随着计算平台的快速发展,平台和业务本⾝对编程语⾔提 出了更⼤的挑战。Java的发展也受到环境变化所带来的影响。⼀⽅⾯, 多核时代与⼤数据的到来,使得古⽼的函数式编程又重新变得“ 时 髦”,Scala、Clojure这种多范式的编程语⾔开始受到越来越多开发⼈ 员的关注和喜爱;另⼀⽅⾯,Java的严格规范也常常引发抱怨。 因此,Java必须开始改变。