失效链接处理 |
Kotlin实战 PDF 下载
转载自:https://www.jb51.net/books/634928.html
本站整理下载:
版权归出版社和原作者所有,链接已删除,请购买正版
用户下载说明:
电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍:
http://product.dangdang.com/25124461.html
相关截图:
资料简介: 《Kotlin 实战》将从语言的基本特性开始,逐渐覆盖其更多的高级特性,尤其注重讲解如何将 Koltin 集成到已有 Java 工程实践及其背后的原理。本书分为两个部分。*部分讲解如何开始使用 Kotlin 现有的库和API,包括基本语法、扩展函数和扩展属性、数据类和伴生对象、lambda 表达式,以及数据类型系统(着重讲解了可空性和集合的概念)。第二部分教你如何使用 Kotlin 构建自己的 API,以及一些深层次特性——约定和委托属性、高阶函数、泛型、注解和反射,以及领域特定语言的构建。《Kotlin 实战》适合广大移动开发者及入门学习者,尤其是紧跟主流趋势的前沿探索者。 资料目录: 第 1 部分 Kotlin 简介 1 1 Kotlin :定义和目的 3 1.1 Kotlin 初体验 3 1.2 Kotlin 的主要特征4 1.2.1 目标平台 :服务器端、Android 及任何 Java 运行的地方 4 1.2.2 静态类型5 1.2.3 函数式和面向对象 6 1.2.4 免费并开源 7 1.3 Kotlin 应用8 1.3.1 服务器端的 Kotlin8 1.3.2 Android 上的 Kotlin 9 1.4 Kotlin 的设计哲学 10 1.4.1 务实10 1.4.2 简洁 11 1.4.3 安全12 1.4.4 互操作性 13 1.5 使用 Kotlin 工具 14 1.5.1 编译 Kotlin 代码 14 1.5.2 IntelliJ IDEA 和 Android Studio 插件 15 1.5.3 交互式 shell15 1.5.4 Eclipse 插件 15 1.5.5 在线 playground 15 1.5.6 Java 到 Kotlin 的转换器 16 1.6 小结16 2 Kotlin 基础 17 2.1 基本要素 :函数和变量 17 2.1.1 Hello,world!18 2.1.2 函数18 2.1.3 变量20 2.1.4 更简单的字符串格式化 :字符串模板 22 2.2 类和属性 23 2.2.1 属性24 2.2.2 自定义访问器 25 2.2.3 Kotlin 源码布局:目录和包26 2.3 表示和处理选择 :枚举和“when” 28 2.3.1 声明枚举类28 2.3.2 使用“when”处理枚举类 29 2.3.3 在“when”结构中使用任意对象 30 2.3.4 使用不带参数的“when” 31 2.3.5 智能转换 :合并类型检查和转换32 2.3.6 重构 :用“when”代替“if” 34 2.3.7 代码块作为“if”和“when”的分支 35 2.4 迭代事物 :“while”循环和“for”循环 36 2.4.1 “while”循环36 2.4.2 迭代数字 :区间和数列 37 2.4.3 迭代 map 38 2.4.4 使用“in”检查集合和区间的成员39 2.5 Kotlin 中的异常 41 2.5.1 “try”“catch”和“finally” 41 2.5.2 “try”作为表达式 42 2.6 小结44 3 函数的定义与调用 45 3.1 在 Kotlin 中创建集合 45 3.2 让函数更好调用 47 3.2.1 命名参数 48 3.2.2 默认参数值49 3.2.3 消除静态工具类 :顶层函数和属性 50 3.3 给别人的类添加方法 :扩展函数和属性53 3.3.1 导入和扩展函数 54 3.3.2 从 Java 中调用扩展函数54 3.3.3 作为扩展函数的工具函数55 3.3.4 不可重写的扩展函数 56 3.3.5 扩展属性 58 3.4 处理集合 :可变参数、中缀调用和库的支持 59 3.4.1 扩展 Java 集合的 API 59 3.4.2 可变参数 :让函数支持任意数量的参数60 3.4.3 键值对的处理 :中缀调用和解构声明 60 3.5 字符串和正则表达式的处理 62 3.5.1 分割字符串62 3.5.2 正则表达式和三重引号的字符串63 3.5.3 多行三重引号的字符串 64 3.6 让你的代码更整洁 :局部函数和扩展 66 3.7 小结68 4 类、对象和接口 69 4.1 定义类继承结构 70 4.1.1 Kotlin 中的接口 70 4.1.2 open、final 和 abstract 修饰符:默认为 final72 4.1.3 可见性修饰符 :默认为 public 75 4.1.4 内部类和嵌套类 :默认是嵌套类76 4.1.5 密封类 :定义受限的类继承结构79 4.2 声明一个带非默认构造方法或属性的类80 4.2.1 初始化类 :主构造方法和初始化语句块80 4.2.2 构造方法 :用不同的方式来初始化父类83 4.2.3 实现在接口中声明的属性85 4.2.4 通过 getter 或 setter 访问支持字段 87 4.2.5 修改访问器的可见性 88 4.3 编译器生成的方法 :数据类和类委托 89 4.3.1 通用对象方法 89 4.3.2 数据类 :自动生成通用方法的实现 92 4.3.3 类委托 :使用“by”关键字 93 4.4 “object”关键字:将声明一个类与创建一个实例结合起来95 4.4.1 对象声明 :创建单例易如反掌 95 4.4.2 伴生对象 :工厂方法和静态成员的地盘98 4.4.3 作为普通对象使用的伴生对象 100 4.4.4 对象表达式 :改变写法的匿名内部类 102 4.5 小结 104 5 Lambda 编程 105 5.1 Lambda 表达式和成员引用 105 5.1.1 Lambda 简介:作为函数参数的代码块106 5.1.2 Lambda 和集合 107 5.1.3 Lambda 表达式的语法 108 5.1.4 在作用域中访问变量 111 5.1.5 成员引用 114 5.2 集合的函数式 API 116 5.2.1 基础 :filter 和 map 116 5.2.2 “all”“any”“count”和“find”: 对集合应用判断式 118 5.2.3 groupBy :把列表转换成分组的 map 119 5.2.4 flatMap 和 flatten :处理嵌套集合中的元素120 5.3 惰性集合操作 :序列121 5.3.1 执行序列操作 :中间和末端操作 123 5.3.2 创建序列 125 5.4 使用 Java 函数式接口 126 5.4.1 把 lambda 当作参数传递给 Java 方法127 5.4.2 SAM 构造方法:显式地把 lambda 转换成函数式接口 129 5.5 带接收者的 lambda :“with”与“apply”131 5.5.1 “with”函数131 5.5.2 “apply”函数 133 5.6 小结 135 6 Kotlin 的类型系统137 6.1 可空性137 6.1.1 可空类型 138 6.1.2 类型的含义 140 6.1.3 安全调用运算符 :“?:”141 6.1.4 Elvis 运算符:“?:” 143 6.1.5 安全转换 :“as?” 145 6.1.6 非空断言 :“!!”146 6.1.7 “let”函数148 6.1.8 延迟初始化的属性 149 6.1.9 可空类性的扩展 151 6.1.10 类型参数的可空性 153 6.1.11 可空性和 Java 153 6.2 基本数据类型和其他基本类型 157 6.2.1 基本数据类型 :Int、Boolean 及其他158 6.2.2 可空的基本数据类型 :Int?、Boolean? 及其他159 6.2.3 数字转换 160 6.2.4 “Any”和“Any?”:根类型 162 6.2.5 Unit 类型:Kotlin 的“void”163 6.2.6 Nothing 类型:“这个函数永不返回” 164 6.3 集合与数组 164 6.3.1 可空性和集合165 6.3.2 只读集合与可变集合167 6.3.3 Kotlin 集合和 Java 168 6.3.4 作为平台类型的集合171 6.3.5 对象和基本数据类型的数组173 6.4 小结 175 第 2 部分 拥抱 Kotlin 177 7 运算符重载及其他约定179 7.1 重载算术运算符 180 7.1.1 重载二元算术运算 180 7.1.2 重载复合赋值运算符183 7.1.3 重载一元运算符 184 7.2 重载比较运算符 186 7.2.1 等号运算符 :“equals" 186 7.2.2 排序运算符 :compareTo187 7.3 集合与区间的约定 188 7.3.1 通过下标来访问元素 :“get”和“set” 188 7.3.2 “in”的约定190 7.3.3 rangeTo 的约定 191 7.3.4 在“for”循环中使用“iterator”的约定 192 7.4 解构声明和组件函数193 7.4.1 解构声明和循环 194 7.5 重用属性访问的逻辑 :委托属性 195 7.5.1 委托属性的基本操作196 7.5.2 使用委托属性 :惰性初始化和“by lazy()”197 7.5.3 实现委托属性198 7.5.4 委托属性的变换规则202 7.5.5 在 map 中保存属性值 203 7.5.6 框架中的委托属性 204 7.6 小结 205 8 高阶函数 :Lambda 作为形参和返回值 207 8.1 声明高阶函数207 8.1.1 函数类型 208 8.1.2 调用作为参数的函数209 8.1.3 在 Java 中使用函数类 211 8.1.4 函数类型的参数默认值和 null 值 212 8.1.5 返回函数的函数 214 8.1.6 通过 lambda 去除重复代码 216 8.2 内联函数 :消除 lambda 带来的运行时开销218 8.2.1 内联函数如何运作 219 8.2.2 内联函数的限制 221 8.2.3 内联集合操作222 8.2.4 决定何时将函数声明成内联223 8.2.5 使用内联 lambda 管理资源 223 8.3 高阶函数中的控制流225 8.3.1 lambda 中的返回语句:从一个封闭的函数返回225 8.3.2 从 lambda 返回:使用标签返回226 8.3.3 匿名函数 :默认使用局部返回 228 8.4 小结 229 9 泛型 231 9.1 泛型类型参数232 9.1.1 泛型函数和属性 232 9.1.2 声明泛型类 234 9.1.3 类型参数约束235 9.1.4 让类型形参非空 237 9.2 运行时的泛型 :擦除和实化类型参数 238 9.2.1 运行时的泛型 :类型检查和转换 238 9.2.2 声明带实化类型参数的函数241 9.2.3 使用实化类型参数代替类引用 243 9.2.4 实化类型参数的限制244 9.3 变型 :泛型和子类型化 245 9.3.1 为什么存在变型 :给函数传递实参245 9.3.2 类、类型和子类型 246 9.3.3 协变 :保留子类型化关系 248 9.3.4 逆变 :反转子类型化关系 252 9.3.5 使用点变型 :在类型出现的地方指定变型254 9.3.6 星号投影 :使用 * 代替类型参数 257 9.4 小结 261 10 注解与反射 263 10.1 声明并应用注解264 10.1.1 应用注解264 10.1.2 注解目标265 10.1.3 使用注解定制 JSON 序列化 267 10.1.4 声明注解269 10.1.5 元注解 :控制如何处理一个注解 270 10.1.6 使用类做注解参数 271 10.1.7 使用泛型类做注解参数272 10.2 反射 :在运行时对 Kotlin 对象进行自省 273 10.2.1 Kotlin 反射 API :KClass、KCallable、KFunction 和KProperty 274 10.2.2 用反射实现对象序列化278 10.2.3 用注解定制序列化 279 10.2.4 JSON 解析和对象反序列化283 10.2.5 反序列化的最后一步 :callBy() 和使用反射创建对象 287 10.3 小结 291 11 DSL 构建 293 11.1 从 API 到 DSL 293 11.1.1 领域特定语言的概念 295 11.1.2 内部 DSL296 11.1.3 DSL 的结构 297 11.1.4 使用内部 DSL 构建 HTML298 11.2 构建结构化的 API:DSL 中带接收者的 lambda 299 11.2.1 带接收者的 lambda 和扩展函数类型 299 11.2.2 在 HTML 构建器中使用带接收者的 lambda 303 11.2.3 Kotlin 构建器:促成抽象和重用307 11.3 使用“invoke”约定构建更灵活的代码块嵌套 310 11.3.1 “invoke”约定:像函数一样可以调用的对象 310 11.3.2 “invoke”约定和函数式类型 311 11.3.3 DSL 中的“invoke”约定 :在 Gradle 中声明依赖 312 11.4 实践中的 Kotlin DSL 314 11.4.1 把中缀调用链接起来 :测试框架中的“should” 314 11.4.2 在基本数据类型上定义扩展 :处理日期 316 11.4.3 成员扩展函数 :为 SQL 设计的内部 DSL317 11.4.4 Anko :动态创建 Android UI 320 11.5 小结 322 A 构建 Kotlin 项目 323 B Kotlin 代码的文档化 327 C Kotlin 生态系统 331 |