Wait the light to fall

多行注释

焉知非鱼

multiline comments

RFC 5,作者:Michael J. Mathews。多行注释

这是第一个与文档有关的 RFC 提案。它要求在大多数现代编程语言中提供一个共同的功能:多行注释。

没有多行注释的问题非常明显:如果你需要注释一大段代码,你需要在每一行的开头手动插入一个 # 符号(在 Raku 中)。如果你没有一个文本编辑器来完成这个工作,这可能会非常的乏味,比如说,一个快捷键或类似的工具。这种做法在大型代码库中非常常见。出于这个原因,Michael 将 C++Java 称为:

流行的语言,从一开始就被设计为对大型项目有用,实现了单行和多行注释。

在这些语言中,你可以输入如下注释:

// single line of code

/*
 Several lines of code
*/

但是,除此之外,在 Java 中,你还有一种特殊的多行注释语法1来编写文档。

/**
* Here you can write the doc!
*
*/

很多人提出 POD 是解决这个问题的方法,但是 Michael 列出了一些不便之处:

  • “它不直观”:鉴于 POD 只用于 Perl,来自不同语言的人学习全新的语法将面临一些困难。

在我看来,这并不是一个大问题,因为 POD6 的语法很简单,而且它有很好的文档。此外,对于新手来说,它是相当直观的:如果你想要一个标头,你用 =head1,如果你想要斜体,你用 I<> 等等。

  • “这不是文档”:这个还是对的。主要问题是,当你想注释一大段代码时,那很可能不是文档,所以使用 =begin pod ... =end pod 就有点奇怪了。

  • “它不鼓励一致性”:POD 的另一个问题是,你可以在它的语法中使用任意项。

=begin ARBITRARYTEXT
...
=end ARBITRARYTEXT

虽然这种行为给了我们很大的自由度,但也使不同项目和用户的一致性变得复杂。

经过讨论,Perl 选择了 POD 来实现多行注释。尽管如此,Michael 的建议还是被采纳了,Raku 支持类似于 C++Java 的多行注释,但语法略有不同:

#`[
Raku is a large-project-friendly
language too!
]
say ":D";

而作为一个好奇心,Raku 有嵌入式注释,就是:

if #`( embedded comment ) True {
    say "Raku is awesome";
}

最后,作为现代的百年语言,Raku 给你的方式不止一种,所以选择最适合你的方式吧!


  1. 这并不是真正的多行注释 因为你还需要在每一行的开头打上 * 号。 ↩︎