有些語言用{},有些語言用end,大家怎麼看?
大家對{}類的語言和end類的語言都是怎樣的看法,了解一下。
void fuck() {printf("oh ye fuck
");}function fuck()printf("oh ye fuck
enddef fuck(): print("oh ye fuck!")
")
那你可曾見過括弧和end同時用的語言嗎?
@implementation Fuck -(void)fuck { // do fucking things}@end
end系、換行系或者縮進系的語言處理lambda 表達式和匿名類等成分複雜表達式語法的時候,就沒有一個是好看的。目前只有{}取得領先地位(lisp同理
其實這有一個很明顯的規則。只要語法本身試圖規定格式化的細節,哪怕只有一點點,以後在發展的過程中就會面臨類似的問題。
- C系和lisp系就是完全不格式化的,因此幹什麼都很容易。
- Haskell雖然表面看起來有格式化的要求,但是實際上它是多種格式化任君選擇,所以代碼還很好看。但是最新的draft有點走火入魔的意思。
- python就不要提了,看哪個lambda expression那麼丑(逃。
歐洲系用begin/end (從ALGOL繼承而來,但是ALGOL的設計者Alan Jay Perlis是個美國人。),特別是後來Niklaus Emil Wirth設計的Pascal等等也是begin/end。由法國人主刀設計的Ada也是如此。
(美國系?)C用{},應該是當年Dennis Ritchie用電傳打字機打字麻煩,能省就省吧,反正丫是工程師,也不是大學教授,不打算過於關注形式上的美感。
評論區提醒大括弧最早是從CPL(C的祖宗)里出來的,CPL是英國老實人設計的。謝。
咋就沒個語言用 [] 呢
省了一個shift打起來快了很多啊
其實我一直覺得用括弧的語言最後還是要設定一堆規範來規範你咋縮進。。。
還真的不如你直接就用縮進。
同理變數名,把寫法放開,最後還是要加一堆標準來限制咋起。還要開發各種 lint,還不如變數名不規範就不給編譯。。。你漏了 lisp 和 Python。
人生苦短(逃end: 浪費生命。對普通編輯器不友好,不能簡單地高亮代碼塊頭尾符號。
縮進: 縮進複雜一點要看哭。匿名函數不好看,典型如python,lambda是半廢的。
{}:贊。
個人覺得,縮進語法的語言,代碼量少看起來還挺美,像python,寫的代碼多了還是覺得c語言的那一套好,看看新的go和rust語言都是採用c那套。有個新的nim語言用的是縮進語言,靜態類型語言加縮進,簡直看不得,整個板面一團糟,怎麼美得起來。
Ruby: 嗯?Python: 用冒號啊PHP: 冒號?我也可以LISP: ???
他總得用個啥吧
還有一類是直接反著寫的,比如if.....fi,case.....esac等,linux shell就是這樣。
個人覺得 end 結尾比括弧好看,打起來也方便。有無數次寫很長的 namespace 裡面的類,到最後 }}} 多層,都不知道哪個對應哪個了。
還是 VB 的語法有可取之處,改良下弄個可選的 end class xxxx:
可以這樣:
class YourMother
end
如果實現太長了,可以寫
namespace YourWholeFamily
class YourFather //... end class YourFatherend
相信前端寫 HTML 的同學會同意我的。
早年的字型檔比標準ascii還要小,不一定有大括弧(沒記錯的話反斜杠的發明最初其實是為了在Fortran里組合取、析取運算符的),所以就會有,變數不分大小寫以及沒有大括弧之類的情況。於是有些語言就搞起了end來。
現在嘛。。。也許用end的語言更容易寫詞法分析吧,但是影響真心不大,估計純粹是legacy issue。
順帶,其實還有都不用的語言,結構化的例子是python,甚至還有根本不需要標點符號的PostScript 233
你見沒見過啥都不用的?
def fuck
print "oh ye fuck"enddef fuck; print "oh ye fuck
"; end
還是{}最好看,代碼複雜的時候看上去還是比較清晰。類似vb那種用sub的簡直不能忍,為什麼要多敲幾個字元?why?
感覺Ruby被黑了一下
像Verilog這種語言begin end一起用的,其實最後還是認為括弧要比單詞實在,括弧一眼就能望穿整個結構,單詞的話你還得認真看那個是end還是其他If什麼的
end加上縮進明顯反人類啊,還什麼哭短 應該叫哭長了
覺得Python的縮進最好看。
但我習慣寬度為8的Tab縮進,和別人用4個空格縮進的代碼混起來就很尷尬……
推薦閱讀:
※為什麼unordered_map源碼中的need_rehash函數只是將桶容量擴到下一個最小的素數?
※C++里為什麼要添加lambda?是C++本身的什麼問題造成的?
※智能指針有什麼不足之處?
※如何理解C++中的關鍵字static, const, 以及#define在定義變數時的區別?
※有講C/C++代碼優化和編譯器優化的書或文章嗎?