冒号和他的学生们(连载15)——数据类型 - 编程入门网
冒号和他的学生们(连载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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |