Kotlin实战
  • 推荐3
  • 收藏7
  • 浏览3.5K

Kotlin实战

Dmitry Jemerov , Svetlana Isakova (作者)  覃宇 , 罗丽 , 李思阳 , 蒋扬海 (译者)

  • 书  号:978-7-121-32158-0
  • 出版日期:2017-08-01
  • 页  数:360
  • 开  本:16(185*235)
  • 出版状态:正在印刷
  • 原书名: Kotlin in Action
  • 原书号:9781617293290
  • 维护人:张春雨
纸质版 ¥89.00
本书将从语言的基本特性开始,逐渐覆盖其更多的高级特性,尤其注重讲解如何将 Koltin 集成到已有 Java 工程实践及其背后的原理。本书分为两个部分。第一部分讲解如何开始使用 Kotlin 现有的库和API,包括基本语法、扩展函数和扩展属性、数据类和伴生对象、lambda 表达式,以及数据类型系统(着重讲解了可空性和集合的概念)。第二部分教你如何使用 Kotlin 构建自己的 API,以及一些深层次特性——约定和委托属性、高阶函数、泛型、注解和反射,以及领域特定语言的构建。本书适合广大移动开发者及入门学习者,尤其是紧跟主流趋势的前沿探索者。
首著席卷而来 Android界Swift Java全兼容 谷歌官方头牌 移动开发巨变
覃宇,ThoughtWorks 高级咨询师,10余年移动应用开发经验,Android 技术专家,曾为AOSP贡献过测试用例;目前专注于移动应用的架构设计、自动化测试以及持续交付。
罗丽,高级软件工程师,移动技术开发顾问,拥有丰富的软件开发经验, 熟悉React Native,Android,iOS等多种开发技术。目前任职于ThoughtWorks海外事业部,曾在多个大型移动应用项目中担任技术顾问。
李思阳,ThoughtWorks咨询师,移动开发工程师。熟悉Android、Mobile Web相关技术,有着丰富的移动应用开发经验,在移动应用体验和兼容性相关领域有独特的见解;长期关注Android领域相关技术动向。
蒋扬海,ThoughtWorks移动开发咨询师,深耕Android开发多年,应用开发经验丰富,对Android开发领域的技术有广泛的涉猎,对Android技术动向有着敏锐的洞察力。


当我在 2010 年春季第一次拜访 JetBrains 的时候,我相当确定世界上不需要另一种通用编程语言了。我认为现有的 JVM 上的语言已经足够好了,谁会有想法去创建一门新语言呢?在经过大约一个小时的关于大规模代码库上产品问题的讨论后我被完全说服了,并且后来成为 Kotlin 一部分的最初想法就已经被描绘在白板上。很快我就加入了 JetBrains 来主导这门语言的设计与编译器的开发工作。
到今天,六年多的时光过去了,我们也快要发布第二个版本。我们已经拥有超过 30 人的团队和数以千计的活跃用户,还有很多让我们难以轻易实现的精彩的设计理念。但是不要担心,这些想法在进入这门语言之前还必须经过缜密的考察。我们希望这本书的篇幅依然能够容得下 Kotlin 的未来。
学习一门编程语言是一个令人兴奋而且常常是回报颇丰的尝试。如果它是你的第一门语言,通过它你能学到整个编程的新世界。如果不是,它会使你以新的术语来思考熟悉的东西,从而以更高层次的抽象来更深入地了解它们。本书主要针对后者,即面向已经熟悉 Java 的读者。
从头开始设计一门语言可能是一项具有挑战性的任务,但是使其与另一门语言融洽的工作就是另一回事了——尤其是那门语言还包含了许多的愤怒的食人魔,以及一些阴暗的地牢(在这一点上你如果不相信可以去问 C++ 的创造者 Bjarne Stroustrup)。与 Java 的互操作性(这就是 Java 与 Kotlin 之间是如何互相混合调用的)是 Kotlin 的基石之一,本书也投入了很多的注意力在这一点上。互操作性对于在一个已有的 Java 代码库中逐步地引入 Kotlin 非常重要。即使从头开始开发一个新项目时,也必须考虑到能够将这门语言融入一个拥有更大图景的平台中去,而以 Java 编写的所有函数库就是这样的一个平台。
当我在编写本书时,两个新的目标平台正在开发 :Kotlin 现在可以在 JavaScript虚拟机上运行以支持全栈 web 开发,并且还将很快能够直接编译成原生代码,从而在需要的时候能够脱离任何的虚拟机来运行。 1 所以,虽然本书是面向 JVM 的,但是你从中学到的很多东西也是可以应用于其他运行环境的。
本书作者从项目伊始就已经是 Kotlin 团队的成员,所以他们对语言本身和内部实现非常熟悉。他们在会议演讲、研讨会及 Kotlin 课程方面的经验使他们能够对预期的常见问题及可能的陷阱,提供良好的阐述。本书既阐释了语言特征背后的高级概念,也提供了足够深入的细节。
希望你能享受与我们的语言及本书相处的时光。正如我经常在我们社区的帖子中说的那样 :使用 Kotlin 愉快!
ANDREY BRESLAV,JetBrains Kotlin 首席设计师
前言
关于 Kotlin 想法的构思 2010 年诞生于 JetBrains。当时,JetBrains 已经是许多程序语言开发工具的知名供应商,包括 Java、C#、JavaScript、Python、Ruby 和 PHP。Java IDE——IntelliJ IDEA,Groovy 和 Scala 的插件,都是我们的旗舰产品。
为各种程序语言构建开发工具的经验给了我们对语言设计领域全面的理解和独特的观点。而基于 IntelliJ 平台的 IDE,包括 IntelliJ IDEA,仍然是用 Java 开发的。我们甚至都有点羡慕在 .NET 团队中的同事,他们使用 C#,一种现代、强大、迅速进化的语言进行开发。但是我们没有看到任何一种可以用来取代 Java 的语言。
对于这样的一门语言我们有哪些要求呢?首要而且最明确的要求就是它必须是静态类型的。我们想象不到其他任何一种——开发一个拥有数百万行代码的代码库许多年后——还不把人逼疯的办法。其次,我们需要与现有的 Java 代码完全兼容。这样的代码库是 JetBrains 的一笔巨大财富,我们承受不起失去它或是因为互操作性的难度而使其贬值的损失。再次,我们不愿意在工具质量方面接受任何的妥协。开发者的生产力是 JetBrains 作为一个公司最重要的价值,而强大的工具是达到这一目的的必要条件。最后,我们需要的是一种易于学习和理解的语言。
当看到一个我们公司未能满足的需要时,我们知道其他公司也处在一个相似的境地,我们希望我们的解决方案能够在 JetBrains 之外找到许多用户。带着这样的初心,我们决定走上一条创建一门新语言 :Kotlin 的道路。事实上,这个项目花费了超出我们预期的时间,在 Kotlin 1.0 最终诞生时,距离第一行代码提交到代码库中已经过去了超过五年 ;但是现在我们可以确信,这门语言找到了它的受众并且这些人都留了下来。
Kotlin 以靠近俄罗斯圣彼得堡的一座岛屿命名,Kotlin 的大部分开发团队就在那里。在使用岛屿命名这件事上,我们遵循了 Java 和 Ceylon 确立的先例,但我们决定选用一处靠近我们家乡的地方(在英语中,这个名称通常的发音是“cot-lin”,而不是“coat-lin”或者“caught-lin”)。
在这门语言临近发布之际,我们意识到一本由参与了语言设计决策人员撰写的关于 Kotlin 的书籍是有价值的,他们可以自信地解释为什么 Kotlin 中的事物是以它们的方式运行的。本书就是这种努力的结果,我们希望它能帮助你学习和理解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 服务器端的 Kotlin ...............................................................................8
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 交互式 shell ........................................................................................15
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 修饰符 :默认为 final ..................................72
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 排序运算符 :compareTo ................................................................187
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 内部 DSL ........................................................................................296
11.1.3 DSL 的结构 ....................................................................................297
11.1.4 使用内部 DSL 构建 HTML...........................................................298
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 设计的内部 DSL ..................................317
11.4.4 Anko :动态创建 Android UI ........................................................320
11.5 小结 ............................................................................................................322
A 构建 Kotlin 项目 ..................................................................323
B Kotlin 代码的文档化 ............................................................327

本书勘误

印次
  • 页码:封底  •  行数:5  •  印次: 1

    “这本书保持了 Manning 实战系列的水准,满足了你快速提高生成力的所有需要”
    应为
    “这本书保持了 Manning 实战系列的水准,满足了你快速提高生产力的所有需要”

    lsyiverson 提交于 2017/11/2 17:36:16
    张春雨 确认于 2017/11/13 13:52:18
  • 页码:19  •  行数:13  •  印次: 1

    除了循环(for、do和do/while)以外大多数控制结构…
    应为
    除了循环(for、while和do/while)以外大多数控制结构…

    mrzhqiang 提交于 2017/12/26 10:06:59
    张春雨 确认于 2018/1/9 10:25:52
  • 页码:36  •  行数:23  •  印次: 1

    “when 循环和 Java 完全一样”应为“while 循环和 Java 完全一样”

    lsyiverson 提交于 2017/8/16 0:05:52
    张春雨 确认于 2017/8/25 14:56:05
  • 页码:36  •  行数:28  •  印次: 1

    “when循环和Java完全一样”中的when应为while

    静厚霖 提交于 2018/10/17 23:18:17
    张春雨 确认于 2018/11/2 11:29:38
  • 页码:39  •  行数:-3  •  印次: 1

    “或者它的逆运算,!n” 应为 “或者它的逆运算,! in”

    rayworks 提交于 2017/8/11 18:00:16
    张春雨 确认于 2017/8/25 14:39:41

读者评论

  • 40页,变换成a<=c && c<=z
    a和z应该有单引号

    sunwq发表于 2022/4/20 13:27:22
  • 啥时候出电子版

    md611发表于 2022/1/25 20:25:38
  • 文章3.2.3里面提到的一个@file:JvmName(“StringFun”) ,比如我想要在其他类中这样调用(两个类都是在同一包下)StringFun.**,却无法在同一包下访问,请问这是怎么回事呢

    kotlin发表于 2018/1/31 17:57:58
  • 86页 第二行 (‘@’)) 多了个括号吧!

    记忆的淡化发表于 2018/1/17 9:09:00
  • 啥时候出电子版

    姜鹏发表于 2017/12/26 14:03:45

相关博文

  • Kotlin 初体验:主要特征与应用

    Kotlin 初体验:主要特征与应用

    管理员账号 2017-08-15

    小编说:Kotlin 是一种针对 Java 平台的新编程语言。它简洁、安全、务实,并且专注于与 Java 代码的互操作性。它几乎可以用在现在 Java 使用的任何地方 :服务器端开发、Android 应用,等等。本文我们将详细地探讨 ...

    管理员账号 2017-08-15
    1354 0 0 0

相关图书

亿级流量系统架构设计与实战

李琛轩 (作者)

本书涵盖了亿级用户应用后台通用的技术和系统架构设计思路,在内容结构上分为三大篇:架构知识篇(第1~3章),作为全书的基础知识篇,首先介绍后台的关键组件构成以及机...

 

算法笔记(第2版)

刁瑞 谢妍 (作者)

ChatGPT掀起了现象级的风暴,赶超ChatGPT潮流,算法突破是关键。 本书介绍了若干常见算法,涉及排序、哈希、动态规划与近似算法、高斯消去法、图论与线性...

 

看漫画学Python:有趣、有料、好玩、好用(全彩修订版)

关东升 赵大羽 (作者)

ython是一门既简单又强大的编程语言,被广泛应用于数据分析、大数据、网络爬虫、自动化运维、科学计算和人工智能等领域。Python也越来越重要,成为国家计算机等...

 

Linux从入门到精通

张启玉 (作者)

本书以CentOS 7.8为演示系统,以阿里云为演示服务器,从Linux常用命令入手,从一毕业就要入职公司的上手要求出发,重实战、轻原理,目的就是要带领读者从一...

 

看漫画学Python 2:有趣、有料、好玩、好用(全彩进阶版)

关东升 ,赵大羽 (作者)

本书是《看漫画学Python》的进阶版本,继续秉承有趣、有料、好玩、好用的理念,并继续采用《看漫画学Python》一书中3个不同的漫画人物角色,通过这3个角色之...

 

趣玩Python:自动化办公真简单(双色+视频版)

本书以数据收集→数据清洗→数据分析→数据可视化→根据数据可视化结果(即图表)做决策为脉络,介绍Python在实际工作场景中的应用,侧重于用Python解决工作中...