Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Annotations 你称之为非代码&x201C;代码”;这在编程中经常使用,比如java中的注释,或者注释块中的东西?_Annotations_Metadata_Metaprogramming_Dsl_Docblocks - Fatal编程技术网

Annotations 你称之为非代码&x201C;代码”;这在编程中经常使用,比如java中的注释,或者注释块中的东西?

Annotations 你称之为非代码&x201C;代码”;这在编程中经常使用,比如java中的注释,或者注释块中的东西?,annotations,metadata,metaprogramming,dsl,docblocks,Annotations,Metadata,Metaprogramming,Dsl,Docblocks,我对这种非代码代码的当前用法(如中的非代码,它不是文件其余部分的语言)以及这种非代码的历史特别着迷 在某些情况下,这可以称为元编程,但我不认为这涵盖了所有情况 我见过它被用于很多事情,可以追溯到80年代(以我的经验来看)C注释中的“Autodocs”用于生成文档,一直到解释语言(如PHP)中非常复杂的现代版本,注释块中有注释,它们用于文档,用于在PHP语法不足的地方添加其他含义,以及其他类型的“元数据” 这似乎是一个大杂烩。我还不确定我对此有何感想。这似乎有点错误。但我看到了它的巨大效用 我想知

我对这种非代码代码的当前用法(如中的非代码,它不是文件其余部分的语言)以及这种非代码的历史特别着迷

在某些情况下,这可以称为元编程,但我不认为这涵盖了所有情况

我见过它被用于很多事情,可以追溯到80年代(以我的经验来看)C注释中的“Autodocs”用于生成文档,一直到解释语言(如PHP)中非常复杂的现代版本,注释块中有注释,它们用于文档,用于在PHP语法不足的地方添加其他含义,以及其他类型的“元数据”

这似乎是一个大杂烩。我还不确定我对此有何感想。这似乎有点错误。但我看到了它的巨大效用

我想知道您会用什么通用术语来涵盖几乎所有代码中的所有这些非代码代码情况,以及是否有任何关于该主题及其历史、最佳实践等的权威著作。如果没有,我很感兴趣,因为我想自己研究和写一些东西

例如,在PHP land中,我们有如下内容:

/**
 * This is a "docblock" and PHP can introspect on it
 *
 * The annotation below is common, and is used by processors to generate
 * documentation.  It can also be used by an IDE to provide hints while
 * coding. Its also kinda redundant because in this case PHP is already
 * providing the same information... it also has no effect on the code,
 * unless some code is written to introspect on it and then do something.
 *
 * @param Request $request
 *
 * Another handy one, describing what is returned.  PHP doesn't have
 * a way to do this in the code, so this one is more useful.
 *
 * @return Response
 *
 * Here's some more annotations. The syntax is different, because, well,
 * there's no restrictions...
 *
 * This is for generating Swagger API documentation. Cool huh? Again,
 * it has no effect on the code. Period. Notice how it also specifies the
 * type as a Response object (given that you understand this new syntax).
 * Note also that this duplicates the functionality of @return above, but
 * we need both because different tools are using them each.
 *
 * @SWG\Api(
 *  path="/gettax",
 *  description="Calculate tax",
 *  @SWG\Operation(
 *      method="POST",
 *      type="Response",
 *      @SWG\Parameter(paramType="body",required=true,type="GetTax")
 *   )
 * )
 */
public function calc(Request $request) ....
无论如何,我所看到的是这么多使用这些东西的工具,但是有很多重叠和碎片。至少在菲律宾。回想多年的编程,我觉得这类东西并不新鲜

我想搜索这个主题,但找不到一个好的搜索词来获取我要寻找的内容,这是一些关于这些方法起源的历史文献,这些年来哪些方法效果好,哪些不好,哪些是最佳实践,等等。这些都被认为是元编程吗

这些东西的演变是什么?它们是在某个时候成为语言的适当部分,还是融入到新的语言中

这个主题总体上让我感兴趣,我想知道是否有其他人就这个主题写过明确的文本


我突然想到,这些东西实际上是一种特定于领域的语言。由于宿主语言无法表达某些内容,因此使用DSL并将其嵌入代码中(在注释中或宿主语言支持的某些功能中,如注释),以表达您希望与代码关联的其他信息,不一定对代码流有任何影响。

您是在说“注释”吗?你能举个例子来帮助缩小你具体指的是什么吗?元编程是代码的一部分,因为它是语言的一个特性(如Ruby、Scala等),在某些预处理器遍历您的文本文件并将A替换为B的情况下,这不是某种宏行为。大多数解决方案(如自动文档)都使用代码周围的注释(编译器/解释器会跳过这些注释)。例如,弱类型语言的linter可以通过格式良好的注释获得预期的类型信息,并可以检查方法参数是否适合传递给该方法。我指的是您在代码中放入的所有此类内容,它们不会直接自动影响代码流。这包括类型暗示(可以以多种方式使用,从生成的文档到运行时验证代码等)。我之所以调用非代码代码,是因为它不是正常代码执行流的一部分。在许多情况下,它可能使用与“主机”语言相同的语法,但它仍然超出了正常的流程。在Java中,它们被称为Javadocs。