翻译

再见了,面向对象编程

穿精又带淫゛_ 提交于 2020-04-18 05:53:51
原文: https://medium.com/@cscalfani/goodbye-object-oriented-programming-a59cda4c0e53#.z48fmajih 这是一篇长文,共有三大块,我先翻译第一块,以后有时间更新后面的 我已经用面向对象编程了好几十年了,从最开始的C++然后到Smalltalk最后到.NET和JAVA。我一直期待能充分利用面向对象编程的三大核心:继承、封装、多态带来的好处。我渴望从代码复用这一效果中能窥探到前辈们的智慧。想象着把真实世界映射成代码里各种类,我简直不能太兴奋,还满怀期待的等着他们像真实世界一样正常运转起来。 这样想就大错特错了。 继承,第一个失败的核心 乍一看,继承显然应该是面向对象编程最大的好处。对于刚刚接触面向对象思想的人来说,这些简洁的层级形状示例看起来非常有道理。 而“代码复用”,多年来都是面向对象思想的代名词。我毫不犹豫的接受了这种思想,并且一头扎进刚刚发现的这片新大陆。 “香蕉猴子雨林” 问题 成为面向对象虔诚信徒的我,带着手头的问题,开始构建类层次并编码。一切都还好。 然而,我永远忘不了当我准备利用继承来使用已有类库的那一天,毕竟说好的复用效果就要出现了。我™为这天可等了不少时候了。 一个新项目交到我的手上,我又想起来在自己上个项目中颇为喜爱的一个类。 没问题,复用拯救世界

【译】Django官方教程——​编写你的第一个Django app,部分1

老子叫甜甜 提交于 2020-04-10 11:46:29
编写你的第一个Django app,部分1 【中括号中的绿色字是我自己添加的辅助内容,非官方文档内容,仅供参考】 【英文原文地址: https://docs.djangoproject.com/en/1.6/intro/tutorial01/ 】 【转载本文时请注明出处: http://my.oschina.net/mayepythoner/blog/297550 】 我们通过一个例子开始学习。 通过这个教程,我们将带领你创建一个基本的投票应用。 它包括两个部分: 一个公开的站点,让人们查看投票和进行投票。 一个管理站点,让你添加、更改、删除投票。 我们假设你已经安装的Django。你可以通过运行下面的命令查看Django是否安装和它的版本: $ python -c "import django; print(django.get_version())" 1.6.5 如果Django已经安装,你可以看到你安装的版本 【如我的结果,我安装的是1.6.5】 。如果没有安装,你会得到错误信息: “No module named django”。 这个教程基于Django1.6 和 Python2.X 写成。如果你的Django版本不匹配,你可以利用页面右侧的版本切换器切换到你所用的版本的教程,或者升级你的Django版本到最新。如果你正在用 Python3.X

[译]了解和分析iOS应用崩溃报告

人盡茶涼 提交于 2020-03-02 06:53:07
当一个应用发生崩溃时会产生一份崩溃报告(Crash Report),该报告可以帮助我们了解崩溃的产生原因。该文档讲述了关于怎么样符号化、理解和分析崩溃报告的相关内容。 介绍 获取崩溃和低内存报告 分析崩溃报告 头部信息 异常代码 应用具体信息 回溯 线程状态 二进制映像 了解低内存报告 相关文档 文档修改记录 介绍 当iOS设备上的应用崩溃时,设备上会为其生成和保存一份崩溃报告。崩溃报告描述了应用程序在什么情况下结束运行的。在大多数情况下报告会为每个执行的线程包含一个完整的回溯(Backtrace),这对于调试应用崩溃问题时非常有用。如果你是iOS开发者,你应该查看这些崩溃报告来了解你的应用存在哪些崩溃,并且应该对这些崩溃进行修复。 崩溃报告中带有的回溯必须要先进行 符号化 (Symbolicated)才可以进行分析。符号化(Symbolication)指的是使用人能够读懂的方法名称和行号来替换回溯里面的内存地址信息。如果你通过Xcode的Devices窗口获得一台设备的崩溃日志,那么它会在几秒钟内自动地将日志进行符号化。否则你需要手动将.crash文件导入到Xcode的Devices窗口中进行符号化。可以参考符号化(Symbolication)章节来了解详细的内容 低内存报告与其它崩溃报告不同的地方在于它没有回溯信息。当一个低内存崩溃发生时,你必须检查你的内存使用图表

