几乎所有面向对象的程序中,总有一两个资源被创建出来,在程序应用中持续被共享使用。例如,这样的一个资源,在一个电子商务程序的数据库连接中使用:这个连接在应用程序启动时初始化,程序于是可以有效的执行;当程序结束时,这个连接最终被断开并销毁。如果是你写的代码,没必要在每时每刻创建一个数据库连接,这样非常低效。已经建立好的连接应该能被你的代码简单重复的使用。这个问题就是,基于以上要求你将如何进行这个数据库
Generator并发 正如我们在第一章和本章早先讨论过的,另个同时运行的“进程”可以协作地穿插它们的操作,而且许多时候这可以产生非常强大的异步表达式。 坦白地说,我们前面关于多个generator并发穿插的例子,展示了这真的容易让人糊涂。但我们也受到了启发,有些地方这种能力十分有用。 回想我们在第一章中看过的场景,两个不同但同时的Ajax应答处理需要互相协调,来确保数据通信不是竟合状态。我们这样
Generator 委托 在上一节中,我们展示了从generator内部调用普通函数,和它如何作为一种有用的技术来将实现细节(比如异步Promise流程)抽象出去。但是为这样的任务使用普通函数的缺陷是,它必须按照普通函数的规则行动,也就是说它不能像generator那样用yield来暂停自己。 在你身上可能发生这样的事情:你可能会试着使用我们的run(..)帮助函数,从一个generator中调用
生成值 在前一节中,我们提到了一个generator的有趣用法,作为一种生产值的方式。这 不是 我们本章主要关注的,但如果我们不在这里讲一下基本我们会想念它的,特别是因为这种用法实质上是它的名称的由来:生成器。 我们将要稍稍深入一下 迭代器 的话题,但我们会绕回到它们如何与generator关联,并使用generator来 生成 值。 发生器与迭代器 想象你正在生产一系列的值,它们中的每一个都与前
诗人和作曲家喜欢写一些关于love的作品,也有可能写一些关于计数(counting)的作品,很少有两者兼顾的。总有些例外,如Elizabeth Barrett Browning:"How do I love thee? Let me count the ways",又如Paul Simon:"There must be 50 ways to leave your lover.",被这些诗句启发,我
和其它的编程语句一样,Scheme 也包含条件语句。 最基本的结构就是if: (if 测试条件 then-分支 else-分支) 如果测试条件运算的结果是真(即,非#f的任何其它值),then分支将会被运行(即满足条件时的运行分支)。否则,else分支会被运行。else分支是可选的。 (define p 80) (if (> p 70) 'safe 'unsaf
概述 四路颜色传感器使用可见光进行补光,大幅增强了对环境光的抗干扰能力,并且支持在巡线检测的同时进行颜色识别。新的环境光校准功能还能降低环境光对巡线效果的干扰。此外,传感器的数量由两个增加至四个,大大提高了该模块的编程潜力以应用场景。 四路颜色传感器 巡线传感器 塑料外壳 提升耐用性和质量 有 无 巡线传感器 4 个 2 个 颜色传感器 4 个 (与巡线传感器复用) 无 光线传感器 4 个 (与巡
有异步 I/O,必有异步编程。 上一章节描述了 Node 如何通过事件循环实现异步,包括与各种 I/O 多路复用搭配实现的异步 I/O 以及与 I/O 无关的异步。Node 是首个将异步大规模带到应用层的平台,它从内在运行机制到 API 的涉及,无不透露出异步的气息来。异步的高性能为它带来了高度的赞誉,而异步编程也为其带来了部分的诋毁。 前述章节中亦描述过异步 I/O 在应用层面不流行的原因,那便
在Android Studio中开发,解决方案不会总是一蹴而成的。作为一个有效率的编程者,在你的开发,调试和测试中需要一些弹性以及代码重构。随着在这章中的行进,你将明白Android Studio如何产生代码;在这章里你将看到Android Studio如何重构你的代码。重构代码最大的风险是可能引入不期望的错误。通过分析某些风险重构操作的结果,Android Studio减低了这些风险,然后激活F
我想知道如何将舞蹈方法的十进制结果包含到灯光方法中。例如,在这个程序中,如果我输入5F,十进制结果将是95。我希望95在light方法中显示为静态int变量,以便转换为二进制数。如果你能告诉我如何将十六进制数限制在2位数以内,那也会很有帮助。感谢阅读! } }
带有太强个人色彩的系统无法成功。当最初的设计完成并且相对稳定时,不同的人们以自己的方式进行测试,真正的考验才开始。 ——高德纳 [TOC] 在本书的前两部分中,我们讨论了很多关于请求和查询以及相应的响应或结果。许多现有数据系统中都采用这种数据处理方式:你发送请求指令,一段时间后(我们期望)系统会给出一个结果。数据库,缓存,搜索索引,Web服务器以及其他一些系统都以这种方式工作。 像这样的在
面向对象编程最常被人提到的语言功能就是继承了。继承就是基于一个已有的类进行修改来定义一个新的类。在本章我会用一些例子来演示继承,这些例子会用到一些类来表示扑克牌,成副的纸牌和扑克牌型。 如果你没玩过扑克,你可以读一下这里的介绍,不过也没必要;因为我等会会把练习中涉及到的相关内容给你解释明白的。 本章的代码样例可以在这里下载。 18.1 纸牌对象 牌桌上面一共有52张扑克牌,每一张都属于四种花色之一
本章我们要说的是另外一种内置类型,元组,以及列表、字典和元组如何协同工作。此外还有一个非常有用的功能:可变长度的列表,聚集和分散运算符。 一点提示:元组的英文单词 tuple 怎么读还有争议。有人认为是发[tʌpəl] 的音,就跟『supple』里面的一样读音。但编程语境下,大家普遍读[tu:pəl],跟『quadruple』里一样。 12.1 元组不可修改 元组是一系列的值。这些值可以是任意类型
本章要讲的内容是另外一种内置的类型,叫字典。字典是 Python 最有特色的功能之一;使用字典能构建出很多高效率又很优雅的算法。 11.1 字典是一种映射 字典就像是一个列表一样,但更加泛化了,是列表概念的推广。在列表里面,索引必须是整数;而在字典里面,你可以用几乎任何类型来做索引了。 (译者注:从字符串 string,到列表 list,再到字典 dictionary,Python 这个变量类型就
Internet 并不安全。 现如今,每天都会出现新的安全问题。我们目睹过病毒飞速地蔓延,大量被控制的肉鸡作为武器来攻击其他人,与垃圾邮件的永无止境的军备竞赛,以及许许多多站点被黑的报告。 作为 web 开发人员,我们有责任来对抗这些黑暗的力量。每一个 web 开发者都应该把安全看成是 web 编程中的基础部分。不幸的是,要实现安全是困难的。攻击者只需要找到一个微小的薄弱环节,而防守方却要保护得面