Dart编程语言
  • 推荐1
  • 收藏1
  • 浏览1.2K

Dart编程语言

Gilad Bracha (作者)  戴虬 (译者) 徐津平 (责任编辑)

  • 书  号:
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 原书名: The Dart Programming Language
  • 原书号:9780321927705
  • 维护人:付睿
Dart语言是Google力推的新语言,本书全面介绍这门语言。本书总计9章,前6章对Dart的对象、库、函数、类型、表达式与语句等基础知识进行了详细介绍;第7、8章对反射和isolate等进阶内容进行了深入讲解;第9章为总结。本书与众不同之处是,除了介绍语言特性,更着重于讲解语言背后的原理和思想。
Google力推新语言,语言创造人Gilad Bracha亲自执笔,不仅介绍了语言特性,还介绍了语言背后的原理和思想
戴虬,毕业于华东交通大学,现在在广州联亿网络科技有限公司任Web开发工程师,并且是Dartlang社区负责人。热爱Dart编程语言,希望这门语言有很好的发展,并不遗余力地推广、维护。
前言

本书与其他Dart书籍有什么不同?其他Dart书籍都注重于实操,本书着重于讲解原理和思想。
Dart的实操非常重要,但它们可能会逐年变化,并可能一直变化下去。相比之下,Dart背后的原理应该很少会随时间而改变。如果你对激发Dart语言设计的想法及它们是如何实现的,还有如何权衡现实世界对Dart的需求等感兴趣,那么你应该阅读本书。
Dart的主要思想之一是可选类型。我在几十年前就开始从事可选类型的工作,今天我们看到使用可选类型系统的语言在飞速增加,我对此感到非常欣慰。虽然Dart和它的任何竞争对手都不像我想要的那样实现可选类型,但可选类型成为主流的事实才是最重要的。
更重要的思想是,Dart是一种面向对象的语言,这不等同于传统意义上的类、继承或其他大多数开发者所理解的概念,它的深层含义可以表述为,一个对象最重要的是它可观察的行为。同样,Dart对这个想法并没有完美地实现,但比大多数主流语言要好。
本书中涉及的另一个关键思想是反射。大部分关于编程的书籍都没有很好地讨论反射。因此,我非常渴望在本书中探讨反射。然而,Dart的反射历史却意外地曲折。
一方面,很多Dart用户都渴望使用反射,有时只是为了用而用,但并不一定适用。另一方面,某些作为Dart编译目标的平台存在严重限制,使得对反射的支持异常昂贵,尤其是需要考虑代码的体积。这种双向压力使Dart的反射陷入尴尬的境地。
我们从一开始就知道代码体积和反射对其影响的敏感性。这个问题及其解决方案在2011年11月的第1个Dart反射设计文档中被讨论。然而,直到实现解决方案且开发者可以轻松使用时,已经花费了四年。
我希望本书有效地传达上述及其他语言设计相关的想法,但它们的好坏由读者来判断。我们可能可以创造一门更加纯粹的语言,并做得更好,但另一方面,我们也不清楚是否可以得到大家的认可。也许有一天我会进行那样的尝试。
本书的写作历时很久。直到我能完整讲述一个关于反射的合理故事,我才完成本书。拖延本书写作的另一个原因是,本书的主题发展得如此之快,以至于它总是面临过时的风险。这种风险还没有过去,但在某个时刻我们需要说“适可而止”。
Dart并没有完美实现驱动其设计的思想。没有人比它的设计者更了解这个事实。然而,它是一门真正的语言,已经被用来书写数百万行的关键任务代码。它以某种方式推动了编程文化的发展,最引人注目的是在可选类型领域。正如有人在丹麦说的:“它本可能更糟”。

致谢

