搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
Kotlin从入门到进阶实战
0.00     定价 ¥ 69.80
图书来源: 浙江图书馆(由JD配书)
此书还可采购24本,持证读者免费借回家
  • 配送范围:
    浙江省内
  • ISBN:
    9787302508724
  • 作      者:
    陈光剑
  • 出 版 社 :
    清华大学出版社
  • 出版日期:
    2018-08-01
收藏
产品特色
编辑推荐

《Kotlin从入门到进阶实战》是阿里巴巴资深程序员呕心沥血之作,揭秘Kotlin编程的精华

《Kotlin从入门到进阶实战》全面涵盖Kotlin基础语法、进阶实战技巧和项目开发等实用内容

《Kotlin从入门到进阶实战》重点介绍了Kotlin语言的特性,包括可空类型、安全操作符、面向对象编程、Lambda表达式、函数式编程、扩展函数及创建DSL等,并都给出了丰富的代码示例。

《Kotlin从入门到进阶实战》详细介绍了编程实践中较为常用的元编程与注解反射,以及运算符重载与约定等内容。

《Kotlin从入门到进阶实战》详细地介绍了两个项目实战案例:使用Kotlin+Spring Boot进行服务端开发;使用Kotlin开发Android应用程序。


展开
作者简介

陈光剑  笔名一剑。资深程序员,现就职于阿里巴巴集团。有丰富的平台开发经验,曾经参与了多种平台工具的开发。使用Java、Android、Scala、Groovy和Kotlin等语言或工具进行领域建模、架构设计和工具开发等,积累了大量经验。善于总结,乐于分享,发布过大量技术文章,并著有《Kotlin极简教程》一书,深受读者好评。

展开
内容介绍

《Kotlin从入门到进阶实战》从Kotlin 语言的基础语法讲起,逐步深入到Kotlin进阶实战,并在最后配合项目实战案例,重点介绍了使用Kotlin+Spring Boot进行服务端开发和使用Kotlin进行Android应用程序开发的内容,让读者不但可以系统地学习Kotlin编程的相关知识,而且还能对Kotlin应用开发有更为深入的理解。

本书分为14章,涵盖的主要内容有Kotlin简介,Kotlin语法基础,类型系统与可空类型,类与面向对象编程,函数与函数式编程,扩展函数与属性,集合类,泛型,文件I/O操作、正则表达式与多线程,使用Kotlin创建DSL,运算符重载与约定,元编程、注解与反射,Kotlin集成Spring Boot服务端开发,使用Kotlin进行Android开发。

本书内容通俗易懂,案例丰富,实用性强,特别适合Kotlin语言的入门读者和进阶读者阅读,也适合Android程序员、Java程序员等其他编程爱好者阅读,还适合作为相关培训机构的教材。


展开
精彩书评

Kotlin有着人性化的语法糖和简洁的函数式编程,这让它大受欢迎。光剑的这本书以大量的代码示例,带你进入Kotlin的世界,是学习Kotlin编程的好选择。

——阿里巴巴高级技术专家  刘志强


Kotlin让编程的感觉很美好。是的,Kotlin比你用的任何其他编程语言都好,你会发现它简直就是一股清流。读完这本书你会发现,编程竟是如此好玩和有趣。

——阿里巴巴技术专家  郭宇


我一直认为,一个优秀的产品必须功能简洁,用户体验良好。而Kotlin就是这么一个“产品”。光剑的这本书总结了他在工作中积累的大量编程经验,易学、实用,特别适合那些想学习Kotlin编程的人。

——同盾科技Java程序员  刘鼎亮





Kotlin是一门非常有前途和应用前景的语言,业内有越来越多的组织和个人开始关注kotlin,并在他们的工程和项目中使用Kotlin。2017年Google公司宣布Kotlin成为Android的官方开发语言。对于软件从业人员(特别是Java程序员和Scala程序员)来说,Kotlin是必须要掌握的编程语言。作者的这本书对Kotlin做了全面和深入的解读,还给出了他在工程实践中的思考和总结,值得有志于学习Kotlin编程的朋友阅读。

