Dart中的代码生成。 第1部分。基础

众所周知,对于程序员来说懒惰是非常好的,因为少花钱多办事是进步的关键 。 没有人喜欢一遍又一遍地做同样的事情。 这很累,很无聊,根本没有创造力。 重复相同的操作,我们经常会犯错误,但是幸运的是,有些人在执行类似任务方面确实非常有效。 这些就是计算机


https://yougottobekidding.wordpress.com/2012/02/18/geeks-and-repetitive-tasks/


如今, 代码生成是在最短的时间内完成工作的能力 。 基本思想很简单:在必须重复编写的代码的相同且乏味的部分中找到一种模式,创建一个生成工具,运行它,看看魔术是如何发生的!


在Android开发领域中,此类工具为每个开发人员所熟知。 这是翻新,匕首和房间。 达特呢? 同样重要的问题是:我们需要创建自己的代码生成工具吗?


Dart和代码生成:价格合理的工具


要创建代码生成工具,我们需要以下两个软件包:



source_gen


该软件包提供了用于生成代码的便捷API。 这是一些低级Dart软件包的抽象,例如Analyzerbuild 。 尽管此软件包的使用是可选的,但可以避免许多麻烦。


source_gen提供了两个遵循Visitor模式的抽象生成器类:


  • Generator :在继承此类时,将访问您代码的每个元素。 因此,您可以完全控制如何处理每个访问的节点或元素。
  • GeneratorForAnnotation :此类类似于简单的Generator,但是在继承此类时,还可以指定“ annotation”。 因此,将仅访问使用该注释注释的节点。 其余代码将被忽略。

您还需要配置Builder ,它将成为生成器的包装器。 共有三个选项:


  • 如果要编写partial代码,则应选择SharedPartBuilder 。 “ part”允许您将库分成几个Dart文件。 SharedPartBuilder创建一个扩展名为.g.dart的文件。
  • 如果要使用“ part”方法,也可以使用PartBuilder ,但是您需要对生成文件的扩展名有更多控制,例如.my_file.dart
  • 如果要编写可以导入的独立库,请使用LibraryBuilder

build_runner


该工具允许您在开发阶段运行生成器。 可以从命令行调用它:


 pub run build_runner <command> 

代替<command>可能是:


  • build :一次开始生成。
  • watch :启动一个守护程序,该守护程序跟踪文件中的更改并在需要时开始生成。
  • serve :类似于watch,但是它就像开发服务器一样开始。
  • test :一次开始生成,创建一个共享的输出目录,然后运行pub run test --precompiled <merged-output-dir>

为了使source_gen工作,您还必须创建buil.yaml文件,该文件指示代码生成器的配置详细信息。


在Dart中使用代码生成


许多著名的Dart库都使用代码生成:



更多...


第二部分将展示如何使用注释和代码生成来跟踪应用程序中的所有TODO

Source: https://habr.com/ru/post/zh-CN445824/


All Articles