展开全部

主编推荐语

玩转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、科普以及教材、教辅等领域。