快速业务通道

冒号和他的学生们(连载15)——数据类型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

冒号和他的学生们(连载15)——数据类型

时间:2011-07-01 BlogJava 郑晖

数据类型

遵礼谓之劬,守法谓之固,此荒国之风也            ——《荀悦·申鉴》

待教室平静下来,冒号再度开腔:“在谈论动态语言之前,最好先澄清一下它与动态类型语言之间的区别。”

叹号讶然道:“它们不是一回事吗?一直以为动态语言是动态类型语言的简称呢。”

“有亲戚之名,却无血缘之亲。名称上相似,加之动态语言绝大多数确是动态类型语言,造成混淆实属在所难免,但二者之间并无必然联系——动态语言不一定是动态类型语言,动态类型语言也不一定是动态语言。”冒号飞跑的舌头几乎绊蒜,同时把众人的脑子搅成了一锅粥。

见势不妙,冒号改用迂回战术:“我们不妨再谈开些,大家对数据类型是如何理解的?”

逗号随口道:“数据类型不就是数据的种类吗?”

众人暗笑:说了跟没说差不多。

冒号说道:“数据类型包含两个要素:一个是允许取值的集合,一个是允许参与的运算。例如int类型在Java中既定义了介于− 231和231 − 1之间的整数集合,也定义了该集合上的整数所能进行的运算。现在的问题是:数据类型的意义何在?”

句号回答:“限定一个变量的数据类型,就意味着限制了该变量的取值范围和所参与的运算,这从一定程度上保证了代码的安全性。”

冒号追问:“还有吗?”

句号略作思考后说:“用户自定义的数据类型,如C中的结构和Java中的类或接口,赋予数据以逻辑内涵,提高了代码的抽象性。”

“精辟!”冒号赞道,“数据类型既有针对机器的物理意义,又有针对人的逻辑意义。前者用于进行底层的内存分配和数值运算等,后者用于表达高层的逻辑概念。既然类型如此重要,类型检查就必不可少了。所谓动态类型语言(Dynamic Typing Language),正是指类型检查发生在运行期间(run-time)的语言。”

“那静态类型语言(Static Typing Language)自然是类型检查发生在编译期间(compile-time)的语言咯。”引号接话道。

冒号回应:“一般的说法是这样,不过我更愿意将‘编译期间’四个字改为‘运行之前’,否则容易让人误解为静态类型语言一定是编译型语言(Compiled Language)。”

问号问道:“是否可以这么说:静态类型语言需要变量申明,而动态类型语言则不需要?”

“这话只对了一半。”冒号评论,“动态类型语言固然不需要显式的变量申明(Explicit Declaration),一些静态类型语言有时也不需要。典型的如ML、Haskell之类的函数式语言,编译器可以通过上下文来进行类型推断(type inference)。”

叹号感慨:“动态类型语言不必申明变量,甚至一个变量在不同地方可以代表不同类型,多省事多方便啊!”

冒号微微颔首:“动态类型语言的确有简明快捷的优势,并且天然具有泛型(generic)特征,代码更加灵活。比如,动态类型有一种被称作鸭子类型(Duck Typing)的形式。”

冒号和他的学生们(连载15)——数据类型(2)

时间:2011-07-01 BlogJava 郑晖

逗号感到有趣:“鸭子类型?很滑稽的名字。”

“这种类型的思想是:如果一个对象既会走鸭步又会呷呷叫,何妨将其视作鸭子呢?”冒号说着投影出一段Ruby代码——

class Duck                        #会叫会游的鸭
    def shout
        puts ''呷呷呷''
    end
    def swim
        puts ''鸭泳''
    end
end
class Frog                         #会叫会游的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号