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