计算机
类型
可以朗读
语音朗读
213千字
字数
2020-08-01
发行日期
展开全部
主编推荐语
玩转Kotlin标准库,了解泛型的来龙去脉,避免错误使用lambda带来的尴尬,编写了不起的高阶函数。
内容简介
本书介绍了Kotlin的基本语法,常用类型,针对对象编程以及一些高阶的知识。
在所有的章节中,都广泛使用图片和会话的介绍方式,以帮助大脑更容易理解和获取信息。让你仿佛置身其中,更高效专注地学习知识,而把一些无关紧要的事情抛之脑后。
本书以某种“划重点”或“记笔记”的方式对某些内容或代码进行注解和说明,读者更容易知道内容和代码的重要部分。从而,有问必答解决的设计也十分准确,它会囊括一些在文中没有提及到,但你可能会疑惑的问题。
目录
- 版权信息
- 作者简介
- 引子 如何使用本书
- 1 开始
- 欢迎来到Kotlin之城
- 你几乎可以在任何地方使用Kotlin
- 本章内容
- 安装IntelliJ IDEA
- 构建一个基本的应用程序
- 构建一个基本的应用程序(继续)
- 构建一个基本的应用程序(继续)
- 你的第一个Kotlin项目
- 新增一个Kotlin文件
- main函数剖析
- 将main函数添加至App.kt文件
- 你可以在main函数里面做些什么呢
- 循环
- 循环示例
- 条件分支
- 带有返回值的if语句
- 更新main函数
- 使用Kotlin的交互式shell
- 你可以在REPL中加入多行代码片段
- Kotlin工具箱
- 2 基本类型和变量
- 你的代码需要变量
- 当你声明变量时会发生什么
- 变量保存了指向对象的引用
- Kotlin的基本类型
- 如何显式声明变量类型
- 根据变量类型正确赋值
- 将一个变量值赋给另一个变量
- 类型转换
- 数值类型转换背后发生了什么
- 小心溢出
- 使用数组存放多个值
- 创建Phrase-O-Matic应用程序
- 向PhraseOMatic.kt中添加代码
- 编译器从数组中元素的值来推测数组的类型
- var表示该变量可以指向不同数组
- val表示该变量永远指向同一个数组
- Kotlin工具箱
- 3 函数
- 我们一起来编写一个游戏“Rock、Paper、Scissors”
- 游戏设计概览
- 让程序选择一个选项
- 如何创建函数
- 可以向函数中传入多个值
- 可以从函数中返回一个值
- 单个表达式函数
- 向Game.kt中添加getGameChoice函数
- getUserChoice函数
- for循环工作原理
- for循环工作原理(续)
- 询问用户的选择
- 验证用户的输入
- 更强大的布尔表达式(续)
- 向Game.kt中添加getUserChoice函数
- 向Game.kt中添加printResult函数
- Game.kt代码(继续)
- Kotlin工具箱
- 4 类和对象
- 使用类定义对象类型
- 如何设计自己的类
- 一起定义一个Dog类
- 如何创建Dog对象
- 如何访问属性及函数
- 创建一个Songs应用
- 神奇的对象创建
- 对象是如何创建的
- 现象背后:调用Dog构造函数
- 深入了解属性
- 灵活的属性初始化
- 如何使用初始化块
- 你必须初始化所有属性
- 如何验证属性值
- 如何编写自定义的getter
- 如何编写自定义的setter
- Dog项目的完整代码
- 代码继续
- Kotlin工具箱
- 5 子类和父类
- 继承帮助你避免代码重复
- 我们将要做什么
- 设计一个animal类继承结构
- 使用继承避免子类中的代码重复
- 子类应该覆盖什么
- 我们可以将一些动物分类
- 添加Canine和Feline类
- 使用IS-A测试类的层次结构
- 继承树中的任意子类都满足IS-A测试
- 创建一些Kotlin动物
- 使用open关键字声明父类及它的属性和方法
- 子类是如何继承父类的
- 如何(以及何时)覆盖属性
- 覆盖属性不仅仅让你可以指定默认值
- 如何覆盖方法
- 被覆盖的方法或属性仍然是open的
- 向Animals项目中添加Hippo类
- 添加Canine和Wolf类
- 哪个方法被调用了
- 当你调用方法时,变量指向对象的方法进行响应
- 你可以使用父类型作为方法的参数和返回值类型
- 更新后的Animals代码
- 更新后的Animals代码(续)
- Kotlin工具箱
- 6 抽象类和接口
- 再谈Animal类的层次结构
- 一些类不能被实例化
- 抽象还是具体
- 抽象类可以有抽象属性和方法
- Animal类有两个抽象方法
- 如何实现一个抽象类
- 你必须实现所有的抽象属性和方法
- 更新Animals项目
- 代码继续
- 代码继续
- 独立的类可以有共同的行为
- 接口可以让你在父类层次结构之外定义共同的行为
- 让我们定义Roamable接口
- 如何定义接口属性
- 声明一个类实现了一个接口
- 如何实现多个接口
- 如何决定是创建类、子类、抽象类还是接口
- 更新Animals项目
- 代码继续
- 代码继续
- 接口让你可以使用多态
- 在哪里使用is操作符
- 使用when将变量和一组选项进行比较
- is操作符通常会进行智能转换
- 使用as进行显式转换
- 更新Animals项目
- Kotlin工具箱
- 7 数据类
- ==调用了equals方法
- equals继承自Any父类
- Any类定义的共有行为
- 我们可能希望用equals检查两个对象是否等价
- 数据类允许你创建数据对象
- 数据类覆盖了它们继承的行为
- 使用copy方法复制数据对象
- 数据类定义了componentN方法
- 创建Recipes项目
- 生成的方法仅包含构造函数中定义的属性
- 初始化许多属性可能会导致烦琐的代码
- 如何在构造函数中设置默认值
- 方法也可以使用默认值
- 重载方法
- 更新Recipes项目
- 代码继续
- Kotlin工具箱
- 8 空值和异常
- 从变量中删除对象引用
- 用空值删除一个对象引用
- 你可以在任何能够使用非可空类型的地方使用可空类型
- 创建一个可空类型的数组
- 访问可空类型的方法和属性
- 通过安全调用确保一切安全
- 链式安全调用
- 你可以使用安全调用赋值
- 如果变量的值不为空,使用let执行代码
- 对数组项使用let
- 替代if表达式
- 使用!!操作符故意抛出NullPointerException
- 创建Null Values项目
- 在异常情况下抛出异常
- 使用try/catch捕获异常
- 使用finally去做无论如何你都想做的事情
- 异常是Exception类型的对象
- 你可以显式地抛出异常
- try和throw都是表达式
- Kotlin工具箱
- 9 集合
- 有用的数组
- 数组不能处理的事情
- Kotlin标准库
- List、Set和Map
- 奇妙的List
- 创建MutableList
- 移除一个值
- 改变元素顺序以及批量更改
- 创建Collections项目
- List允许重复项
- 如何创建Set
- Set如何查重
- 哈希码与相等性
- 覆盖hashCode和equals的规则
- 如何使用MutableSet
- 复制MutableSet
- 更新Collections项目
- Map的表演时间
- 如何使用Map
- 创建MutableMap
- 从MutableMap移除条目
- 拷贝Map和MutableMap
- 完整的Collections项目代码
- Kotlin工具箱
- 10 泛型
- 泛型在集合中的使用
- 如何定义MutableList
- 在MutableList中使用类型参数
- 通过泛型类或接口可以做什么
- 接下来要做的事
- 创建Pet类的层次结构
- 定义Contest类
- 添加scores属性
- 创建getWinners方法
- 创建一些Contest对象
- 创建Generics项目
- 代码继续
- Retailer层次结构
- 定义Retailer接口
- 轻松创建CatRetailer、DogRetailer和FishRetailer等对象
- 用out使泛型类型协变
- 更新Generics项目
- 代码继续
- 再定义一个Vet类
- 创建Vet对象
- 用in使泛型类型逆变
- 泛型类型的局部逆变
- 更新Generics项目
- 代码继续
- 代码继续
- Kotlin工具箱
- 11 lambda和高阶函数
- 初识lambda
- lambda的代码格式
- 将lambda赋值给变量
- 调用lambda时会发生什么
- lambda表达式类型
- lambda参数类型的自动解析
- 根据变量类型使用正确的lambda
- 创建Lambdas项目
- 将lambda作为函数参数
- 在函数体中调用lambda
- 代码运行时发生了什么
- 将lambda移到函数括号外面
- 更新Lambdas项目
- 函数可以返回一个lambda
- 将lambda作为函数参数和返回值
- 如何使用combine函数
- 用typealias为已存在的类型取别名
- 更新Lambdas项目
- 代码继续
- Kotlin工具箱
- 12 内置高阶函数
- Kotlin的内置高阶函数
- 用min和max函数处理基础类型
- 深入理解minBy和maxBy的lambda参数设置
- sumBy与sumByDouble函数
- 创建Groceries项目
- 走近filter函数
- 使用map转换集合
- 代码运行时发生了什么
- 像for循环的forEach
- forEach没有返回值
- 更新Groceries项目
- 代码继续
- 使用groupBy划分集合
- 在链式调用中使用groupBy
- 如何使用fold函数
- fold函数背后的故事
- 再举几个fold函数的例子
- 更新Groceries项目
- Kotlin工具箱
- 附录i 协程
- 附录ii 测试
- 附录iii 其他
- 索引
展开全部
出版方
机械工业出版社有限公司
机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。