——阿里巴巴高级开发工程师  冯同寒





Kotlin或将取代Java而成为Android开发的主流语言,这已经成为很多程序员的共识。本书由浅入深,用简洁干练的语言介绍了Kotlin的精华,并给出了详细的项目实战案例,可以让你快速掌握Kotlin编程。拥抱未来,拥抱Kotlin,就从本书开始吧!

——新华三集团资深云计算开发工程师  董家云


作为一门简单的编程语言,Kotlin可以让你花更少的精力解决更多的问题,而且还可以让你减少犯错误的概率,让你彻底告别Java语言的一些缺陷,真可谓魅力四射。光剑的这本书以实战的方式带你走进kotlin的世界,帮你解决日常开发中会遇到的典型问题,值得一读。

——有赞测试开发专家  郁磊


自从Google选择了Kotlin作为Android开发的一级语言后,Kotlin快速走红。而市面上关于Kotlin的优秀书籍并不多。光剑的这本书,不但介绍了Kotlin的大部分知识点,而且还给出了两个很好的项目实战案例,是学习Kotlin不可多得的参考读物。

——众安科技资深工程师  林阳华

展开
精彩书摘

第1章  Kotlin是什么

Kotlin是一种非研究性并且非常务实的工业级编程语言,它的使命就是帮助程序员解决实际工程实践中的问题。使用Kotlin语言让Java程序员的工作变得更轻松,Java语言中的那些空指针错误、浪费时间的冗长的样板代码、啰嗦的语法限制等,在Kotlin语言中统统消失。Kotlin语言简单、务实,语法简洁而强大,安全且表达力强,极富生产力。

本章首先简单介绍Kotlin语言的发展历史和语言特性,然后简述为什么要学习Kotlin语言,最后简要介绍JVM语言家族。

1.1  初识Kotlin

Kotlin是一种基于JVM的静态类型编程语言。Kotlin从开始推出至今已经有7年,  2016年官方正式发布了首个稳定版本。Kotlin发展简史如下:

 2011年7月,JetBrains推出Kotlin项目。

 2012年2月,JetBrains以Apache 2许可证开源此项目。

 2016年2月15日,Kotlin v1.0(第1个官方稳定版本)发布。

 2017 Google I/O大会上,Kotlin“转正”。

Kotlin具备类型推断、多范式支持、可空性表达、扩展函数、模式匹配等诸多下一代编程语言特性。

Kotlin的编译器kompiler可以被独立出来并嵌入到Maven、Ant或Gradle工具链中。这使得在IDE中开发的代码能够利用已有的机制来构建,可以在新环境中自由使用。

让我们从Hello World开始。与C、C++、Java语言一样,Kotlin程序的入口点是一个名为main()的函数,它传递一个包含任何命令行参数的数组。代码示例如下:


package com.easy.kotlin //(1)

fun main(args: Array<String>) { //(2)

    val name = "World"

    println("Hello,$name!") //(3)

}


上面的代码简单说明如下。

(1):Kotlin中包package的使用与Java基本相同。有一点不同的是Kotlin的package 命名可以与包路径不同。

(2):Kotlin变量声明args:Array 类似于Pascal,先写变量名args,冒号隔开,再在后面写变量的类型Array。与Scala和Groovy一样,代码行末尾的分号是可选的,在大多数情况下,编译器根据换行符就能够推断语句已经结束。Kotlin中使用fun关键字声明函数(方法),充满乐趣的fun。

(3):Kotlin中的打印函数是println()(虽然背后封装的仍然是Java的System.out.println()方法)。Kotlin中支持字符串模板$name,如果是表达式,则使用${expression}语法。

1.2  语 言 特 性

