快速业务通道

冒号课堂§2.2:声明范式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
固定的;后者好比住址,所住之人是变化的。此外,等号在代数中是一种约束,而在许多命令式语言中则表示赋值。因此i = i + 1可以在命令式编程中出现,但绝不可能在数学推理中出现——除非在反证法中。”

叹号又道:“现在回头再看代数,反倒有些不习惯了。”

“这就是思维的定势效应。”冒号感慨道,“声明式编程让我们重回数学思维:函数式编程类似代数中的表达式变换和计算,逻辑式编程则类似数理逻辑推理。其中的变量也如数学中的一样,是抽象符号而非内存地址,因此没有赋值运算,不会产生变量被改写的副作用(side-effect),也不存在内存分配和释放的问题。这既简化了代码,也减少了调试——不妨想一想,有多少bug是由于某个变量被意外改写或内存管理不慎而造成的?”

问号问道:“声明式语言与命令式语言看来是两个世界的产物,它们是否有相通之处?”

冒号答道:“首先,所有高级语言都建立于低级语言之上,最终转化为机器语言,声明式语言也不例外。其次,声明式语言与命令式语言并非泾渭分明,而是互相交叉渗透的。一些‘非纯粹’ 的声明式语言也提供变量赋值和流程控制,而一些命令式语言也在逐渐发展,通过利用其他程序或增加新的语言特征来实现声明式编程。总的说来,在命令式语言中融入声明式的元素应当是一种趋势。尤其是函数式,它的一些特征已经在许多命令式语言中得到了支持。比较而言,声明式编程重目标、轻过程,专注问题的分析和表达而不致陷入算法的迷宫,其代码也更加简洁清晰、易于修改和维护。从这种意义上说,声明式语言天然地就比命令式语言更高级。上节课提到的前三代计算机语言基本上都是命令式的,而后两代基本上都是声明式的,由此可见一斑。”

冒号课堂§2.2:声明范式(3)

时间:2011-06-25 BlogJava xyz98

句号一拍脑袋:“命令式是模拟电脑的,声明式是模拟人脑的,人脑当然比电脑高级啦。”

冒号另有佐证:“早在命令式语言引入函数从而进化为过程式语言时,就已经开始向声明式过渡了。何以见得?比方说调用一个函数的语句:doWhat(),这不正是在声明‘what to do’吗?至于‘how to do’,即函数的具体实现细节,则不劳调用者费心。这种声明式的风格,提高了语言的抽象能力和开发效率,促成了语言的升级。”

逗号仍然有些疑惑:“既然声明式编程有这么多好处,为什么命令式语言不仅占大多数,而且流行程度也不减呢?”

冒号回答:“编程语言的流行程度与其擅长的领域关系密切。声明式语言——尤其是函数式语言和逻辑式语言——擅长基于数理逻辑的应用,如人工智能、符号处理、数据库、编译器等,对基于业务逻辑的、尤其是交互式或事件驱动型的应用就不那么得心应手了。而大多数软件是面向用户的,交互性强、多为事件驱动、业务逻辑千差万别,显然命令式语言在此更有用武之地。”

大家频频颔首。

“值得指出的是,声明式编程并不仅仅局限于函数式和逻辑式。”冒号旋即补充道,“比方说,C#中的attribute、Java中的annotation和XDoclet库等采用的也是具有声明式特征的属性导向式编程(Attribute-Oriented Programming)。再比如,Prograph[1] 、SISAL[2]等数据流语言(dataflow language)采用的数据流式编程(Dataflow Programming)与函数式编程有不少共同点,同样属于声明式的范畴。还有一些语言如Oz、CHIP等支持与逻辑式编程相交的约束式编程(Constraint Programming)[3]。此外,大家熟悉的数据库语言SQL,样式语言XSLT、CSS,标记语言HTML、XML、SVG,规范语言IDL(Interface

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号