25

在对克林贡语言进行了一些愚蠢的思考之后,来自这篇文章的我开始了一个愚蠢的爱好项目,创建一种可编译为 Lua 字节码的克林贡编程语言。在最初的语言设计阶段,我查找了有关克林贡程序员的信息,并发现了以下克林贡编程规则:

真正的克林贡战士不会评论他的代码!

所以我决定我的语言不支持评论,因为任何好的克林贡语都不会使用它们。

现在,对于我们人类程序员来说,许多克林贡方式似乎并不合理,但是在涉足我的爱好语言的设计和实现时,我开始意识到这条关于评论的克林贡规则确实非常合理,即使不是很好。

从编程语言中删除评论的能力意味着我必须编写有文化的代码,没有例外。

所以这让我想知道是否有任何语言不支持评论?

是否有任何真正好的论据可以不从语言中删除评论?

编辑:需要任何好的评论示例吗?


PS> 反正我上面的爱好语言有点傻,所以不要太关注我的实现,和一般需要的注释概念一样

4

32 回答 32

24

不要评论你在做什么,而要评论你为什么这样做。

WHAT 由干净、易读和简单的代码处理,并选择适当的变量名来支持它。注释显示代码本身不能(或难以)显示的更高级别的代码结构。

于 2008-12-24T05:27:19.473 回答
23

我不确定我是否同意“从编程语言中删除评论的能力意味着我必须编写有文化的代码,没有例外”这句话中的“拥有”,因为并不是所有代码都被记录在案。我的猜测是大多数人会编写不可读的代码。

更重要的是,我个人不相信实际世界中不言自明的程序或 API 的现实。

我为我的论文手动分析整个 API 文档的经验表明,您经常需要携带比仅在签名中传达的信息更多的信息。如果您从您的语言中删除界面注释,还有哪些替代方案?没有文档不是一种选择。外部文档不太可能被阅读。

至于内部文档,我可以理解您希望减少文档以说服人们写得更好的观点。但是,评论服务于许多协作和协调目的,旨在提高对事物的认识。通过将这些细节放逐到外部位置,您正在减少它们进入未来读者意识的机会,除非您的工具很棒。

于 2008-12-24T05:19:03.637 回答
13

呃,在测试期间不能快速注释掉一行(或多行)对我来说听起来很烦人,尤其是在编写脚本时。

于 2008-12-24T06:00:33.680 回答
9

一般来说,评论是一个表明设计不佳的疣,特别是冗长的漫无边际的评论,其中很明显开发人员不知道他们到底在做什么,并试图通过写评论来弥补它。

评论有用的地方:

  • 在修复旁边留下票号,以便未来的程序员可以了解业务需求
  • 解释一个特别棘手的 hack
  • 一段代码的业务逻辑注释
  • API 文档中的简洁描述,以便第三方可以使用您的 API

在任何情况下,程序员都应该努力编写描述性的代码,而不是编写描述写得不好的代码的注释。话虽如此,我认为语言应该而且必须支持评论有很多正当理由。

于 2008-12-24T05:21:36.643 回答
7

您的代码有两种不同的受众:

  • 编译器
  • 像我们这样的人类

如果您选择完全删除注释,那么您所采取的假设是您将只为编译器提供服务,而不是其他任何内容。

当然,作为克林贡人,您可能不需要评论,因为您不是人类。也许您可以通过在 IL 中讲话来清楚地向我们展示您的能力?

于 2008-12-24T05:24:58.650 回答
5

您的代码中不需要单个断言,因为在发布模式下,它们都消失了。但是当 C++ 没有内置断言时,有人编写了断言宏来替换它。

当然,出于或多或少相同的原因,您也不需要评论。但是如果你设计一种没有注释的语言,人们会开始做这样的事情:

HelperFunctionDoesNothing("This is a comment! Blah Blah Blah...");
于 2008-12-24T07:43:35.187 回答
4

我很好奇。你如何阻止某人声明一个包含注释的静态字符串,然后忽略 func/method/procedure/battle/whatever 的其余部分的变量?

var useless_comment = "Can we destroy our enemies?"
if (phasers on full) return Qapla'
于 2008-12-24T08:26:42.107 回答
3

语言需要注释。至少 95% 的注释可以用更清晰的代码代替,但仍然存在需要记录的假设,如果您正在解决一些外部问题,您绝对需要记录。

我从来不会在没有首先考虑我是否可以更改代码以消除对它的需要的情况下写评论,但有时你不能。

