プログラマーが怠zyであることは非常に良いことであることが知られています。 同じことを何度も繰り返したいと思う人はいません。 これは退屈で退屈で、まったく創造的ではありません。 同じアクションを繰り返して、私たちはしばしば間違いを犯しますが、幸いなことに、同様のタスクを実行するのに本当に優れた、効果的な人がいます。 そして、これらはコンピューターです!
今日、 コード生成は最短時間でジョブを実行する機能です。 基本的な考え方は単純です。何度も何度も記述しなければならないコードの同じ面倒なセクションでパターンを見つけ、生成用のツールを作成して実行し、魔法がどのように発生するかを確認します。
Android開発の世界では、このようなツールはすべての開発者によく知られています。 これは、レトロフィット、ダガー、ルームです。 Dartはどうですか? さらに重要な質問:コード生成用の独自のツールを作成するには何が必要ですか?
Dartとコード生成:手頃な価格のツール
コード生成ツールを作成するには、次の2つのパッケージが必要です。
source_gen
このパッケージは、コードを生成するための便利なAPIを提供します。 これは、 analyzerやbuildなどの低レベルのDartパッケージの抽象化です。 このパッケージの使用はオプションですが、多くの困難を軽減できます。
source_genは、 Visitorパターンに従う2つの抽象ジェネレータークラスを提供します。
-
Generator
:このクラスを継承すると、コードのすべての要素が訪問されます。 したがって、訪問した各ノードまたは要素の処理を完全に制御できます。 -
GeneratorForAnnotation
:このクラスは単純なジェネレーターに似ていますが、このクラスを継承する場合は、「注釈」も指定します。 したがって、この注釈で注釈が付けられたノードのみが訪問されます。 残りのコードは無視されます。
また、 Builder
を構成する必要があります。これは、ジェネレーターのラッパーになります。 次の3つのオプションがあります。
-
partial
コードを作成する場合は、SharedPartBuilder
を選択する必要があります。 「part」を使用すると、ライブラリを複数のDartファイルに分割できます。SharedPartBuilder
は、拡張子が.g.dart
ファイルを作成します。 - 「パート」アプローチを使用する場合は、
PartBuilder
使用することもできますが、生成されたファイルの拡張子(.my_file.dart
など)をさらに制御する必要があります。 - インポート可能なスタンドアロンライブラリを作成する場合は、
LibraryBuilder
使用しLibraryBuilder
。
build_runner
このツールを使用すると、開発段階でジェネレーターを実行できます。 コマンドラインから呼び出すことができます:
pub run build_runner <command>
<command>
代わりは<command>
とおりです。
-
build
:生成を1回開始します。 -
watch
:ファイルの変更を追跡し、必要に応じて生成を開始するデーモンを起動します。 -
serve
:watchと似ていますが、開発サーバーのように起動します。 -
test
:生成を1回開始し、共通の出力ディレクトリを作成してから、pub run test --precompiled <merged-output-dir>
ます。
source_gen
機能するためには、コードジェネレーターの構成の詳細を示すbuil.yaml
ファイルも作成する必要があります。
Dartコード生成を使用する
コード生成は、Dartの多くの有名なライブラリで使用されています。
- built_value
- json_serializable
- キウイ
- チョッパー
- ムーア (翻訳者のメモ)
もっと...
2番目の部分では、注釈とコード生成を使用して、アプリケーション内のすべてのTODO
を追跡するTODO
を示します。