简介
本书由阿里Java程序员撰写,带你快速进入Kotlin世界。本书基于Kotlin 1.1版本,从Kotlin基础知识到动手实战,包含了大量精选示例代码和应用案例。
内容简介
本书从Kotlin的HelloWorld开始,生动讲解Kotlin的基础知识和实战案例,分为两大部分:“基础知识”部分包括语言基础、基本数据类型与类型变量、集合类、泛型、面向对象编程、函数式编程、协程等;“实战”部分包括Kotlin与Java互操作、使用Kotlin集成Spring Boot开发WEB服务端、使用Kotlin集成Gradle开发、使用Kotlin和Anko的Android开发、使用Kotlin DSL、Kotlin文件IO操作与多线程、使用Kotlin Native。本书包含了大量精选示例代码和应用案例,为初学者提供了实用指南,也帮助熟练的Java开发者快速切换到Kotlin。
作者简介
陈光剑,资深开发人员,目前就职于阿里巴巴集团,参与过多种平台工具的开发,具有丰富的平台开发经验,操练过Java、Android、Scala、Groovy等语言进行领域建模、架构设计、工具开发,在工作中积累了大量经验,善于总结,乐于分享,发布过大量技术文章。
精彩书评
学习一门语言一定会涉及图书和资料,本书是不可多得的优秀图书,内容翔实,描述简洁,对编程语言有深刻的理解,融入了自己多年的开发经验......Kotlin非常新,而且发展也非常快,是一门非常有前景的开发语言,我希望Android和Java程序员都能停下来阅读这本Kotlin的图书,能够系统地了解这项技术。 ——雷卷,阿里巴巴70后Java程序员
目录
序 言 前 言 第一部分 Kotlin语言基础 第1章 Kotlin简介 2 1.1 Kotlin简史 2 1.1.1 Kotlin概述 3 1.1.2 Kotlin元年:2016 3 1.2 快速学习工具 4 1.2.1 云端IDE 4 1.2.2 本地命令行环境搭建 5 1.2.3 使用IntelliJ IDEA 9 1.2.4 使用Eclipse 13 1.2.5 使用Gradle构建Kotlin项目 17 1.2.6 编程语言学习小结 18 1.3 本章小结 20 第2章 快速开始HelloWorld 21 2.1 命令行版HelloWorld 21 2.2 应用程序版HelloWorld 21 2.3 Web RESTful HelloWorld 24 2.4 Android版的HelloWorld 34 2.5 JavaScript版HelloWorld 39 2.6 本章小结 49 第3章 Kotlin语言基础 50 3.1 包 50 3.2 声明变量和值 56 3.3 变量类型推断 57 3.3.1 省去变量类型 57 3.3.2 使用is运算符进行类型检测 59 3.4 字符串与其模板表达式 59 3.5 流程控制语句 60 3.5.1 if表达式 60 3.5.2 when表达式 62 3.5.3 for循环 64 3.5.4 while循环 64 3.5.5 break和continue 65 3.5.6 return 66 3.5.7 标签 69 3.5.8 throw表达式 71 3.6 代码注释 72 3.7 语法与标识符 73 3.7.1 修饰符 73 3.7.2 关键字(保留字) 75 3.7.3 操作符和操作符的重载 81 3.7.4 操作符优先级 82 3.7.5 一元操作符 83 3.7.6 二元操作符 85 3.8 扩展函数和扩展属性 90 3.8.1 扩展函数 90 3.8.2 扩展属性 93 3.9 空指针安全 93 3.10 标准库API简介 96 3.11 本章小结 97 第4章 基本数据类型与类型系统 98 4.1 什么是类型 98 4.2 编译时类型与运行时类型 100 4.2.1 弱类型与强类型 100 4.2.2 静态类型与动态类型 101 4.2.3 显式类型与隐式类型 101 4.3 根类型Any 101 4.4 基本类型 102 4.4.1 数字类型 104 4.4.2 字符类型与转义符 109 4.4.3 布尔类型 111 4.4.4 字符串类型 112 4.4.5 数组类型 117 4.5 可空类型 120 4.5.1 Kotlin中的null 120 4.5.2 可空类型String?与安全调用?. 122 4.5.3 可空性的实现原理 124 4.5.4 可空类型层次体系 126 4.6 kotlin.Unit类型 127 4.7 kotlin.Nothing类型 128 4.8 类型检测与类型转换 131 4.8.1 is与!is运算符 131 4.8.2 as运算符 133 4.9 本章小结 134 第二部分 编程进阶 第5章 集合类 136 5.1 集合类的基本概念 136 5.1.1 集合类是一种数据结构 137 5.1.2 集合类是ADT 137 5.1.3 连续存储和离散存储 138 5.2 Kotlin集合类简介 138 5.3 List 139 5.3.1 创建不可变List 140 5.3.2 创建可变集合MutableList 142 5.3.3 遍历List元素 143 5.3.4 List元素操作函数 146 5.3.5 List集合类的基本运算函数 151 5.3.6 过滤操作函数 159 5.3.7 映射操作函数 166 5.3.8 分组操作函数 169 5.3.9 排序操作符 170 5.3.10 生产操作符 171 5.4 Set 174 5.4.1 空集 174 5.4.2 创建Set 176 5.4.3 使用Java中的Set类 177 5.4.4 Set元素的加减操作plus minus 179 5.5 Map 179 5.5.1 创建Map 180 5.5.2 访问Map的元素 184 5.5.3 Map操作符函数 186 5.6 本章小结 192 第6章 泛型 193 6.1 泛型简介 193 6.1.1 泛型与多态 193 6.1.2 为何引进泛型 194 6.1.3 Java与Kotlin中的泛型 195 6.2 型变 197 6.2.1 Java的类型通配符 197 6.2.2 泛型和数组的型变 201 6.3 Kotlin中的泛型 205 6.3.1 out T与in T 205 6.3.2 声明处型变 206 6.3.3 类型投影 206 6.4 泛型类 207 6.5 泛型函数 208 6.6 本章小结 208 第7章 面向对象编程 209 7.1 面向对象编程思想 209 7.1.1 一切皆是映射 209 7.1.2 二进制01与易经阴阳 211 7.1.3 从面向过程到面向对象 212 7.2 类与构造函数 215 7.2.1 声明类 216 7.2.2 构造函数 216 7.2.3 类的属性 218 7.2.4 函数(方法) 219 7.3 抽象类 219 7.3.1 抽象类的定义 219 7.3.2 抽象函数 220 7.3.3 抽象属性和抽象类 221 7.4 接口 223 7.4.1 接口定义 223 7.4.2 实现接口 224 7.4.3 覆盖冲突 225 7.4.4 接口中的属性 225 7.5 抽象类和接口的差异 226 7.6 继承 227 7.6.1 open类 227 7.6.2 多重继承 228 7.7 枚举类 230 7.7.1 枚举类基本用法 231 7.7.2 初始化枚举值 231 7.7.3 使用枚举常量 232 7.8 注解类 233 7.8.1 声明注解 233 7.8.2 使用注解 234 7.9 单例模式与伴生对象 234 7.9.1 单例模式 234 7.9.2 object对象 235 7.9.3 嵌套object对象 236 7.9.4 匿名object 238 7.9.5 伴生对象 239 7.10 密封类 242 7.11 数据类 243 7.11.1 构造函数中的val/var 243 7.11.2 领域实体类 245 7.11.3 数据类的概念 245 7.11.4 数据类的限制 246 7.11.5 数据类的解构 248 7.11.6 标准数据类Pair和Triple 248 7.12 嵌套类 249 7.12.1 嵌套类:类中的类 249 7.12.2 内部类 250 7.12.3 匿名内部类 250 7.13 委托 252 7.13.1 代理模式 252 7.13.2 类的委托 253 7.13.3 委托属性 255 7.14 本章小结 260 第8章 函数式编程 261 8.1 函数式编程概述 261 8.1.1 函数式编程与面向对象编程 262 8.1.2 函数式编程基本特性 265 8.1.3 函数式编程核心思想 266 8.2 在Kotlin中使用函数式编程 284 8.2.1 Kotlin中的函数 284 8.2.2 扩展函数 286 8.2.3 中缀函数 286 8.2.4 函数参数 287 8.2.5 函数返回类型 289 8.2.6 单表达式函数 289 8.2.7 函数作用域 289 8.2.8 泛型函数 290 8.2.9 高阶函数 290 8.2.10 匿名函数 291 8.2.11 Lambda表达式 291 8.2.12 it:单个参数的隐式名称 292 8.2.13 闭包 292 8.2.14 带接收者的函数字面值 293 8.2.15 具体化的类型参数 293 8.2.16 尾递归tailrec 294 8.3 本章小结 295 第9章 轻量级线程:协程 296 9.1 协程的基本概念 296 9.2 协程的基本操作 297 9.2.1 搭建项目 297 9.2.2 简单协程示例 298 9.2.3 使用launch函数启动协程 299 9.2.4 CommonPool对象 299 9.2.5 挂起函数 301 9.2.6 runBlocking函数 302 9.2.7 等待一个协程任务执行完毕 303 9.2.8 取消协程 306 9.2.9 协程取消失效 307 9.2.10 计算代码协程的取消方式 308 9.2.11 在f?inally中的协程代码 310 9.2.12 协程中不被取消的代码块 312 9.2.13 设置协程超时时间 313 9.3 挂起函数 314 9.3.1 按默认顺序执行 314 9.3.2 使用异步并发执行 315 9.4 协程上下文与调度器 316 9.4.1 调度和线程 316 9.4.2 父子协程 318 9.5 通道与管道 319 9.5.1 通道vs阻塞队列 319 9.5.2 关闭通道和迭代遍历元素 320 9.5.3 生产者-消费者模式 321 9.5.4 使用管道生产无限序列 322 9.5.5 管道与无穷质数序列 323 9.5.6 通道缓冲区 324 9.5.7 构建无穷惰性序列 324 9.6 协程与线程 325 9.6.1 轻量级的协程 325 9.6.2 协程vs守护线程 326 9.6.3 区别 327 9.6.4 协程的好处 328 9.6.5 Kotlin协程的内部机制 328 9.7 本章小结 329 第10章 Kotlin与Java互操作 330 10.1 在Kotlin中调用Java 330 10.1.1 调用Okhttp库示例 331 10.1.2 使用Java的集合类 332 10.1.3 调用Java中的Getter和Setter 333 10.1.4 调用Java中返回void的方法 334 10.1.5 调用来自Java中的null 335 10.1.6 使用Java的泛型 336 10.1.7 数组的互操作 337 10.1.8 可变参数的互操作 337 10.1.9 检查Java中的异常 337 10.1.10 调用Java的Object方法 338 10.1.11 访问Java静态成员 340 10.1.12 使用Java的反射 340 10.1.13 SAM转换 341 10.2 在Java中调用Kotlin 342 10.2.1 访问Kotlin属性 342 10.2.2 调用Kotlin的包级函数 344 10.2.3 调用Kotlin中的实例字段 347 10.2.4 调用Kotlin中的静态字段 348 10.2.5 调用Kotlin中的静态方法 349 10.2.6 Kotlin与Java的可见性 350 10.2.7 生成默认参数函数的重载 352 10.2.8 显式声明Kotlin中的异常 353 10.2.9 关键字冲突的互操作 355 10.2.10 Nothing类型 355 10.3 类型映射 356 10.4 Kotlin与Java的简单实例对比 357 10.5 本章小结 364 第三部分 综合实战 第11章 使用Kotlin集成Spring Boot开发Web服务端 366 11.1 Spring Boot简介 366 11.2 系统架构技术栈 367 11.3 准备工作 367 11.3.1 创建工程 367 11.3.2 Gradle配置文件说明 369 11.4 数据库层开发 370 11.4.1 Endpoint监控接口 373 11.4.2 实体类 375 11.4.3 数据访问层代码 377 11.5 后端逻辑开发 379 11.5.1 控制器逻辑层 379 11.5.2 启动初始化CommandLine-Runner 380 11.5.3 应用启动类 380 11.5.4 Model数据绑定 382 11.5.5 模板引擎视图页面 383 11.5.6 运行测试 383 11.6 前端后端集成 384 11.6.1 引入前端组件 384 11.6.2 实现写文章模块 386 11.6.3 加上导航栏 388 11.6.4 抽取公共模板文件 389 11.6.5 写文章的控制器层接口 390 11.6.6 前端Ajax请求 390 11.6.7 文章详情页 391 11.6.8 添加Markdown支持 393 11.6.9 文章列表分页搜索 395 11.7 Spring 5.0对Kotlin的支持 397 11.8 本章小结 399 第12章 使用Kotlin集成Gradle开发 400 12.1 使用Gradle构建Kotlin工程 400 12.2 使用Kotlin编写Gradle构建配置文件 405 12.3 本章小结 407 第13章 使用Kotlin和Anko的Android开发 408 13.1 什么是Anko 408 13.2 快速入门实例 409 13.2.1 功能介绍 410 13.2.2 使用Android Studio新建项目 411 13.2.3 设计UI界面主题颜色 415 13.2.4 核心依赖配置 417 13.2.5 代码编写 421 13.2.6 运行测试 435 13.3 本章小结 437 第14章 使用 Kotlin DSL 438 14.1 什么是DSL 439 14.2 Kotlin的DSL特性支持 441 14.3 使用kotlinx.html DSL写前端代码 442 14.4 实现一个极简的HTTP DSL 447 14.5 本章小结 454 第15章 Kotlin 文件IO操作与多线程 455 15.1 Kotlin IO基本操作 455 15.2 正则表达式 463 15.3 Kotlin的多线程 466 15.4 本章小结 469 第16章 使用 Kotlin Native 470 16.1 Kotlin Native简介 470 16.2 快速开始Hello World 471 16.3 Kotlin Native与C语言互操作 477 16.4 Kotlin Native编译器konan简介 486 16.5 本章小结 494