于 2008-12-24T05:17:51.037 回答
3

虽然默认情况下所有源代码都受版权保护。通常很高兴:

  1. 提醒阅读源代码的人它受版权保护

  2. 告诉人们该源代码文件的许可条款是什么

  3. 告诉他们是否正在查看受保护的商业秘密

不幸的是,没有评论,很难做到这一点。

于 2008-12-24T07:30:12.140 回答
3

我是唯一一个出于多种目的注释掉几行代码的人吗?

于 2008-12-24T09:33:00.803 回答
3

制作一种无法发表评论的语言会比你想象的更难。

if (false) {
    print("This is a comment. Chew on that, Klingons!")
}
于 2009-07-06T22:27:35.700 回答
2

虽然人类确实需要能够对代码进行注释,但语言直接支持注释并不是绝对必要的:对于大多数语言来说,编写一个删除一行注释的脚本(例如,所有以'#' 或其他字符)然后运行编译器。

但实际上,我很惊讶和失望地得知,即使是我最喜欢的深奥编程语言也支持注释:Brainf**kWhitespace。这些语言很难阅读,因此它们似乎不应该支持评论。(与我最喜欢的其他深奥语言相反:LOLCode,它是自我记录的,在 lolcats-speech 中)

在这一点上,我会与其他回答者持不同意见:我说,忠于你对克林贡编程语言的愿景,不支持评论!

于 2008-12-24T05:27:25.853 回答
2

反对意见的一点是,它们往往与代码过时。任何时候添加冗余,都会冒着这种不一致的风险。

实际上,当一个小组使用 NLP 分析一些大型系统中的锁定注释,然后将它们与静态分析的结果进行比较并能够通过这种方式修复一些错误时,我实际上看到了一些有趣的研究。

于 2008-12-24T05:39:23.690 回答
2

识字编程不是和代码一样多的评论吗?当然,我所看到的关于文学编程的大部分内容都有与代码一样多的解释,如果不是更多的评论的话。

于 2008-12-24T06:27:16.153 回答
1

您可能认为使用您的语言编写代码的开发人员会付出额外的努力来编写清晰的代码,但实际上有责任设计一种表达力如此之强以至于不需要注释的语言。见鬼,甚至英语也不是那样的(我们仍然加括号!)。如果你的语言不是这样设计的,它很可能和 Brainfuck 一样可用,并享受 Brainfuck 的流行和尊重。

我应该添加链接还是链接被视为commentlike?

此外,如果需要,人们会通过劫持字符串和滥用变量名(除了代替评论之外什么都不做)来找到添加评论的方法。你读过哥德尔·埃舍尔·巴赫吗?

于 2008-12-24T05:11:15.837 回答
1

完全删除评论功能将是一个坏主意。当然,开发人员必须学会用最少的注释编写代码,即编写自我记录的代码,但是在很多情况下,人们必须解释为什么要以这种方式完成某件事。考虑以下情况:

  • 新的开发人员可能会开始维护代码,而原来的开发人员已经离开/退出项目
  • 规格或市场需求的变化会导致一些违反直觉的事情
  • 版权声明,尤其是在开源时(某些开源库要求您这样做)

我的经验也是,新程序员倾向于发表更多评论,并且随着他们发展专业知识,他们的代码往往会自我记录和简洁。一般来说,评论应该是关于为什么而不是如何或什么。

于 2008-12-24T05:29:02.073 回答
1

不——没有一种编程语言需要注释。

该语言适用于计算机。评论是针对人类的。您可以编写一个带有 0% 注释的程序。它会正确或错误地执行。你不能编写一个有 100% 评论的程序。它要么不能编译——没有 main() 等——或者,对于脚本语言,什么也不做。

此外,真正的程序员不会评论他们的代码。就像克林贡人一样。

于 2008-12-24T05:38:01.727 回答
1

虽然我同意 Uri 的回答,但我也发表了一种没有评论的语言。( ichbins .) 语言要尽可能简单,同时仍然能够清晰地表达自己的编译器;因为你可以在没有评论的情况下这样做,所以他们被抛弃了。

我正在不断地研究一个支持注释的修订版,但有点不同:文字编程风格,代码嵌套在文本中,而不是注释嵌入代码中。它还可能在以后获得示例/测试用例作为一流的语言功能。

祝克林贡黑客攻击好运。:-)

于 2008-12-24T06:24:27.250 回答
1

我无法告诉您我对 Javadoc 的感激之情——在评论中设置它真的很简单。所以这至少是评论有用的一种意义。

