专栏名称: Python开发者
人生苦短,我用 Python。伯乐在线旗下账号「Python开发者」分享 Python 相关的技术文章、工具资源、精选课程、热点资讯等。
目录
相关文章推荐
51好读  ›  专栏  ›  Python开发者

糟糕程序员的各种迹象

Python开发者  · 公众号  · Python  · 2017-03-22 21:26

正文

请到「今天看啥」查看全文



面向对象编程( Object Oriented Programming )就是一种语言模型,正如函数式编程( Functional programming )或声明式编程( Declarative programming )一样。它们每一个都和过程式或命令式编程有着显著不同,就像过程式编程明显不同于汇编或基于 GOTO 的编程。此外,虽然有很多语言都跟随同一个主流编程模型(如面向对象的编程),但它们都只介绍自己的改进,例如递推式构造列表( list comprehensions )、泛型( generics )、鸭式分类( duck-typing )等等。


译者:duck-typing 是动态语言的一种程序设计风格,用以实践方法多态。Duck-typing 并不关注对象的实际类型,而是关注其表现。概念提出者 James Whitcomb Riley 这样描述这个风格:当看到一只鸟走起来像鸭子,游起泳来像鸭子,叫起来也像鸭子,那这只鸟就可以看出是鸭子。


特征


1.使用任何所需的语法来摆脱模型的束缚,接着用他们熟悉的语言风格来完成程序的剩余部分。


2.(面向对象编程)试图在未实例化的类中调用非静态的函数或变量,并且无法理解为什么这样不能编译。


3.(面向对象编程)写了大量“ xxxxxManager ”这样的类,类中包含所有控制对象字段的方法,而这些对象本身几乎没有定义方法。


4.(关联式编程)把关联式数据库当作对象仓库,在客户代码中执行所有的联结( joins )和关系约束( relation enforcement )。


5.(函数式编程)为了处理不同类型的输入或运算符,对同一个算法创建多个版本实现,而不是向一个泛型实现传入高级函数。


6.(函数式编程)非要在能自动缓存的平台上手动缓存确定性函数的结果(比如 SQL 和 HasKell)。(译者:确定性函数就是在输入特定的值集合时,调用函数得到相同的结果。HasKell 是一种纯函数式编程语言。)


7.从别人的程序里剪切粘贴代码来处理 I/O 和 Monads。(译者:Monads 是函数式编程中一种代表计算指令的结构,详见Monad。)


8.(声明式编程)在命令式代码中设置单一值,而不是使用数据绑定( data-binding )。


补救措施


如果你的技能不足,是因为别人教得不好或是自己没学好,那编译器自身就是一位备选老师。学习一个新的编程模型,最有效的办法莫过于创建一个新工程,不管都有哪些新的构造方法,强迫自己去使用它们,无论在工程中的使用是否明智。你也需要练习用自己最熟悉且通俗易懂的措辞来解释模型特性,然后递归地创建自己的新词汇表,直到你对模型理解入微。举个例子:


阶段一:“OOP 就是方法的集合”


阶段二:“OOP 里的方法就是函数,它们运行在自带全局变量的小程序中”


阶段三:“全局变量被称为字段,其中有些是私有字段,在小程序外不可见”


阶段四:“拥有私有和公有元素是为了隐藏实现细节,暴露干净整洁的接口,这就叫封装”


阶段五:“封装意味着实现细节不会破坏业务逻辑”


对所有编程语言来说阶段五看起来都一样,因为所有语言在阶段五都试图让程序猿能表达出程序的意图,而不需要将其隐藏在如何实现的细节之中。拿函数式编程再举个例子:


  • 阶段一:“函数式编程做的所有事情就是将确定性函数链接在一起”

  • 阶段二:“当函数是确定的,编译器就能够预测什么时候可以缓存结果或跳过求值,甚至在什么时候提前中止求值是安全的”







请到「今天看啥」查看全文