发布时间:2018年10月3日 - 3分钟阅读
你有没有想过,是什么让一个软件程序员成为一个优秀的软件程序员?想一想吧,你的答案可能是无穷无尽的,这取决于你问谁,你会得到不同的回答。答案可能是无穷无尽的,而且取决于你问谁,你会得到不同的回答......但如果你问我,作为一个懒惰的程序员将是我的答案;)
以少胜多是进步的关键。没有人喜欢一次又一次地重复同样的任务。这是乏味的,无聊的,而且根本没有创造性。人类在这方面真的很糟糕。我们在做重复性的事情时,经常会犯错误。然而,你猜猜看,是谁在做这些人类不喜欢做的工作时,真的很好很有效?我希望我们也是这么想的:电脑人!
现在的代码生成是关键,要在最短的时间内完成工作。这个想法很简单:对于那些你在代码库中反复做的繁琐任务,你可以找到背后的模式,创建一个生成器工具,运行它,然后看看神奇的事情发生了!
在Android的世界里,这些工具是每个开发者的面包和黄油的一部分。Retrofit, Dagger, Room... 但Dart呢? 更重要的是,我们需要什么来构建自己的工具?
Dart和代码生成:可用的工具
为了创建自动生成代码的工具,你可能需要使用这两个包。
source_gen
这个包提供了一个友好的API来自动生成代码。它是一些低级Dart包的较好抽象,如analyzer或build。虽然它并不是必须使用的,但绝对会让你省去很多麻烦。
source_gen提供了两个抽象的生成器类,可以认为是访问者类。
Generator:当扩展这个类时,你的代码中的每一个元素都会被访问,所以你可以完全控制对被访问的节点/元素做什么。GeneratorForAnnotation:类似于一个简单的Generator,但在这种情况下,你也会给它一个"注解",所以每一个被给定注解的节点都会被访问,而其余没有注解的节点将被忽略。
工作的一部分是配置将包裹你的生成器的Builder。你有这些选项。
- 如果你想写一
部分代码,那么使用SharedPartBuilder是你最好的选择。"part "允许你将一个库分割成多个Dart文件。这将产生一个扩展名为.g.dart的文件。 - 如果你仍然想使用
part的方法,你可以使用PartBuilder,但控制扩展文件,如.my_file.dart。 - 如果你只是想写一个可以导入的独立库,就使用
LibraryBuilder。
我们将在这些系列文章的第2部分看到一个实际的例子。
build_runner
该工具允许我们在开发阶段运行我们的生成器。它可以以这种方式从命令行调用。
pub run build_runner <命令>
其中<命令>可以是。
build: 运行一次构建并退出watch:运行一个守护进程,它将在文件变化时运行,并在必要时重建。serve:类似于watch,但也作为开发服务器运行。test:用于测试目的
为了使它与source_gen和谐工作,我们需要配置一个build.yaml文件,在这个文件中,我们指定了我们生成器配置的不同细节。
谁在Dart中使用代码生成器?
当寻找使用代码生成的灵感和库时,你会立即看到一些最著名的包。
在下一篇...
现在,我们已经知道了可用来自动生成代码的工具,在本系列的下一篇文章中,我们将关注一个小小的项目,在这个项目中,我们将使用注解和代码生成来跟踪我们应用程序中所有的TODO。
你可以在 twitter.com/jcocaramos 上关注我,也可以在我的公共Github github.com/jorgecoca 上看到更多的代码。
通过www.DeepL.com/Translator(免费版)翻译