于 2008-12-24T06:28:02.657 回答
1

不,当然一种语言不必有评论。但是一个(有用的)程序确实必须有注释......我不同意你认为识字代码缺乏注释的想法。一些非常好的代码很容易通过注释理解,但如果没有注释则很难理解。

于 2008-12-24T07:03:23.693 回答
1

我认为在许多情况下都需要评论。

例如,想想算法的。假设有一个用 C 语言编写的函数来解决旅行推销员问题,那么可以使用多种技术来处理这个问题。而且这些代码本质上通常是神秘的。

如果不明确描述所使用的参数和算法,通过使用注释,几乎不可能重用这段代码。

于 2008-12-24T09:32:48.947 回答
1

我们可以在没有代码评论的情况下生活吗?当然可以,但这不会让生活更轻松。

于 2008-12-24T10:34:54.623 回答
1

注释很有用,因为它们可以让阅读您的代码的人(可能是“未来的你”)放心,您已经考虑过她的福利。

于 2009-07-06T22:22:31.543 回答
0

我认为问题可能变成没有评论的语言会如何独立?例如,如果它编译为在其他代码中使用的 DLL,那么人们如何知道函数签名之外的任何内容,包括它需要什么、更改和返回?我不希望函数名称包含几十个字符,以试图表达可以通过函数上方的注释轻松完成的操作,这些注释可以用作诸如 Visual Studio 中的对象浏览器之类的文档中的文档。

于 2008-12-24T05:17:07.260 回答
0

当然!!

主要原因是新手开发人员。不是每个人都知道如何编写有文化的代码。实际上,有数百万人在看到 NullPointerException 时没有得到。

我们都从某个时间点开始。

但是,如果您只针对“专家”开发人员,那么为什么要首先在语言上费心呢。你应该使用蝴蝶!这就是真正的开发人员使用的!

评论是必须的,如果你愿意,试着让它变得更难(比如使用 #//##/ 序列来创建评论或类似的东西)但不要遗漏它。

:)

于 2008-12-24T05:30:33.710 回答
0

编程语言需要注释吗?

不。在事物的宏大计划中,编译器不会关心评论,只是希望代码磨成较低的公分母。

编程语言提供注释结构有用吗?

是的。注释对程序员来说非常有用,不仅可以假装他们知道自己在做什么,还可以用于调试和有用的文档记录。

于 2008-12-24T06:19:18.273 回答
0

我同意你的观点,写得很好的代码不需要任何评论,因为“代码只是程序员可以使用的好的文档。但是这是非常理想的条件,并不是每个人都能一直写好的代码。因此,为了让写得不好的代码在未来的评论中变得更好,必需的。

于 2008-12-24T06:27:22.003 回答
0

我曾经写过一个 VB 应用程序(一个受大富翁启发的愚蠢棋盘游戏),没有任何评论。但我这样做只是为了激怒我的老师,他告诉我们评论是针对“我们认为相关的任何内容,以便我们以后记住”。

于 2008-12-24T06:58:20.257 回答
0

完美的代码需要零注释。它应该很简单,并且完全新手可以理解。

于 2008-12-24T09:35:52.013 回答
0

任何代码都需要注释,我尝试用 1 或 2 行来解释我编写的每个函数的原因和工作原理。

解释自己的代码只存在于一个完美的世界中,总是有一些奇怪的黑客或理由去做一些快速而不是正确的事情而不是正确的方式。最好记住的是注释为什么代码会做什么,好的代码解释了它在 99% 的时间里做什么。

写一些简单的东西,比如一段可以解决数独难题的代码(3 个相当简单的 while 循环),然后在 3 个月后尝试阅读。你会立即发现一些不太清楚的东西。

于 2008-12-24T10:01:34.613 回答
0

代码只写一次,但在其生命周期中被多次阅读;因此,优化可读性是值得的。对从常量到类的所有内容进行清晰一致的命名是必要的,但可能不足以实现这一目标。如果没有,请用注释填补空白,并像维护代码一样维护它们。

于 2008-12-26T06:11:42.003 回答
0

如果您不需要,为什么该语言的开发人员会添加注释。评论很有​​用。想象一下测试你的代码在一个函数中出现错误你必须删除整个函数而没有备份如果我是你我只会评论这个函数以使编译器避免它如果我在发布日期之前获得该函数的新替代方案我将删除该功能。否则我会开始打印调试代码,看看函数的哪一部分是问题所在。

于 2021-02-10T03:50:43.580 回答