5

在我所瞭解的解釋型語言(Python,Perl,R,bash)中,多行註釋似乎通常涉及到某種語言的另一個功能(例如多行字符串)的一些誤用。爲什麼解釋/腳本語言很少有多行註釋?

解析器的解析類型是否有固有的特性,使得多行註釋變得困難?它似乎不應該與多行字符串有顯着不同。

回答

0

在Python中,我們只是使用多行字符串作爲註釋。

爲什麼會有兩種語法?

+0

也許這適用於Python,但Perl通常具有兩種方式比一種更好的理念。甚至Python通常也可以讓你以兩種不同的方式做同樣的事情,如果這樣做更清晰。 (有一個字符串被分配給任何東西都不等於一個評論,至少對我來說並不明顯。) – Xodarap 2011-05-20 18:55:12

+0

@ Xodarap:我沒有回答其他語言。我正在回答Python。你的問題可能太寬泛,不能有任何可能的答案,因爲每種語言的答案很可能是**不同的**。 – 2011-05-20 19:26:57

1

事實上,當涉及到植入任何形式的多線註釋(基於大多數解析器用來讀取/執行腳本的方法)時,我確信沒有任何意義。以我個人的觀點來看,由於分發和解釋(最高級別的語言通常被編譯並且只有一部分是開源的),腳本最需要多線評論。我知道,一種腳本語言Lua的確使用了多線評論。

--[==[ 
COMMENT 
]==]-- 

我敢肯定這只是一種僥倖,許多語言不支持這一點。使用單行註釋創建多行註釋通常是可以接受的。

//*****************************************\\ 
//**          **\\ 
//**   JOHN SMITH    **\\ 
//**  COPYRIGHT 2008-2011   **\\ 
//**          **\\ 
//*****************************************\\ 

很多人也將利用單行註釋使用註釋字符開始關閉影像(什麼樣的上面顯示,其中//是註釋字符(S來創造一個涼爽的圖像(ASCII ART) )/短語)。

+0

是的,但這種風格的評論只是比其他任何事情做更多的工作。我寧願不向開發人員支付大筆費用,只是爲了保持正確的評論。 C風格的多行評論遠遠好看IMO – DarinH 2011-05-23 14:48:12

+0

@drventure非常非常真實!但還有多少工作?你多久實際上需要包括一條多線評論?通常一次在代碼片段的開頭或一個較大的應用程序中的一對。事實上,它可能只會爲你節省一小部分時間,結果是一樣的。它真的很重要嗎?我完全贊同多行評論,但我不會嘮叨開發人員將它們添加進去。希望這有助於:) – FreeSnow 2011-05-23 16:06:46

0

並非所有的解釋性語言都缺少多行註釋。例如,Ruby有它們。

我懷疑這在很大程度上是語言設計者的偏好。有些人並不認爲多行評論是必要的功能。 (現在許多代碼編輯器提供了使用單行註釋評論/取消註釋大塊代碼的快捷方式。)

此外,多行註釋給分析器增添了複雜性。例如,它必須處理嵌套評論的可能性。爲什麼增加複雜性,如果你不需要?

+1

「爲什麼增加複雜性,如果你不需要......」但這就是多行評論,以消除處理多個單行註釋的複雜性。最好是讓編譯器/解釋器比開發人員處理它。 – DarinH 2011-05-20 18:54:57

+0

我不認爲多行評論對任何人都更簡單。腳本語言通常具有1個字符,例如'''這意味着一條評論的開始。這很簡單。在解析器中實現起來很簡單,程序員很容易記住,非編程人員很容易記住。如果你不想在評論中注意,很容易在註釋中grep或省略)。沒有必要增加複雜性,只有少量收益。 – nos 2011-05-20 18:58:48

+0

@nos,@vocaro:多行註釋的語言通常不允許它們嵌套。所以多行註釋是常規的,因此等同於單行註釋(即CFG中的終端)。我不認爲這會使解析器顯得更復雜。 – Xodarap 2011-05-20 19:01:54

0

我懷疑這只是一種語言偏見。 C風格的多行註釋往往以c-esque語言顯示,但大多數其他langs沒有相同的語言。

至於解析器本身。沒有理由我能想到解析器不實現多行註釋,除了lang設計者不想要的。大多數解析器生成器可以輕鬆處理構造。

+2

雖然非C風格的語言也有多行註釋:OCaml具有'(* .. *)',Haskell具有'{ - .. - }'... – Xodarap 2011-05-20 18:57:10

+0

真的夠了,我相信有人提到Ruby也會。但我很難將OCaml或Haskell視爲主流,我從來沒有聽說過他們被嵌入任何情況下。但是,我完全有可能從來沒有碰過任何可以做的項目。 – DarinH 2011-05-23 14:46:14

0

你的問題有兩個錯誤的假設。

第一個錯誤的假設是「解釋/腳本語言很少有多行註釋」。你正在遭受確認偏見。有單行註釋的編譯語言(例如Fortran,許多Lisp方言)和帶有多行註釋的解釋語言(例如Perl,Python)。

第二個錯誤的假設是涉及「濫用另一個功能」。語言的設計作爲一個整體來說是更好的,如果某些功能無論如何都存在,那麼就不需要爲多行註釋引入額外的功能。例如,在Python中,存在多行字符串,並且僅由一個字符串組成的指令是無操作的,所以多行字符串可以做出很好的評論。在Perl中,有多行註釋的一種方式是通過文檔格式Pod;註釋是一種文檔,因此使用=pod … =cut進行多行註釋是很自然的(多行字符串,通過here documents<<'EOF'; … EOF是另一種方法)。

+0

哦,來吧。你是否會直截了當地坐在那裏,告訴我拉里沃爾排除了多行註釋,因爲[Perl會有多種方式來做同樣的事情](http://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it) ? – Xodarap 2011-05-21 17:56:57

+0

@ Xodarap:絕對。作爲[第一美德]的冠軍(http://en.wikipedia.org/wiki/Larry_Wall#Virtues_of_a_programmer),拉里沃爾並沒有打算增加額外的功能,如果有其他方法來獲得它。 – Gilles 2011-05-21 18:05:09

1

不,沒有理由讓腳本語言不支持多行註釋。 JavaScript,Groovy,Lua,PHP,REXX,Smalltalk和Dart都支持多行註釋。