7个重要的javascript函数

谁都会走 提交于 2020-02-29 21:47:30
原文地址:http://davidwalsh.name/essential-javascript-functions #7个重要的javascript函数 我记得在早期使用javascript时,因为浏览器厂商对javascript的特性,包括基本特性和边缘特性的实现方式不同, 我们需要很多简单的function来进行兼容,比如addEventListener和attachEvent。 虽然时代已经改变,为了提高性能和降低方法复杂度,有几个方法仍然需要每个开发人员熟知。 #debounce函数去抖 函数去抖可以提高事件持续触发时的性能。如果你在处理scroll,resize,key*等事件时,没有使用函数去抖可能会存在错误。下面提高性能的函数去抖实例: //返回函数持续被调用时将不会执行 //函数将在停止调用N毫秒后执行 //如果传入参数immediate=false,回调方法将优先执行而不是wait后执行 function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context,

Java SE 8: Lambda Quick Start Part.IV (Fin)

狂风中的少年 提交于 2019-12-20 18:02:51
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前面的章节中介绍了函数式接口并完成了一个基本的lambda表达式语法示例. 本节回顾lambda表达式如何改善集合类. Lambda表达式和集合类 在前面的例子中, 集合类被多次用到. 然而, 若干新的lambda表达式特性改变了它们的使用方法. 本节讲介绍一部分这样的新特性. 附加类 司机, 飞行员, 役男的搜索条件被封装到SearchCriteria类中 package com.example.lambda; import java.util.HashMap; import java.util.Map; import java.util.function.Predicate; /** * @author MikeW */ public class SearchCriteria { private final Map<String, Predicate<Person>> searchMap = new HashMap<>(); private SearchCriteria() { super(); initSearchMap(); } public static SearchCriteria getInstance() { return new SearchCriteria(); } private void

Supporting Python 3(支持python3)——使用现代的风格改善你的代码

99封情书 提交于 2019-12-06 20:48:29
使用现代风格改善你的代码 原文: http://python3porting.com/improving.html 译者: TheLover_Z 一旦你开始使用 Python 3,你就有机会接触新的特性来改善你的代码。这篇文章中提到的很多东西实际上在 Python 3 之前就已经被支持了。但我还是要提一下它们,因为知道了这些以后你的代码可以从中获益。我说的包括修饰器,在 Python 2.2 开始提供支持; sorted() 方法,在 Python 2.4 开始提供支持;还有上下文管理,在 Python 2.5 开始提供支持。 这里提及的其它新特性在 Python 2.6 或者 2.7 都提供了支持,所以说如果你不是在用 Python 2.5 和之前的版本的话,你可以使用这里提到的几乎全部的新特性。 使用 sorted() 来替代 .sort() 在 Python 中,列表有一个 .sort() 方法可以进行排序。 .sort() 会影响列表的结构。下面这么写是因为在 Python 2.3 之前只能这么写。 >>> infile = open('pythons.txt') >>> pythons = infile.readlines() >>> pythons.sort() >>> [x.strip() for x in pythons] ['Eric', 'Graham',

Supporting Python 3(支持python3)——关于本书

橙三吉。 提交于 2019-12-06 20:47:13
关于本书 这本书书是源码在GitHub [5] 上的开放性的书,所以任何人都可以给本书提供贡献(在湖闻樟译注: 原文提供pdf版,购买价格可以自定,有条件的话建议扶持下)。作者和编辑是Lennart Regebro,以及以后贡献者将列在这里。 这本书是在reStructuredText [1] ,里写的,使用Sphinx [2] 和LaTeX [3] 排版 以及使用CreateSpace [4] .印刷。各部分的字体:TeX Gyre Schola主体文本, DejaVu Sans Mono 代码 以及Flux Bold 标题。 封面来自 Emmanuel “Tambako” Keller , http://www.flickr.com/photos/tambako/ 在本书的网页有一个勘误表, http://python3porting.com/ . Lennart Regebro(在湖闻樟注:作者)想要感谢下面这些为了更本提供帮助的人: Andreas Braukmann , Nicholas Coghlan , Paul Everitt , Cris Ewing , Luca Fabbri , Russell Ferriday , Patrick Gerken , Janko Hauser , Domen Kožar , Baptiste Mispelon ,

Supporting Python 3(支持python3)——序

耗尽温柔 提交于 2019-12-06 20:46:48
序 当我在2002年6月加入python-dev邮件列表时,“Python 3000"(在湖闻樟译注:即Python 3)的团队每隔几个月都会描述一个Python 开发团队希望他们实现的建议,但是因为兼容性的原因都没有办法做到。对我们来说为“Python 3000 可能是“做一些事意味着没有发生任何变化。 但是后来我们开始越来越经常地说在Python 3000可能发生的事。最终到了“Python 3000”因为内部程序员的惰性被经常引用成缩写“py3k”的时候。 然后我们开始相信像我们大肆宣传的那样py3k将会更加好。到了Andrew Kuchling创建了用于跟踪我们在2004年底对py3k各种想法的EP PEP 3100(这是我最终负责的PEP 3000的原型)的时候 ,我们实际上要通过对py3k的一个“疯狂”的想法。这导致了在2006年3月开始了严肃地开发以及最终在2008年12月3日释放了Python 3.0。 当这些正在发生时,在社区上有对创建Python 3 的可行性/理智的复杂感情。在PEP 3100被创建的2004年,Python的流行程序有了明显的提升。这种趋势持续及在2006年左右,当py3k的开发全面开展时,Python的受欢迎程序已经超过了Perl。所能当Python成为世界上最流行的动态编程语言时,开发团队正在开始开发将下一个大版本

Supporting Python 3(支持Python 3)——目录

£可爱£侵袭症+ 提交于 2019-12-06 05:46:34
Supporting Python 3(支持Python 3) 关于本书 关于术语 序 欢迎来到Python 3 是时候了吗? 如果我现在不能切换会怎么样? Python 和它的版本 更多资源 迁移策略 仅支持Python 3 Python 2和Python 3的单独分支 使用2to3转换到Python 3 使用Distribute来支持2to3转换 无需转换支持Python 2 和 Python 3 使用3to2 哪种策略适合你? 应用 Python模块和包 框架 结论 为Python3作准备 在Python 2.7下运行 当除以整数时用//代替/ 使用新式的类 单独的二进制数据和字符串 当排序时,使用key来代替cmp 使用丰富的比较运算符 相对棘手的 实现 __hash__() 确保你没有用任何一个被移除的模块 测试覆盖率和tox 可选:在字典中使用迭代器方法(iterator-methods) 2to3 使用2to3 明确的固定器(fixers) 分发包 在安装时执行2to3 使用Distribute支持多个版本的Python 使用Distribute运行测试 使用Distribute运行2to3 常见的迁移问题 不正确的引入(import) 相对引入问题 Unorderable类型、__cmp__和cmp 排序 排序Unicode 字节、字符串及Unicode 字节文字

Supporting Python 3——迁移python2的c扩展到python3

妖精的绣舞 提交于 2019-12-06 05:45:49
迁移C扩展 Python 3有很多在C语言API上的变化,包括在API中定义类和初妈化的模块。这意味着每一个C扩展为了能在Python 3 下运行需要进行修改。一些变化很简单而另一些不简单,但是因为2to3只处理Python代码,你不得不对这些变化进化手动处理。这也意味着不你能通过2to3的转换来同时实现Python 2和Python 3的支持。幸运的是,C预处理程序可以很容易地实现使用相同的代码支持Python 2和Python 3.这是一个使在C中支持不同版本API的标准方式,这也将成为C程序员的标准技能。因此没有丑陋的黑客参与,只是少了些漂亮的 #if 和# ifndef 语句。 在你开始前 有一些事情你可以在真正开始移植前先做。首先是移除一些你根本不需要的老别名的用法。例如RO宏已经被删除了。它只是一个简写的READONLY,因些如果你在代码中用了RO,你可以使用READONLY来替代它。其他常见的重定义是 statichere 和 staticforward。 他们是为了兼容特定编译器的变通方法。对于表现良好的编译器他们只是 static 的重定义,因此在CPython支持的所有平台都有表现良好的编译器的当今Python 3已经不需要他们了。如果你在代码中使用了他们,你可以用 static 来代替。 其他在移植你可以做的变化是摆脱 PyClassObject