哪種編程語言的代碼可讀性比較高?

掌握了基本語法後,能比較容易地看懂他人寫的代碼?

在其他條件都相近的情況下


Python. 因為在我沒有學習Python的時候,我發現讀Python代碼基本上沒有障礙,如英文一般


這些高級語言的語法都大同小異,還是跟寫代碼人的水平和你對這門語言的熟悉程度有關。


英語母語的國家覺得英語的可讀性最高。

同樣,編程的時候,你最熟悉哪種語言,哪種語言的可讀性就最高。

其實就是習慣,習慣了就好。

------------------------------------------

最後,可讀性跟語言的關係真不大,關鍵是寫代碼的那個人能不能寫得你看懂。


其實 Erlang 的語法極為簡單並且清晰。但我知道我說了也是白說,因為對大多數人來說,「簡單、清晰」會被「不熟悉」一拳打倒。

知識分子就應該知道白說也要說,哈哈~


經 @Kenneth 提點,發現包括自己在內的多數回答都偏到「誰更接近自然語言」的比較中去了。

回到這個問題,在我的理解中,高度「正交化」的語言是更容易看懂他人代碼的,在這個指標上,我投票給 Python。

C++ 應該算反例吧。

至於「誰更接近自然語言」——

我覺得大家了解過 AppleScript 之後應該可以結束爭論了。

這個語言中有一個關鍵詞 "the",用法是 ( AppleScript Keywords ) :

syntactic no-op, used to make script statements look more like natural language

隨手貼一段真實的代碼:

tell application "Finder"
set source_folder to choose folder with prompt "Please select directory which contains photos"
set the_items to list folder source_folder without invisibles
set source_folder to source_folder as string

-- Copy from template file
set template_file to choose file with prompt "Please select php template file"
open for access template_file
set template_content to (read template_file)
close access template_file
-- ...
end tell


Ruby,在只使用if for else alias case when def class module等關鍵字,用基本語法普通地構建的情況下。


代碼行數相同的情況下,編譯器乾的事兒越少人越容易看懂:首推C語言。

問題複雜度相同的情況下,談易讀性,支持DSL的語言才是王道:比如Ruby, Scala。例子如下:ScalaTest


你最常用的那種語言!

每個人對語言的感覺都是不一樣的,最常用的會最熟悉,會覺得最易理解,可讀性最高。就像你問英國人,哪種語言最好懂,他一定說是英文;而問一個中國人,那答案必定是中文。即便是語言里存在相對於另一個語言來說感覺可讀性不那麼好的地方,但是用此語言的人已經把它們當做成語、習慣用語了,不會覺得可讀性是啥大問題。


Scala,也需學起來很複雜,但是讀起來真的很簡單


Perl 發明人是語言學家…


Objective-C,好的代碼本身就是一份文檔。

例子見鏈接中zantetsu的回答,寫的很棒。

Objective-C 的一些函數名為什麼都這麼長? - 知乎用戶的回答

引用部分內容如下:

可讀性。

比如你設計一個邀請朋友參加聚會的方法,除了指定姓名外,還可選擇是否提前預約:

public void inviteFriend(String name, boolean appointment);

然後別人調用起來是這樣的:

somebody.inviteFriend("LiLei", true);

問題就來了,寫程序時即便不會搞錯,等到閱讀這段代碼的時候,這個布爾參數的理解就非常有歧義,除了「是否預約」之外,還可能理解為「是否貴賓待遇」,「是否接送」,「是否發請帖」……。如果不看文檔中參數的描述,根本就無法理解正確。

所以為什麼有人提倡不建議使用布爾參數,就是因為可讀性麻煩,一種解決方案是用枚舉:

public void inviteFriend(String name, Appointment appointment);

但引入了新的類型,似乎更麻煩了……來看看 Objective C 是怎樣的:

-(void) inviteFriend:(NSString *)name appointment:(BOOL)appoint;

看起來挺麻煩的,但調用起來呢?

[someBody inviteFriend:@"LiLei" appointment:YES];

看起來是不是既方便,又一目了然?


Lisp


這個要取決於使用者的思考方式。對於理解了lambda calculus的人而言, lisp無疑是相當可讀的。對於看著代碼同時腦海中翻騰著塊狀內存的操作的人而言,c無疑也是很可讀的。主要還是看語言本身的語法風格是否契合了要解決的問題所抽象出來的思考方式。從這點來說任何深入使用ruby第一步,就是把應用域思考方式翻譯成一個DSL。

說實話,對於腦子裡思考著一個ALU的人來說,彙編都是很可讀的東西。


@vczh 的 tinymoe.


Python,是實用語言中最接近偽代碼的語言。


SQL。。。。。。


其實我本來相投http://VB.net,但是想想還是COBOL,基本上看到代碼後大家覺得COBOL的語法實在是太太太簡單。

什麼 GOTO REDEFINE

不過VB也是很拼的

Right(xxx,5)

If a &<&> b then exit while

If a &<&> b andalso b &> 0 then raiseevent event1

Sub MessageReceivedHandler() Handles

Message.Received

CallByName(Object, Method)

For i = 1 to 100 Step 2

Property a

MustInherit Class Animal

While Exit While End While

For Exit For End For

Sub Exit Sub End Sub

不要嫌棄VB啰嗦,因為IDE把這些代碼都自動產生了。而且還不用關心有沒有(),忘了加的IDE也會自動加上。

好喜歡大VB!


ruby,最接近自然語言的感覺。比如6.times{do somethings here}多簡單明了


這個問題應該用代碼說話:


個人覺得你列的關鍵詞的語言中,Python的可讀性是最好的。


推薦閱讀:

學習編程,讀大學的和自學的有何區別?
實際軟體工程中是否真的需要100%代碼覆蓋率(code coverage)?
除了計算機相關專業,大學裡哪些專業也在學習編程?
什麼是「編程天賦」?你見到的最有「編程天賦」的人是什麼樣的?
什麼是 Agile Software Development(敏捷軟體開發)?

TAG:編程語言 | 編程 |