语言的信息密度


不同语言的表现力是不一样的,以变量名为例,虽然大部分语言都对变量命名的长度没有严格的限制(只要别太长),但语言的风格强烈影响了代码的信息密度。

1. 低密度语言(10-20字符/语义)

我不得不谈到Java,Java是我见到的信息密度最低的语言。大量的Factory,Builder风格的超长命名,加上各类设计模式,继承和接口,再由于没有匿名函数导致的大量的内部类,大量的import,让Java冗长不堪。

C#好很多,至少解决了Java的很多问题,比如Linq,lambda和event,如果你愿意,能够大量压缩代码。但由于两者本系同源,所以命名一定要长,一定要TaskManagementFactoryBuilder才显得专业。

2.中密度语言(2-5字符/语义)

Python的风格,让它成为典型的中密度语言。

  • 类名驼峰,变量名小写+下划线。
  • 用_打头来替代private修饰符。
  • 动态类型特性使其不需要声明变量类型
  • c=[1,2,3]替代了C#风格的c=new List<int>(){1,2,3}
  • 变量名普遍较短,能用repl就不用replace,约定俗成。

像go, Ruby基本都属于这一类。

3.高密度语言(1字符/语义)

正则应该是密度最高的语言了吧,一个字符代表一个含义,简直不能更短。Perl与正则如此有渊源。因此Perl的代码可以惊艳成下面这个样子:

my @fib = 0, 1, *+* ... *;
say "Fibonacci number #8 is @fib[7]";

在C#/Java中用枚举,Python中用全大写变量,而到了Perl,只需要一个字符去指定行为,比如Perl下的正则控制字符:

/g 全局替换
/i  不区分大小写
/x 宽松排列模式

所以,写Perl可以写成天书,只有自己能懂。代码简洁到无可附加。
bash的风格和命令,也是高密度语言的典范,想想ls,tar等等...

5. 其他语言

C语言有点不好评价,它太灵活,大神可以将其用成Perl,也能让它变成Java。当然,C语言的最佳实践,应该在低到中密度中间的位置,5-8字符/语义。

Lisp也是个特例,因为表现能力太强,而且一堆括号。所以如果你看很多人写的Lisp,变量名都长得像注释。我估计大神本来也不想写这么长,只是发现如果不这么长,连自己都记不得怎么回事了。

语言风格本来是见仁见智的事情,现在自动补全已经如此完善,密度低一点是不是让领导觉得更有工作量呢?

一年以前我还是C#控,觉得Python代码看着不专业,为了保证和C#代码的兼容性,我把Python按C#的套路写(驼峰式变量+继承),后来怎么看怎么不对劲。再后来,我一气之下扔掉了包袱,按照Python风格全部重改了代码,看着好多了。

当然,大神说过,不能REPL的语言都是耍流氓,高到一定密度之后,代码都不用保存了,随想随写。

以前我觉得,没有自动代码提示简直没法写代码,后来在各种开发机上用vim写python,发现并没有感到不适,我还是被Visual Studio惯坏了。事实上,我们写作文从来没有“自动提示”,不也写的很好效率很高么?

特定领域,尤其涉及到模式等抽象概念,很适合regex/Perl风格。但我觉得用Python风格可能更漂亮吧。至于Java,如果有任务开发,那就没办法只能按标准风格去写了呗。说不定再过一段时间,我就迷恋上了Perl,又觉得Python这样的语言不能看了呢。

posted @ 2016-08-18 21:29  FerventDesert  阅读(5109)  评论(0编辑  收藏  举报