Dart编程语言是大团队努力的结果。Dart的开发工作让我收获许多快乐,我需要跟许多同事合作,其中有很多人更可以称为朋友,跟他们合作是一件非常愉快的事情。我非常荣幸地在本书及Dart语言规范中列举部分曾经和我合作过的同事。
Dart语言是由Lars Bak和Kasper Lund构思和设计的,所以没有他们,本书就不可能存在。Lars是我长期的朋友和同事,从一开始就管理Dart项目。除此之外,Lars让我参与Dart的设计工作,为此,我特别感谢他。Lars和Kasper不仅是非常有天赋的系统设计师和实现者,而且很好相处!
特别感谢Erik Meijer,和他共同开发Dart的异步功能是一种快乐。Erik是一名真正的编程语言专家,且属于非常少见的那种。
如果本书第8章的完成需要感谢Erik,那么第7章的完成就需要感谢Ryan Macnak、Peter Ahé、Erik Ernst的帮助了,他们分别实现了Dart VM中mirrors、dart2js中的mirrors及reflectable库。
本书的写作,不仅得到了Lars的支持,也得到了我的经理Ivan Posva的支持。在过去的四年里,我与Ivan和VM团队的其他成员共享办公空间,他们是:Zachary Anderson、Daniel Andersson、Siva Annamalai、Régis Crelier、Matthias Hausner、Ryan Macnak、John McCutchan、Srdjan Mitrovic和Todd Turnidge。感谢他们的愉快陪伴。
我经常拜访位于丹麦奥胡斯的Dart总部,其过程充满乐趣(即使实际旅途并不有趣)。Linda Lykke Rasmussen的行政支持是无价的。
我对Dart语言规范的编写工作是本书的直接基础来源。这项工作得益于许多人的建议,但只有Lasse Nielsen对细节的不寻常的觉察,使他捕捉到了许多微妙的问题。
我也参与了Dart的标准化工作,Anders Sandholm帮我承担了其中的大部分工作,我对他表示感谢。我还要感谢Dart标准委员会ECMA TC52的其他参与者。
如果没有其他Dart团队成员一直以来的工作,Dart不可能有今天。人很多,这里不便一一列出,但他们都为Dart的今天付出了努力。
和我长期合作的编辑Greg Doench一直非常耐心,我很高兴能与他合作。
和往常一样,我的妻子Weihong和我的儿子Teva,让这一切都是值得的。
Gilad Bracha
加利福尼亚州 洛思阿图斯
2015年11月

目录

