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

如今, 代码生成是在最短的时间内完成工作的能力 。 基本思想很简单:在必须重复编写的代码的相同且乏味的部分中找到一种模式,创建一个生成工具,运行它,看看魔术是如何发生的!
在Android开发领域中,此类工具为每个开发人员所熟知。 这是翻新,匕首和房间。 达特呢? 同样重要的问题是:我们需要创建自己的代码生成工具吗?
Dart和代码生成:价格合理的工具
要创建代码生成工具,我们需要以下两个软件包:
source_gen
该软件包提供了用于生成代码的便捷API。 这是一些低级Dart软件包的抽象,例如Analyzer和build 。 尽管此软件包的使用是可选的,但可以避免许多麻烦。
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
。