Kotlin从基础到实战

黑马程序员人民邮电出版社 · 中国2021年7月

评分 3.8
字数
14.1万字
章节数
285
ISBN
9787115494405

标签

编程设计 互操作协程泛型游戏开发编程教材面向对象从基础到实战案例实战编程入门

内容简介

本书从初学者的角度详细讲解了Kotlin开发中常用的多种技术。全书共13章,内容包括Kotlin入门、Kotlin编程基础、函数、面向对象、集合、lambda编程、泛型、Gradle、协程、“坦克大战”游戏开发、DSL、Kotlin与Java互操作、时钟。

本书通过典型的案例、通俗易懂的语言阐述面向对象中的抽象概念,在集合、Lambda编程、泛型、Gradle、协程等章节中,通过剖析案例、分析代码结构、解决常见问题等方式,帮助初学者培养良好的编程习惯。

第10章运用前几章的基础知识实现了一个坦克大战的游戏案例开发。第11~13章分别介绍了DSL、Kotlin与Java进行互操作以及通过Kotlin语言实现一个JavaScript语言的时钟项目,帮助初学者掌握Kotlin语言与Java语言、JavaScript语言的互操作。 本书既可作为高等院校本、专科计算机相关专业的教材,也可作为社会培训教材,是一本适合广大编程爱好者参考和学习的书籍。

为了帮助编程者更好地学习本书中的内容,本书还提供了配套的源代码与视频等资源,方便读者学习。

编辑推荐

《Kotlin从基础到实战》是一本面向编程初学者和Android开发者的技术教程,由业内知名教育机构黑马程序员编著,人民邮电出版社出版。本书系统性地梳理了Kotlin语言的语法特性,核心机制以及在实际项目中的应用,旨在帮助读者平滑地从理论过渡到实践。

从内容结构来看,本书遵循了从易到难的学习路径,前半部分夯实基础,详细讲解基本语法,函数,类与对象,Lambda表达式等核心概念;后半部分则聚焦于实战,深入探讨协程,DSL,与Java互操作等高级主题,并最终引导至Android应用开发。这种编排方式符合认知规律,尤其适合希望建立完整知识体系的读者。

作为一本实战导向的教程,本书的价值不仅在于知识的传授,更在于其项目驱动的教学思路。书中包含了大量贴近实际开发的示例代码和综合案例,能够让读者在动手编码的过程中深化理解,避免陷入'纸上谈兵'的困境。对于有志于进入Android开发领域或希望将现有Java技能迁移至Kotlin的开发者而言,本书提供了一个结构清晰,内容充实的路线图。

需要指出的是,技术书籍的时效性至关重要。Kotlin语言本身在持续演进,Android开发的最佳实践也在不断更新。读者在跟随本书学习时,应具备查阅官方最新文档的意识,将书中的核心原理与当前的技术环境相结合,以获得最佳的学习效果。总体而言,这是一本扎实,实用的入门及进阶指南。

适合谁读

适合

不适合

阅读建议

  1. 建议按照章节顺序阅读,动手敲写每一段示例代码,理解其运行结果
  2. 重点攻克'函数式编程','空安全','协程'等Kotlin特色章节,并与自己熟悉的语言进行对比
  3. 将书末的实战项目作为阶段性检验,尝试在其基础上进行功能扩充或修改,以巩固学习成果

出版社简介

人民邮电出版社 中国 · 成立于 1953 年

人民邮电出版社以科技、计算机与信息通信类图书见长,并由此延伸至摄影、艺术、软件学习与励志成长等门类,形成较为多元的出版方向。库内图书既涵盖《重构与模式(修订版)》《华为交换机学习指南(第二版)》等计算机与通信技术读物,也收录《小王子(中英法彩绘典藏纪念版)》《了不起的盖茨比》《假如给我三天光明》等双语典藏类作品;《北京十年:1980-1990》与《鬼刀 WLOP个人插画作品集》则体现其在摄影与艺术领域的布局。作者资源包括安东尼·圣埃克苏佩里、海伦·凯勒、Joshua Kerievsky、王达、张兆增与WLOP等。

目录

  1. 版权信息
  2. 内容提要
  3. 前言
  4. 第1章 Kotlin入门
  5. 1.1 Kotlin简介
  6. 1.1.1 Kotlin的前景
  7. 1.1.2 Kotlin的特性
  8. 1.2 Kotlin开发环境搭建
  9. 1.2.1 Kotlin常用开发工具
  10. 1.2.2 IntelliJ IDEA的安装
  11. 1.3 开发第一个Kotlin程序
  12. 1.4 本章小结
  13. 第2章 Kotlin编程基础
  14. 2.1 Kotlin的基本语法
  15. 2.1.1 Kotlin代码的基本格式
  16. 2.1.2 Kotlin中的注释
  17. 2.2 Kotlin中的变量
  18. 2.2.1 变量的定义
  19. 2.2.2 变量的数据类型
  20. 2.3 运算符
  21. 2.3.1 算术运算符
  22. 2.3.2 赋值运算符
  23. 2.3.3 比较运算符
  24. 2.3.4 逻辑运算符
  25. 2.4 字符串
  26. 2.4.1 字符串的定义
  27. 2.4.2 字符串的常见操作
  28. 2.5 选择结构语句
  29. 2.5.1 if条件语句
  30. 2.5.2 when条件语句
  31. 2.6 循环结构语句
  32. 2.6.1 while循环语句
  33. 2.6.2 do…while循环语句
  34. 2.6.3 for循环语句
  35. 2.6.4 循环嵌套
  36. 2.6.5 forEach循环语句
  37. 2.6.6 跳转语句(continue、break)
  38. 2.7 区间
  39. 2.7.1 正向区间
  40. 2.7.2 逆向区间
  41. 2.7.3 步长
  42. 2.8 数组
  43. 2.8.1 数组的定义
  44. 2.8.2 数组的常见操作
  45. 2.9 变量的类型转换
  46. 2.9.1 类型检查
  47. 2.9.2 智能类型转换
  48. 2.9.3 强制类型转换
  49. 2.10 空值处理
  50. 2.10.1 可空类型变量(?)
  51. 2.10.2 安全调用符(?.)
  52. 2.10.3 Elvis操作符(?:)
  53. 2.10.4 非空断言(!!.)
  54. 2.11 本章小结
  55. 第3章 函数
  56. 3.1 函数的介绍
  57. 3.1.1 函数的定义
  58. 3.1.2 函数的类型
  59. 3.1.3 单表达式函数
  60. 3.1.4 函数的参数
  61. 3.2 函数的分类
  62. 3.2.1 顶层函数
  63. 3.2.2 成员函数
  64. 3.2.3 局部函数
  65. 3.2.4 递归函数
  66. 3.2.5 尾递归函数
  67. 3.2.6 函数重载
  68. 3.3 本章小结
  69. 第4章 面向对象
  70. 4.1 面向对象的概念
  71. 4.2 类与对象
  72. 4.2.1 类的定义
  73. 4.2.2 对象的创建
  74. 4.2.3 类的封装
  75. 4.3 构造函数
  76. 4.3.1 主构函数
  77. 4.3.2 this关键字
  78. 4.3.3 次构函数
  79. 4.4 类的继承
  80. 4.4.1 类的继承
  81. 4.4.2 方法重写
  82. 4.4.3 super关键字
  83. 4.5 抽象类和接口
  84. 4.5.1 抽象类
  85. 4.5.2 接口
  86. 4.6 常见类
  87. 4.6.1 嵌套类
  88. 4.6.2 内部类
  89. 4.6.3 枚举类
  90. 4.6.4 密封类
  91. 4.6.5 数据类
  92. 4.6.6 单例模式
  93. 4.6.7 伴生对象
  94. 4.7 委托
  95. 4.7.1 类委托
  96. 4.7.2 属性委托
  97. 4.7.3 延迟加载
  98. 4.8 异常
  99. 4.8.1 什么是异常
  100. 4.8.2 try…catch和finally
  101. 4.8.3 throw关键字
  102. 4.8.4 受检异常
  103. 4.8.5 自定义异常
  104. 4.9 本章小结
  105. 第5章 集合
  106. 5.1 集合概述
  107. 5.2 List接口
  108. 5.2.1 List接口简介
  109. 5.2.2 不可变List
  110. 5.2.3 可变MutableList
  111. 5.3 Set接口
  112. 5.3.1 Set接口简介
  113. 5.3.2 不可变Set
  114. 5.3.3 可变MutableSet
  115. 5.4 Map接口
  116. 5.4.1 Map接口简介
  117. 5.4.2 不可变Map
  118. 5.4.3 可变MutableMap
  119. 5.5 本章小结
  120. 第6章 Lambda编程
  121. 6.1 Lambda表达式入门
  122. 6.1.1 Lambda表达式简介
  123. 6.1.2 Lambda表达式返回值
  124. 6.2 高阶函数的使用
  125. 6.2.1 函数作为参数使用
  126. 6.2.2 函数作为参数优化
  127. 6.2.3 函数作为返回值
  128. 6.3 标准库中的高阶函数
  129. 6.3.1 高阶函数操作集合
  130. 6.3.2 标准库中的高阶函数
  131. 6.4 内联函数
  132. 6.4.1 使用内联函数
  133. 6.4.2 禁用内联函数
  134. 6.5 本章小结
  135. 第7章 泛型
  136. 7.1 泛型的定义
  137. 7.2 泛型的分类
  138. 7.2.1 泛型类
  139. 7.2.2 泛型接口
  140. 7.2.3 泛型方法
  141. 7.3 泛型约束
  142. 7.3.1 泛型约束的必要性
  143. 7.3.2 泛型约束<T :类或接口>
  144. 7.4 子类和子类型
  145. 7.4.1 继承与子类型
  146. 7.4.2 接口与子类型
  147. 7.4.3 可空类型的子类型
  148. 7.5 协变与逆变
  149. 7.5.1 协变
  150. 7.5.2 逆变
  151. 7.5.3 点变型
  152. 7.6 泛型擦除与实化类型
  153. 7.6.1 泛型擦除
  154. 7.6.2 泛型通配符
  155. 7.6.3 实化类型
  156. 7.7 本章小结
  157. 第8章 Gradle
  158. 8.1 Gradle简介
  159. 8.2 Gradle程序
  160. 8.2.1 第一个Gradle程序
  161. 8.2.2 Java代码与Kotlin代码共存
  162. 8.3 Gradle的任务
  163. 8.3.1 Gradle中的project和task
  164. 8.3.2 Gradle任务的依赖
  165. 8.3.3 Gradle任务的生命周期
  166. 8.3.4 Gradle任务集
  167. 8.3.5 Gradle默认属性和任务
  168. 8.3.6 Gradle增量式更新任务
  169. 8.4 Gradle的依赖
  170. 8.4.1 Gradle的依赖包管理
  171. 8.4.2 公共仓库和依赖配置
  172. 8.5 Gradle扩展
  173. 8.5.1 Gradle插件自定义扩展
  174. 8.5.2 Gradle调用外部扩展
  175. 8.6 本章小结
  176. 第9章 协程
  177. 9.1 协程简介
  178. 9.1.1 协程概述
  179. 9.1.2 协程的定义
  180. 9.1.3 线程与协程实现对比
  181. 9.2 协程的基本操作
  182. 9.2.1 协程挂起
  183. 9.2.2 挂起函数
  184. 9.2.3 主协程
  185. 9.2.4 协程中的Job任务
  186. 9.2.5 普通线程和守护线程
  187. 9.2.6 线程与协程效率对比
  188. 9.3 协程取消
  189. 9.3.1 协程取消
  190. 9.3.2 协程取消失效
  191. 9.3.3 定时取消
  192. 9.3.4 挂起函数的执行顺序
  193. 9.3.5 通过async启动协程
  194. 9.3.6 协程上下文和调度器
  195. 9.3.7 父子协程
  196. 9.4 管道
  197. 9.4.1 管道简介
  198. 9.4.2 管道的关闭
  199. 9.4.3 生产者与消费者
  200. 9.4.4 管道缓存区
  201. 9.5 本章小结
  202. 第10章 坦克大战
  203. 10.1 项目介绍
  204. 10.1.1 项目概述
  205. 10.1.2 开发环境
  206. 10.1.3 效果展示
  207. 10.2 项目搭建
  208. 10.2.1 项目创建
  209. 10.2.2 添加游戏引擎
  210. 10.3 窗体设计
  211. 10.4 绘制游戏元素
  212. 10.4.1 绘制墙和草坪
  213. 10.4.2 绘制地图
  214. 10.4.3 绘制我方坦克
  215. 10.5 我方坦克移动
  216. 10.5.1 坦克的移动
  217. 10.5.2 移动碰撞处理
  218. 10.6 子弹
  219. 10.6.1 绘制子弹
  220. 10.6.2 计算子弹的位置
  221. 10.6.3 子弹飞行
  222. 10.6.4 销毁脱离窗体的子弹
  223. 10.6.5 子弹的攻与受
  224. 10.6.6 爆炸物的显示
  225. 10.7 敌方坦克
  226. 10.7.1 敌方坦克绘制
  227. 10.7.2 敌方坦克的移动
  228. 10.7.3 敌方坦克自动发射子弹
  229. 10.7.4 双方坦克的相互伤害
  230. 10.8 大本营
  231. 10.8.1 绘制大本营
  232. 10.8.2 实现大本营特性
  233. 10.9 游戏结束与打包
  234. 10.9.1 游戏的结束
  235. 10.9.2 Gradle打包游戏
  236. 10.10 本章小结
  237. 第11章 DSL
  238. 11.1 DSL简介
  239. 11.1.1 DSL概述
  240. 11.1.2 DSL程序
  241. 11.2 DSL的使用
  242. 11.2.1 打印简单的HTML标签
  243. 11.2.2 打印复杂的HTML标签
  244. 11.3 Anko插件
  245. 11.4 本章小结
  246. 第12章 Kotlin与Java互操作
  247. 12.1 在Kotlin中调用Java
  248. 12.1.1 调用Java中的getter/setter方法
  249. 12.1.2 调用Java中的@NotNull注解
  250. 12.1.3 调用Java中的静态成员
  251. 12.1.4 SAM转换
  252. 12.2 在Java中调用Kotlin
  253. 12.2.1 调用Kotlin中的包级函数
  254. 12.2.2 调用Kotlin中的实例字段
  255. 12.2.3 调用Kotlin中的静态字段和方法
  256. 12.2.4 调用Kotlin中的集合类
  257. 12.2.5 显式申明Kotlin中的异常
  258. 12.2.6 关键字冲突的互操作
  259. 12.3 Kotlin与Java中的操作对比
  260. 12.3.1 语法格式对比
  261. 12.3.2 异常检查对比
  262. 12.3.3 可变参数对比
  263. 12.3.4 类的class对象对比
  264. 12.3.5 成员控制权限对比
  265. 12.3.6 默认参数函数对比
  266. 12.4 本章小结
  267. 第13章 时钟
  268. 13.1 时钟项目简介
  269. 13.1.1 项目概述
  270. 13.1.2 开发环境
  271. 13.2 创建时钟项目
  272. 13.2.1 创建项目
  273. 13.2.2 初始化画布
  274. 13.3 绘制基本元素
  275. 13.3.1 绘制直线、三角形、矩形
  276. 13.3.2 绘制圆形
  277. 13.3.3 填充图形
  278. 13.3.4 绘制文本
  279. 13.4 绘制时钟
  280. 13.4.1 绘制时钟的圆环
  281. 13.4.2 绘制60个圆点
  282. 13.4.3 绘制时钟的数字
  283. 13.4.4 绘制时钟的指针
  284. 13.4.5 设置当前时间
  285. 13.5 本章小结