人们为什么喜欢Kotlin?Kotlin为什么值得我们去学习?下面是一个不完全的清单     列表。

 与Java及JVM的完全互操作性;

 多平台:适合Android、浏览器(JavaScript)和本地系统编程(native);

 语法简洁不啰嗦(便于学习);

 富于表现力和高效的生产力;

 支持类型推断。例如,我们可以只写val number=23,编译器会推断这是一个Int;

 可以使用数据类(data class)以极简的方式创建POJO;

 运算符重载相当简单;

 快速、方便地扩展内置类、自定义类的函数与属性;

 区分可空类型和不可空类型。直接在编译期语法层面检查可空类型,提供空安全保障;

 Kotlin含有功能丰富的集合类Stream API;

 集成扩展了简单实用的文件I/O、正则匹配、线程等工具类;

 提供了实用强大的函数式编程支持:一等函数支持,Lambda表达式、高阶函数等;

 能够轻松、方便地创建DSL;

 使用更加轻量级的协程进行并发编程;

 IntelliJIDEA开发工具的一等支持;

 Android开发有Android Studio 3内置原生支持;

 提供的Anko库(https://github.com/Kotlin/anko)使得Android开发速度更快,充满更多的乐趣等。

Kotlin的优势是既有Java的完整生态(Kotlin完全无缝使用各类Java API框架库),又有现代语言的高级特性(语法糖)。

Kotlin语言的设计初衷之一是为了JetBrains团队内部使用,旨在帮助公司降低成本。用过IntelliJ IDEA的程序员都知道JetBrains团队的出品皆是良品。毫无疑问,Kotlin的设计是务实的。发展和促进Kotlin的好处大于其成本,在这个过程中,Kotlin已经演变成了一个JetBrains的效率工具,其显著的务实特性吸引了一大批Java程序员,并成为了JetBrains工具生态系统中重要的一员。

在未来几年内,Kotlin有望成为主要的非Java的JVM语言,甚至有一天成为下一个“Java”语言。可以预测的是,Kotlin将大大提升整个Java互联网开发者的效率和质量。

Kotlin语言的特性可以简单概括为以下几方面。

1. 实用主义(Pragmatic)

务实、注重工程实践性。我们经常会听到人们说编程是数学,或者是工程,是艺术,是科学,这些说法都是很有道理的。Kotlin是一门偏重工程实践、编程上有极简风格的      语言。

2. 极简主义(Minimalist)

Kotlin语法简洁优雅不啰嗦,类型系统中一切皆是引用(reference)。

3. 空安全(Null Safety)

Kotlin中有一个简单完备的类型系统来支持空安全。

4. 多范式(multi-paradigm)

Kotlin同时支持OOP与FP编程范式。各种编程风格的组合可以让我们更加直接地表达算法思想和解决问题的方案,可以赋予我们在思考上有更大的自由度和灵活性。

5. 可扩展

Kotlin可直接扩展类的函数与属性(extension functions & properties)。这与我们在Java中经常写的util类是完全不一样的体验!Kotlin是一种非常注重用户体验的语言。

6. 高阶函数与闭包(higher-order functions & closures)

Kotlin的类型中,函数类型(function type)也是一等类型(first class type)。在Kotlin中可以把函数当成值进行传递,这直接赋予了Kotlin函数式编程的特性,使用Kotlin可以写出一些非常“优雅”的代码。

7. 支持快速实现DSL

有了扩展函数、闭包等特性的支持,使用Kotlin实现一个DSL将会相当简单、方便。

1.2.1  Kotlin与Java完全互操作

Kotlin是基于JVM平台的静态编程语言,同时在设计之初就把与Java的互操作性当作重要目标。正如官方网站所宣传的那样:100% interoperable with Java and Android。下面我们举个简单例子来展示Kotlin中使用Java的ArrayList类与使用JUnit测试框架进行单元测试。代码示例如下:


fun getArrayList(): List<String> {   //(1)函数声明

    val arrayList = ArrayList<String>() //(2)Kotlin中直接调用Java的API

    arrayList.add("A")

    arrayList.add("B")

    arrayList.add("C")

    return arrayList

}


代码说明如下。

(1):声明了一个返回List<String>的函数,我们看到在Kotlin中使用fun关键字来声明函数。

(2):创建了一个ArrayList<String>对象,我们可以看到,在Kotlin中创建对象不再使用new关键字了,尖括号里面的String是泛型信息。该语法与Java语言基本类似。关于集合类与泛型的相关内容,将在第7章和第8章中具体介绍。

下面使用JUnit框架进行单元测试。代码如下:


package com.easy.kotlin   //(3)包声明


import org.junit.Assert 

import org.junit.Test

import org.junit.runner.RunWith

import org.junit.runners.JUnit4   //(4)导入JUnit的类


@RunWith(JUnit4::class)   //(5) 直接使用 Java 生态库 JUnit中的注解@RunWith

class FullJavaInteroperabilityTest {

    @Test   //(6)标记这是一个测试方法

    fun test() {

        val list = getArrayList()   //(7)调用被测试函数

        Assert.assertTrue(list.size == 3) //(8)断言

    }

}


代码说明如下。

(3):是包声明,使用package关键字。

(4):使用import导入JUnit4类。

(5):Kotlin中使用@RunWith注解,方式与Java语法类似。注解中的参数是JUnit4::class,是JUnit4类的引用。我们将在第12章中介绍注解与反射。

(6):使用JUnit的@Test注解来标注这是一个测试方法。

(7):调用被测试函数getArrayList()。

(8):使用JUnit的Assert类的API进行断言操作。

……


1.3  编 程 哲 学

“我们认为Kotlin的定位是一种现代化工业语言:它专注于代码重用和可读性的弹性抽象,以及面向早期错误侦测和明确捕获维护与清理的意图这些问题的静态类型安全性。Kotlin最重要的使用场景之一是对于一个庞大的Java代码库,其开发者需要一个更棒的语言:你能够将Java和Kotlin自由混合,迁移可以是渐进式的,不需要一下子对整个代码库进行改变。”

“Kotlin旨在成为一种面向工业的面向对象语言,而且是一种比Java更好的语言,但仍然可以与Java代码完全互操作,允许企业逐步从Java迁移到Kotlin。”

——Andrey Breslav,Kotlin创始人

编程的真正问题在于,如何把人类脑子里对问题的解决方案“具化”到机器世界,而这个“具化”的过程正是编程语言所要表达的东西。如何富有表现力并且安全简洁地表达,这是所有编程语言所要解决的问题。让人类能够尽可能“自然地”和计算机进行沟通交流,这一直是促使人们提高编程语言抽象层次的主要目标之一。很显然的一个事实就是,与用机器语言写的低层次结构代码相比,用编译语言写成的高层次结构代码更接近于人类进行思考时所用的概念。

Kotlin设计了一个“归一化”的类型系统(一切类型皆是引用类型),纯天然地设置了一道空指针的屏障,使得Kotlin比Java更加安全可靠。Kotlin还引入了类型推断、一等支持函数式编程、Lambda、高阶函数、类的扩展函数与属性、DSL等诸多特性,使得我们可以编写简单且高效的代码,更加专注地投入到业务逻辑的实现上。

优秀的程序员当然会选择使用Kotlin这些更加先进的特性,因为它们有助于更直接地表达观点,而且也没有额外的开销,何乐而不为呢?

展开
目录

目    录

第1章  Kotlin是什么 1

1.1  初识Kotlin 1

1.2  语言特性 2

1.2.1  Kotlin与Java完全互操作 3

1.2.2  扩展函数与扩展属性 4

1.2.3  不可空类型与空安全 5

1.2.4  一等函数支持 6

1.2.5  智能类型推断 6

1.3  编程哲学 6

1.4  学习工具 7

1.4.1  云端IDE 7

1.4.2  命令行REPL 7

1.4.3  使用IDEA 8

1.5  为什么要学Kotlin 9

1.6  JVM语言生态 12

1.7  本章小结 16

第2章  Kotlin语法基础 17

2.1  变量和标识符 17

2.2  关键字与修饰符 18

2.3  流程控制语句 21

2.3.1  if表达式 22

2.3.2  when表达式 23

2.3.3  for循环 24

2.3.4  while循环 25

2.3.5  break和continue 26

2.3.6  return返回 26

2.3.7  标签(label) 29

2.3.8  throw表达式 30

2.4  操作符与重载 30

2.4.1  操作符优先级 31

2.4.2  一元操作符 32

2.4.3  二元操作符 33

2.5  包声明 38

2.6  本章小结 40

第3章  类型系统与可空类型 41

3.1  类型系统 41

3.1.1  类型系统的作用 41

3.1.2  Java类型系统 42

3.1.3  Kotlin类型系统 43

3.2  可空类型 45

3.3  安全操作符 46

3.3.1  安全调用符“?” 47

3.3.2  非空断言“!!” 48

3.3.3  Elvis运算符“?:” 48

3.4  特殊类型 48

3.4.1  Unit类型 48

3.4.2  Nothing与Nothing?类型 49

3.4.3  Any与Any?类型 51

3.5  类型检测与类型转换 52

3.5.1  is运算符 52

3.5.2  类型自动转换 53

3.5.3  as运算符 54

3.6  本章小结 54

第4章  类与面向对象编程 55

4.1  面向对象编程简史 55

4.2  声明类 58

4.2.1  空类 58

4.2.2  声明类和构造函数 58

4.3  抽象类与接口 61

4.3.1  抽象类与抽象成员 62

4.3.2  接口 64

4.4  object对象 65

4.5  数据类 66

4.5.1  创建数据类 66

4.5.2  数据类自动创建的函数 69

4.5.3  数据类的语法限制 69

4.5.4  Pair和Triple 69

4.6  注解 70

4.7  枚举 72

4.8  内部类 73

4.8.1  普通嵌套类 73

4.8.2  嵌套内部类 74

4.8.3  匿名内部类 74

4.9  本章小结 75

第5章  函数与函数式编程 76

5.1  函数式编程简介 77

5.2  声明函数 77

5.3  Lambda表达式 78

5.4  高阶函数 79

5.5  Kotlin中的特殊函数 80

5.5.1  run()函数 80

5.5.2  apply()函数 81

5.5.3  let()函数 82

5.5.4  also()函数 83

5.5.5  with()函数 83

5.6  本章小结 84

第6章  扩展函数与属性 85

6.1  扩展函数 86

6.1.1  给String类扩展两个函数 86

6.1.2  给List类扩展一个过滤函数 87

6.2  扩展属性 89

6.3  扩展的实现原理 90

6.4  扩展中的this关键字 91

6.5  本章小结 91

第7章  集合类 92

7.1  集合类概述 92

7.1.1  常用的3种集合类 92

7.1.2  Kotlin集合类继承层次 93

7.2  不可变集合类 94

7.3  创建集合类 95

7.4  遍历集合中的元素 97

7.5  映射函数 98

7.6  过滤函数 99

7.7  排序函数 100

7.8  元素去重 101

7.9  本章小结 101

第8章  泛型 102

8.1  为何引入泛型 102

8.2  在类、接口和函数上使用泛型 104

8.2.1  泛型接口 104

8.2.2  泛型类 105

8.2.3  泛型函数 106

8.3  类型上界 106

8.4  协变与逆变 106

8.4.1  协变 108

8.4.2  逆变 111

8.4.3  PECS 111

8.5  out T与in T 112

8.6  类型擦除 112

8.7  本章小结 113

第9章  文件I/O操作、正则表达式与多线程 114

9.1  文件I/O操作 114

9.1.1  读文件 115

9.1.2  写文件 116

9.1.3  遍历文件树 117

9.2  网络I/O 118

9.3  执行Shell命令 119

9.4  正则表达式 120

9.4.1  构造Regex表达式 120

9.4.2  Regex函数 120

9.4.3  使用Java的正则表达式类 123

9.5  多线程编程 123

9.5.1  创建线程 123

9.5.2  同步方法和块 125

9.5.3  可变字段 125

9.6  本章小结 126

第10章  使用Kotlin创建DSL 127

10.1  什么是DSL 127

10.1.1  内部DSL 128

10.1.2  外部DSL 128

10.2  Kotlin的DSL特性支持 129

10.3  实现集合类的流式Kotlin DSL 130

10.4  实现一个SQL风格的集合类 131

10.5  本章小结 133

第11章  运算符重载与约定 134

11.1  什么是运算符重载 134

11.2  重载二元算术运算符 137

11.3  重载自增自减一元运算符 139

11.4  重载比较运算符 141

11.5  重载计算赋值运算符 143

11.6  本章小结 144

第12章  元编程、注解与反射 145

12.1  元编程简介 145

12.2  注解 146

12.2.1  声明注解 146

12.2.2  使用注解 147

12.2.3  处理注解 149

12.3  反射 151

12.3.1  类引用 152

12.3.2  函数引用 153

12.3.3  属性引用 153

12.3.4  绑定函数和属性引用 154

12.4  使用反射获取泛型信息 154

12.5  本章小结 158

第13章  Kotlin集成Spring Boot服务端开发 159

13.1  用Spring Boot快速开发Restful Hello World 159

13.1.1  Spring Initializr 159

13.1.2  创建Spring Boot项目 160

13.2  系统功能与技术栈 167

13.3  准备工作 167

13.4  配置数据层 170

13.5  数据持久层开发 170

13.5.1  数据库表结构 170

13.5.2  配置JPA 171

13.6  JSON数据解析 175

13.7  数据入库逻辑实现 176

13.8  定时调度任务 177

13.9  HTTP接口开发 178

13.9.1  实现分页查询接口 178

13.9.2  @Query注解与 #{#entityName} 179

13.9.3  Pageable与Page 180

13.10  视图模板开发 184

13.10.1  前端代码结构 185

13.10.2  实现后端分页 187

13.10.3  实现收藏和删除图片的功能 191

13.10.4  搜索关键字管理 194

13.10.5  使用协程实现异步爬虫任务 200

13.10.6  图片存入数据库并在前端展现 201

13.11  本章小结 203

第14章  使用Kotlin进行Android开发 204

14.1  快速开发Hello World 205

14.1.1  准备工作 205

14.1.2  创建基于Kotlin的Android项目 207

14.1.3  工程目录文件说明 210

14.1.4  安装运行 213

14.2  综合项目实战:开发一个电影指南应用程序 214

14.2.1  创建 Kotlin Android 项目 214

14.2.2  启动主类ItemListActivity 219

14.2.3  AppCompatActivity类介绍 222

14.2.4  Activity生命周期 224

14.2.5  Kotlin Android Extensions插件 226

14.2.6  详情页ItemDetailActivity 231

14.2.7  碎片事务类FragmentTransaction 235

14.2.8  Fragment 生命周期 239

14.2.9  测试数据类DummyContent 244

14.2.10  创建领域对象类Movie 244

14.2.11  JSON数据解析 245

14.2.12  电影列表页面 246

14.2.13  视图数据适配器ViewAdapter 250

14.2.14  视图中图像的展示 251

14.2.15  电影详情页面 253

14.2.16  电影源数据的获取 257

14.2.17  配置 AndroidManifest.xml 259

14.2.18  打包安装测试 259

14.3  本章小结 260


展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证