语言设计中的鸭子类型风格

      在动态语言的世界里一直流传着一种叫做鸭子类型的风格,其来自谚语:“如果行鸭子一样走路,像鸭子一样呱呱叫,那它就是一只鸭子”。

     从鸭子类型,我们可以联想到它的推导,并不在乎类型的真正实体,只要他的行为有鸭子的特性,那么我们就可以把它当做一只鸭子来看到。在动态语言设计中,可以解释为无论一个对象是什么类型的,只要它具有某类型的行为(方法),则它就是这一类型的实例,而不在于它是否显示的实现或者继承。

     鸭子类型在动态语言中被广为奉行。某类接口需要一个log接口,换句话说这借口中需要调用传入对象的log,方法,在动态语言中无论你传入的是什么对象,只有具有log方法则就是合法的。而java,c#这类静态强类型语言(当前首先声明c#已经不是纯的静态强类型语言,它具有dynamic,表达式,当然这里所说的c#是去掉这类特性,或者说C#2.0吧)我们传入的对象是必须显示实现该接口的类实例,他们直接必须具有显示的继承链。

     以上所说的是两类语言设计中的对抽象的制约的区别。

    Javascript中鸭子型的实现:

function log(logger){

       logger.log(“hello world”);

}

log({log:function(msg){

       console.log(msg);

}});

 

代码量很少,这里只是一种简单的约定,而不是强制,使得我们的自控感增强,所以我喜欢javascript这门语言给我的自由度。但是相对于java这类静态强类型语言而言是将语法的检查推向了运行时期,延迟了发现问题的时间,不助于我们的调试。在强类型系统的语言中由于具有完备的类型信息,我们可以提高良好的IDE于开发时限制,有助于我们的大规模开发。所以这里没有对错,只是看你的选择和喜爱。如果你是一个优秀的程序员,动态语言这种检查的推迟对你并无什么问题,因为你能够有条理次序的节奏型开发。

     关于鸭子型风格这里还得必须提到go语言,也是go语言带来我对这种风格的思考。

我们还可以显示的定义在消费者方法中,形如 

func SomeFunction(logger interface{Log(string)}){

    logger.Log(“hello world, I am go lang”).

}

 

实现提供者:

type S struct { }

func (this *S)Log(msg string) {

    console.log(msg)

}

 

在类型S就是一个实现了Logger的实例。

 

Go还有一种叫做空接口,能够容纳万物的东西;

func log(any interface{}) int {

    return any.(I).Get()

 }

   Go语言不同于其他鸭子类型语言的是它实现了在编译时期检查,同时也不失这种自由度。

    另外TypeScript想必你也知道 ,这与google的dart一样致力于将javascript带入大规模开发的语言,不同的是TypeScript是javascript的超集,并不是重造一门新语言。他为javascript引入的接口,类型,泛型等较完备的类型系统,是的能够有更好的IDE支持,从某种程度上来说,这是对鸭子类型或者javascript编译器的检查推迟的弥补。

作者:破  狼 
出处:http://www.cnblogs.com/whitewolf/ 
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-个人独立博客博客园--破狼51CTO--破狼。http://www.cnblogs.com/whitewolf/p/3163358.html

时间: 2024-11-05 14:54:54

语言设计中的鸭子类型风格的相关文章

从零开始教你打造网页设计中的极简风格

  什么是极简设计 极简设计,严格上讲不能算作一种视觉风格,而是一种设计哲学.它在保持了基本的骨架内容的基础上,剔除掉多余的元素.装饰.色彩和纹理,是通过不断思考而进行化繁为简的设计过程.这样做的结果是突显了主题内容.所以,它是扎根于设计思想根部的概念. 极简主义起源于苏格兰,当时在各个文化领域都掀起了极简的风潮:平面设计.建筑.音乐.文学.绘画等.直到现在,也开始在网页设计中盛行. 尽管极简设计风格在十年间并未得以足够的关注度,早先的互联网领域中根本看不到它的影子,样式复杂的LOGO和广告,艳

浅析网页设计中的“马云式”风格

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 马云作为中国的电子商务教父,说话形象生动有感染力很容易让人记住,做事稳健迅速风格显著,甚至连长相也很有特点,非常容易被别人记住.旗下的阿里巴巴网站设计风格也是非常有特点的.我称之为"马云式"风格.如何让一个不太熟悉网页的人迅速知道你这张网页要表达什么东西,这非常重要.马云在一次访谈中自称自己只会发邮件,打字速度也很慢,也不

