天生一对

Born to be together,这句也是Apple以前iTune和iPod的广告词。不过这里是用来比喻两个语言特性:类型推断和命名参数。

自ML诞生的类型推断技术似乎随着C#3的宣传日渐进入主流视野,一些新语言如D,Scala也实现了所谓“局部类型推断”(只简化声明,但不推断函数接口)。类型推断简化了大量不必要的类型声明,使代码获得动态脚本语言一样的感观,同时有获得编译期的类型检查和运行时的性能。不过在可读性上或多或少有点影响,有几种解决办法:
1)添加注释,以后注释和代码的同步维护负担重,不理想。
2)添加类型声明,像Haskell那样,繁琐。当然显式类型声明有时是用来约束更紧的类型。
3)更具说明性的参数命名+命名参数,这也是为什么动态语言没有类型声明也不会感觉不可读的问题,甚至比静态语言在调用函数的时候更可读。某种程度上VB发明的匈牙利命名法也不失为一种增进动态语言可读性的办法。

命名参数有如下好处:
-不用再硬记参数顺序了,没有IDE提示也能过日子
-相当于调用时的参数描述文档
-一般支持命名参数的语言都会支持可选参数(这两个也是天生一对),可选参数的意义不仅是简化函数调用,而且让参数API可扩展又不影响已有代码。可选参数还消灭了方法重载(overload)的必要。

埃,这么多好处,没有命名参数的语言真是没法活了。

说道命名参数的实现,一般分两类:一种是语法级实现如Python,Ocaml;一种是用hash/record或某种复合数据结构模拟,如Ruby和Haskell。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值