目录
第1章 简介 1
1.1 动机 1
1.2 设计准则 2
1.2.1 万物皆对象 2
1.2.2 面向接口编程,而非面向实现 2
1.2.3 类型是为开发者服务的 3
1.3 限制 4
1.4 概述 4
1.5 本书结构 10
1.6 相关语言及其对Dart的影响 11
第2章 对象、接口、类与mixin 12
2.1 accessor 13
2.2 实例变量 16
2.3 类变量 16
2.4 final变量 18
2.5 相同与相等 18
2.6 类与父类 20
2.7 抽象方法与抽象类 22
2.8 接口 23
2.9 对象的创建 24
2.9.1 重定向构造函数 28
2.9.2 工厂构造函数 29
2.10 noSuchMethod() 30
2.11 常量对象与字段 31
2.12 类方法 31
2.13 实例及其类与元类 33
2.14 Object与其方法 34
2.15 mixin 35
2.16 相关语言 46
2.17 总结 46
第3章 库 47
3.1 顶层 47
3.2 脚本 48
3.3 隐私 49
3.4 导入 49
3.5 将库拆分成part 54
3.6 导出 55
3.7 钻石导入 56
3.8 延迟加载 58
3.9 相关语言 59
3.10 总结 60
第4章 函数 61
4.1 参数 61
4.1.1 位置参数 61
4.1.2 命名参数 62
4.2 函数体 63
4.3 函数声明 64
4.4 闭包 65
4.5 调用方法与函数 66
4.5.1 级联 66
4.5.2 赋值 68
4.5.3 使用运算符 68
4.6 Function类 68
4.7 函数作为对象 70
4.8 生成器函数 72
4.8.1 迭代器与可迭代对象 72
4.8.2 同步生成器 73
4.9 相关语言 74
4.10 总结 75
第5章 类型 76
5.1 可选类型 76
5.2 类型之旅 78
5.3 接口类型 81
5.4 类型实践:添加类型的表达式问题 83
5.5 泛型 87
5.6 函数类型 93
5.6.1 可选位置参数 94
5.6.2 命名参数 95
5.6.3 重温Call() 96
5.7 类型具体化 97
5.7.1 类型检测 97
5.7.2 强制类型转换 98
5.7.3 检查模式 99
5.7.4 具体化泛型 100
5.7.5 具体化和可选类型 100
5.7.6 类型和代理 101
5.8 malformed类型 104
5.9 非严格 106
5.10 相关语言 108
5.11 总结 109
第6章 表达式和语句 110
6.1 表达式 110
6.1.1 字面量 110
6.1.2 标识符 117
6.1.3 this 121
6.1.4 常量 121
6.1.5 创建对象 122
6.1.6 赋值 123
6.1.7 抽取属性 124
6.1.8 方法调用 124
6.1.9 使用运算符 125
6.1.10 Throw 126
6.1.11 条件运算符 127
6.2 语句 127
6.2.1 block 127
6.2.2 if 127
6.2.3 循环 128
6.2.4 try-catch 130
6.2.5 rethrow 131
6.2.6 switch 131
6.2.7 assert 133
6.2.8 return 135
6.2.9 yield和yield-each 137
6.2.10 label 138
6.2.11 break和continue 139
6.3 总结 140
第7章 反射 141
7.1 自省 141
7.1.1 速度与大小的影响 144
7.1.2 例子:代理 146
7.1.3 例子:序列化 147
7.1.4 例子:解析器组合器 158
7.2 为什么使用mirror 168
7.3 元数据 169
7.4 通过代码生成执行反射 169
7.5 自省之外 172
7.6 相关语言 173
7.7 总结 173
第8章 异步和isolate 174
8.1 异步 174
8.2 future 175
8.2.1 使用future 175
8.2.2 生成future 176
8.2.3 调度 177
8.3 stream 178
8.4 isolate 178
8.4.1 Port 179
8.4.2 spawning 179
8.4.3 安全 180
8.5 例子:客户端-服务器通信 180
8.5.1 promise:更好的future 180
8.5.2 将isolate作为分布式对象 182
8.6 异步函数 187
8.6.1 await 187
8.6.2 异步Generator 188
8.6.3 await-for循环 189
8.7 相关语言 189
8.8 总结 189
第9章 结论 190
9.1 可选类型 190
9.2 面向对象 191
9.3 反射 192
9.4 工具 192
9.5 总结 193
相关文献 194

读者评论

  • 本书第三章部分,第47页最后一行代码和第48页得第一行代码contents,应该改为_contents;

    yu1183688986发表于 2020/8/4 18:07:11
  • 没有资源就删掉IX这一页下面的文字嘛,真是多此一举哦

    feedbacker发表于 2019/10/25 10:54:34
    • 谢谢,重印的时候会进行修改。

      付睿发表于 2019/10/25 14:24:40
  • 是的 源码无法获取 麻烦更新下资源

    felix liang发表于 2019/9/18 16:08:28
    • 本书没有下载资源,书上那句话的意思是如果有资源就会在这个页面上呈现。。

      付睿发表于 2019/9/25 13:32:25
  • 哪有”下载资源”啊?

    Luzhuo发表于 2019/4/13 12:53:21
    • 本书没有下载资源,书上那句话的意思是如果有资源就会在这个页面上呈现。。

      付睿发表于 2019/9/25 13:32:33
  • 源码资源失效,同上

    jzchen发表于 2018/10/22 16:45:43
    • 本书没有下载资源,书上那句话的意思是如果有资源就会在这个页面上呈现。。

      付睿发表于 2019/9/25 13:32:44

推荐用户