详细介绍Python的鸭子类型_python

鸭子类型基本定义 首先Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型. 以下是维基百科中对鸭子类型得论述: 在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定.这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试,"鸭子测试"可以这样表述: "当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也

网页设计中的色彩理论

无可争议的是,色彩是任何设计领域中最重要的一方面. 设计师在决定了一个网站风格的同时,也决定了网站的情感,而情感的表达很大程度上取决于颜色的选择.颜色是很有力的工具,所有设计师在设计网页时就应该明白这一点. 一.颜色术语 你们当中很多人可能已经在学校学过一些色彩基础知识,让我们快速回顾一些术语,来更好的把握色彩和运用色彩. 色轮的主要组成 所有的色彩能在一个色轮中呈现.在这个色轮中,我们能把颜色分成3大块:原色,辅助色和第三颜色. 三原色分别是红色,蓝色和黄色.这些色彩是基础色,他们组成了色轮上

浅谈网页设计中的色彩理论

无可争议的是,色彩是任何设计领域中最重要的一方面. 设计师在决定了一个网站风格的同时,也决定了网站的情感,而情感的表达很大程度上取决于颜色的选择.颜色是很有力的工具,所有设计师在设计网页时就应该明白这一点. 一.颜色术语 你们当中很多人可能已经在学校学过一些色彩基础知识,让我们快速回顾一些术语,来更好的把握色彩和运用色彩. 色轮的主要组成 所有的色彩能在一个色轮中呈现.在这个色轮中,我们能把颜色分成3大块:原色,辅助色和第三颜色. 三原色分别是红色,蓝色和黄色.这些色彩是基础色,他们组成了色轮上

手绘元素在网页设计中的运用实例

手绘元素通常是用在纸上的,但是最近它们被越来越多的用在网站设计上面.手绘风格已经变得很流行了.这些速写元素令到网站极具个性并能为访问者提供有趣的体验.这里是一些在网站设计中使用手绘风格的网站最佳实例,希望能给你某些参考. PS:事实上,手绘风格和涂鸦很像,很多地方就直接将两者放到一起来说了,如果非要分的很轻的话,,我们一般可以认为手绘比较优雅一些,而涂鸦则更夸张-- Yellow Bird Project Mark Forrester camellie Tech Adventure Merge

网页设计中的tab应用的两种类型

当今,网页设计中的tab应用十分普遍,不过一般都脱离不了一下两种类型: 第1种 鼠标单击切换.此种情形下tab是没有链接的(但是在选中的tab区域内增加 更多或者more链接). 第2种 鼠标悬浮切换.此种情况下很多tab都加了链接,所以 a:hover 应该生效,也就是鼠标停靠时有下滑下或颜色等提示.其实这也是Norman设计理念里,对于用户恰当Feedback(反馈)的实践.在实际案例中,我们看到了一些好的设计,也有些我不赞成的设计,这里稍做分享. 案例一:yahoo美国首页,属于第1种ta

极简风格在设计中的运用

大家好,我是阿木,今天我结合我在微博的实际项目跟大家分享一下极简风格的一点设计心得.现代城市生活中我们每天要面对嘈杂拥堵的街道和地铁,各式各样的广告,处理各种邮件和信息.于是我们内心追求一种体验那就是-极简,像大家家喻户晓的品牌如:MUJI无印良品. 苹果 .宜家家居,都是这一风格的发扬者,他们的产品也获得了巨大成功. 极简在摄影中是一种突出主体取简去繁的摄影手法,在生活中是一种放松的生活态度,在设计中是一种简洁的设计手法. 微博的设计体验也是如此,我们去掉了复杂的视觉干扰,力求给用户带来愉悦轻

网页设计中网站背景的创意风格与设计趋势

正确的背景风格可以为整个网站确定基调.我们搜集了一批使用大幅图像.明亮颜色或出众图案来作为背景的优秀网站,希望从中探寻当下网站的流行设计风格. 什么样的背景最适合你的网站,这并没有一定之规,但确实有一些共同的要素: 互联网背景的内容应该有目的性. 背景应该与你的品牌风格一致. 背景之上的文字内容应该易于阅读(无论是颜色.反差还是尺寸大小.) 背景的主题在整个网站内应该连贯一致. 背景应该能很快下载并且不会让你的网站变得缓慢甚至卡死. 现在的流行趋势是什么? 就像服装和发型会变,网页设计的风格也在