常见问题

这本书需要读者有Java基础吗? 拥有Java基础会对理解Kotlin与Java的互操作以及部分设计对比有很大帮助,但并非绝对必需。本书从Kotlin本身讲起,任何有一门编程语言基础的读者都可以跟随学习。
书中的实战项目是基于哪个版本的Android和Kotlin? 书籍出版时基于当时的稳定版本。技术更新较快,建议读者在学习时,重点关注项目架构和编程思想,同时参考Kotlin及Android官网的最新文档来适配当前开发环境。
这本书适合作为Kotlin的速成手册或语法查询字典吗? 本书更侧重于系统性的学习与项目构建,虽然内容全面,但并非按字典式编排。适合通读学习,对于语法速查,建议搭配官方文档或在线速查表使用。

本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。

作者简介

黑马程序员 作者

黑马程序员是传智播客(传智教育)旗下的IT教育品牌与教材编写团队,由张孝祥发起,长期专注于Java、Python、前端、大数据等方向的实战型教材开发,其著作多由人民邮电出版社出版。作为集体署名作者,黑马程序员并非单一个人,而是以教学与课程研发为核心的编写团队,其作品强调动手实践与项目驱动。库内收录其作品26种,代表作品包括《软件测试》《Python程序设计现代方法》《微服务架构基础(Spring Boot+Spring Cloud+Docker)》《Java Web程序设计任务教程》《JavaScript前端开发案例教程》《网页设计与制作项目教程(HTML+CSS+JavaScript)》《PHP基础案例教程》《Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)》等,涵盖编程设计、软件学习、计算机综合与考试等类别。其写作注重案例与任务引导,服务于IT技能学习者的入门与进阶需求。公开资料有限,除上述信息外,不作更多生平层面的介绍。