語言的信息密度



不同語言的表現力是不一樣的,以變量名為例,雖然大部分語言都對變量命名的長度沒有嚴格的限制(只要別太長),但語言的風格強烈影響了代碼的信息密度。

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這樣的語言不能看了呢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM