冒号课堂§5.2:数据类型 - 编程入门网
冒号课堂§5.2:数据类型时间:2011-06-27 BlogJava xyz98第五课 语言小谈(2) 5.2数据类型——规则与变通 操纵于规矩之中,神明于规矩之外 ——《俞震·古今医案按》 关键词:数据类型,静态类型,动态类型,Duck类型,强类型,弱类型,类型安全 摘要:关于数据类型的讨论 !预览 ·Duck类型的哲学是:是什么不重要,重要的是能干什么 ·将一个会叫会游的家伙放进池塘看起来不算坏主意,但如果一艘轮船趁机也轰隆隆地开了进来,事情恐怕就不那么美妙了 ·静态类型检查类似“疑罪从有”的有罪推定制,动态类型检查类似“疑罪从无”的无罪推定制 ·尽可能守规则,必要时求变通 ·规则如裤带,过于宽松和过于束缚都不好 ?提问 ·动态语言与动态类型语言是一回事吗? ·数据类型有哪两个要素?其意义何在? ·什么是动态类型和静态类型?它们的区别是什么?各有什么优缺点? ·什么是鸭子类型(duck typing)?它有什么优缺点? ·什么是强类型与弱类型?什么是类型安全的? :讲解 待教室平静下来,冒号再度开腔:“在谈论动态语言之前,最好先澄清一下它与动态类型语言之间的区别。” 叹号讶然道:“它们不是一回事吗?一直以为动态语言是动态类型语言的简称呢。” “有亲戚之名,却无血缘之亲。名称上相似,加之动态语言绝大多数确是动态类型语言,造成混淆实属在所难免,但二者之间并无必然联系——动态语言不一定是动态类型语言[1],动态类型语言也不一定是动态语言[2]。”冒号飞跑的舌头几乎绊蒜,同时把众人的脑子搅成了一锅粥。 见势不妙,冒号改用迂回战术:“我们不妨再谈开些,大家对数据类型是如何理解的?” 逗号随口道:“数据类型不就是数据的种类吗?” 众人暗笑:说了跟没说差不多。 冒号课堂§5.2:数据类型(2)时间:2011-06-27 BlogJava xyz98冒号说道:“数据类型包含两个要素:一个是允许取值的集合,一个是允许参与的运算。例如int类型在Java中既定义了介于− 231和231 − 1之间的整数集合,也定义了该集合上的整数所能进行的运算。现在的问题是:数据类型的意义何在?” 句号回答:“限定一个变量的数据类型,就意味着限制了该变量的取值范围和所参与的运算,这从一定程度上保证了代码的安全性。” 冒号追问:“还有吗?” 句号略作思考后说:“用户自定义的数据类型,如C中的结构和Java中的类或接口,赋予数据以逻辑内涵,提高了代码的抽象性。” “精辟!”冒号赞道,“数据类型既有针对机器的物理意义,又有针对人的逻辑意义。前者用于进行底层的内存分配和数值运算等,后者用于表达高层的逻辑概念。既然类型如此重要,类型检查就必不可少了[3]。所谓动态类型语言(dynamic typing language),正是指类型检查发生在运行期间(run-time)的语言。” “那静态类型语言(static typing language)自然是类型检查发生在编译期间(compile-time)的语言咯。”引号接话道。 冒号回应:“一般的说法是这样,但我更愿意将‘编译期间’四个字改为‘运行之前’,否则容易让人误解为静态类型语言一定是编译型语言(compiled language)。” 问号问道:“是否可以这么说:静态类型语言需要变量声明,而动态类型语言则不需要?” “这话只对了一半。”冒号评论,“动态类型语言固然不需要显式的变量声明(explicit declaration),一些静态类型语言有 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |