Language agnostic 生成的代码需要人类可读吗?

Language agnostic 生成的代码需要人类可读吗?,language-agnostic,code-generation,readability,Language Agnostic,Code Generation,Readability,我正在开发一个工具,它将为一个接口和实现该接口的几个类生成源代码。我的输出不是特别复杂,所以要使输出符合我们的常规代码格式标准并不困难 但这让我思考:自动生成的代码需要多大的可读性?什么时候应该花费额外的精力来确保生成的代码易于阅读和理解 在我的例子中,我生成的类本质上只是与构建的另一部分相关的一些数据的容器,其中包含获取数据的方法。没有人需要查看类本身的代码,他们只需要调用类提供的各种getter。因此,如果代码是“干净的”、格式良好且易于阅读的,这可能并不太重要 但是,如果生成的代码中包含的

我正在开发一个工具,它将为一个接口和实现该接口的几个类生成源代码。我的输出不是特别复杂,所以要使输出符合我们的常规代码格式标准并不困难

但这让我思考:自动生成的代码需要多大的可读性?什么时候应该花费额外的精力来确保生成的代码易于阅读和理解

在我的例子中,我生成的类本质上只是与构建的另一部分相关的一些数据的容器,其中包含获取数据的方法。没有人需要查看类本身的代码,他们只需要调用类提供的各种getter。因此,如果代码是“干净的”、格式良好且易于阅读的,这可能并不太重要


但是,如果生成的代码中包含的不仅仅是少量的简单逻辑,会发生什么呢?

我认为生成的代码可读性和遵循正常的编码风格同样重要。在某个时刻,有人可能需要调试代码,或者以其他方式查看“幕后”正在发生的事情。

很有可能将来有人想查看代码的功能。因此,让它变得更容易理解是一件好事


您可能还希望在每个生成的文件的顶部添加一条注释,说明该文件是如何生成的、为什么生成的以及它的用途。

我认为这取决于生成的代码将如何使用。如果代码不是要被人类读取的,也就是说,当某些东西发生变化时,代码就会被重新生成,那么我认为代码不必是可读的。但是,如果您使用代码生成作为“正常”编程的中间步骤,那么生成的代码应该与其他源代码具有相同的可读性


事实上,使生成的代码“不可读”可能是一个优势,因为它会阻止人们“黑客”生成的代码,而是在代码生成器中实现它们的更改,这在您出于任何原因需要重新生成代码时都非常有用,并且不会丢失您的同事所做的更改,因为他认为生成的代码已“完成”。

通常,如果您生成的代码需要稍后进行人工修改,它需要尽可能让人可读。然而,即使它是将被生成的代码,并且永远不会被再次触及,它仍然需要足够的可读性,以便您(作为编写代码生成器的开发人员)能够调试生成器-如果您的生成器吐出了坏代码,如果它很难理解,那么可能很难找到它。

我认为花额外的时间让它更易于调试,让它更易于人类阅读是值得的

我想说的是,代码必须是人类可读的,除非您的代码生成工具有一个优秀的调试器,否则您(或不幸的同事)可能会在代码中深入一腰,试图跟踪系统中如此难以捉摸的bug。我自己对“来自UML的代码”的探索在我口中留下了苦涩的味道,因为我无法掌握所谓的“奇特”调试过程

生成的代码应该是可读的(格式等通常可以由一个半体面的IDE处理)。在代码生命周期的某个阶段,它将被某些人看到,他们会想理解它。

我认为对于工作非常简单的数据容器或对象,人的可读性不是很重要


然而,一旦开发人员可能需要阅读代码来理解事情是如何发生的,它就需要可读性。如果逻辑有错误怎么办?如果没有人能够阅读和理解代码,人们将如何发现它?我甚至会为更复杂的逻辑部分生成注释,以表达意图,从而更容易确定是否真的存在bug。

逻辑应该始终可读。如果其他人要阅读代码,试着把自己放在他们的位置,看看你是否能够在不阅读特定代码的情况下完全理解高(和低?)级别的代码

我不会花太多的时间在那些永远不会被读取的代码上,但是如果没有太多的时间,我会浏览生成的代码。如果没有,至少要发表评论以弥补可读性的损失。

如果你不得不调试自己生成的代码,你会自杀的。不要以为你不会请记住,当您相信自己的代码生成代码时,您已经在系统中引入了两个错误-您已经插入了两次。

绝对没有理由不让它成为人类可解析的,那么你到底为什么要这么做呢


亚当

< P>如果此代码可能被调试,那么您应该认真考虑以人类可读格式生成它。 是的。 首先,您可能需要调试它——您将使自己变得容易。
其次,它应该遵守您在商店中使用的任何编码约定,因为有一天代码可能需要手动更改,从而成为人类代码。当您的代码生成工具没有涵盖您需要的特定内容时,通常会出现这种情况,并且认为不值得仅为此目的修改该工具。

生成的代码有不同的类型,但最简单的类型是:

  • 生成的代码不会被开发人员看到。e、 例如,定义布局的xml ish代码(想想.frm文件或SSIS生成的可怕文件)
  • 生成的代码是作为类的基础,该类稍后将由开发人员自定义,例如,生成代码是为了减少键入的繁琐
  • 如果你是在做后者,你肯定希望你的代码是人类可读的

    类和接口,无论您对开发人员有多么“禁止”