Ruby中unless和if not明明相似,为何不去除一者?

语言是信息的载体,程序设计语言也是如此。
程序设计语言实现了人与机器的交互,即信息通过人传递给机器。这仅仅是一方面而已。
程序语言不仅仅是给机器看的,更是给人看的。
关键词诸如楼主所述的unless, if not等,置于相似的语言环境,实现相似的功能。
这代表其向机器传达的信息的相似的。
通过语言要素的组合,我们向机器传达了我们想要表达的信息。

再联想一下自然语言,有这么一个故事,两位算命师分别对国王说:
(A)“国王的亲戚们比国王活的都短。”
(B)“国王比国王的亲戚们活的都长。”
我们可以看到,这两句话所表达的信息是相同的。
但最后的结果却是:A被恼羞成怒的国王杀掉,B则接受了喜上眉梢的国王的赏赐。
为什么表达的信息相同的,而结果却是不同的呢?
——因为人是有感情的动物,语言至信息的处理受到感情的左右。
我们可以设想,当人工智能发展到相当的高度,机器人实现普遍化时,如果这个国王是机器人,那么这两句话传达给它,它都能理解其本身的涵义,给予A和B相同的惩罚。

机器是准确无误的。程序设计语言面向机器,要求其设计时准确无误,不能产生歧义。
而与此同时,程序设计语言也是面向人的。面向人,要求其“人性化”,为人着想。
诸如早期的机器语言和汇编语言,其实本质上并无不同,但机器语言很快为汇编语言所取代,是因为汇编语言更“人性化”一些。
有些不太成功的语言作者,在设计之初,仅仅将语言要素聚集起来,使得使用者怨声连连。这就是因为其并未考虑到“人”的因素。

语言并非是词汇或语法要素的聚集体。就连汇编这种由助记符构成的语言,也不仅仅是助记符的集合。
语言除了硬性的诸如语言语法、语言关键词(如if case等)等“硬指标”,还包括语言习惯、语言风格等“软指标”。
“硬指标”是程序语言设计时所首要考虑的,其主要面向机器,是衡量语言本质的重要标准;而“软指标”则往往是经过不断的使用渐渐形成的,它受到“硬指标”的直接影响,但同时也经历了与人的磨合。诸如Ruby中缩进通常使用双空格,就是一种软指标。
“软指标”更能体现“人性化”这个特点。软指标是程序设计语言经历了与人的磨合,自然而然形成的,是判断语言成熟与否的标准。

Ruby是“面向程序员的语言”。其设计之初,就是考虑了“人”这一要素。
同一语义的不同表达,正是Ruby的设计哲学“面向人”之所在。
Ruby中String类的两个方法length和size是等价的,但是同一个方法为什么要起两个不同的名称呢?——人的习惯不同。
对“人”的考虑,使得Ruby具有特殊的魅力。

2016.2.26

posted @ 2016-02-26 00:49  ChillMagic  阅读(1380)  评论(0编辑  收藏  举报