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都支持多行注释。