ああ、IntelliJ IDEAとApache Velocityがあるので、ボイラープレートを書くのは好きではありません

こんにちは、Habr!

この記事では、 IntelliJ IDEA 、具体的にはファイルとコードテンプレートを使用して、手動で入力したり、どこか(コピー禁止)からコピーアンドペーストする必要があるコードの量を部分的に減らす方法について説明します。 このIDEの機能の高度な使用に慣れていない場合は、catにようこそ。

単純にプログラムのエントリポイントを作成することから、JSONの煩わしい括弧まで、定型句を記述する必要があることはよく知られています。 プログラマのコミュニティは、このプロセスを絶えず最適化しています-フレームワーク、microlib、テンプレートエンジンがリリースされています...また、作業を行うIDEの機能がはるかに簡単になります-これには、たとえば、自動置換または上記のファイルおよびコードテンプレートが含まれます。

IntelliJ IDEAファイルとコードテンプレート


プロジェクトにファイルを作成するとします。 これを行うには、お気に入りのIDEからプロジェクトを開き、Alt + 1ホットキーを押します。その後、プロジェクトツリーのパネルが表示されます。 次に、新しいファイルを作成するディレクトリでRMBをクリックします。 次のコンテキストメニューが開きます。

画像

ここでは、もちろん、「新しい」アイテムに興味があります。

画像

ご覧のとおり、ここにはさまざまなオプションがあります-拡張子が.java(Javaクラス)のファイル、拡張子が.kt(Kotlin File / Class)のファイル、パッケージなどです。 HTMLファイル、JavaFXApplication、シングルトンなど、より具体的な名前のセクションもあります。 このいずれかをクリックすると、特定のテクノロジーまたはパターンに固有の複数行のコードを含むファイルを作成します。 これは、すべてのファイルおよびコードテンプレート、つまり、ファイルおよびコードテンプレートです。 そして、すべてのテンプレートの下に「ファイルテンプレートの編集...」ボタンがあります。 クリックして、このウィンドウを表示します

画像

平均的なJavaプログラマーにとって、IDEAで利用可能なテンプレートのセットはかなり貧弱です。 しかし、Apache Velocityと呼ばれるテンプレートエンジンを使用してそれらを編集する豊富な機会が与えられました。 Habrには彼に関するいくつかの記事があります;さらに読むために、記事の下部にリンクを残します。

彼は何ができますか? 上の写真を検討してください。 左側には使用可能なテンプレートのリストがあります(印象的ですが、フィクションであり、実用性はやや劣ります)。上部にはテンプレートのカテゴリのタブがあり、中央にはHTMLコードが記述されるテキストフィールドがあり、下部には説明としてマークされた大量のテキストがあります 私がWeb開発者ではなく、HTMLを理解していないと仮定して、別のテンプレート(たとえばClass)を選択します。

画像

すぐに、Javaコードと混ざったJavaのようなコードではないことに気付きます。 これらはApache Velocityの設計です。

Apache Velocity:方法


APIとドキュメントの深さについては詳しく説明しませんが、独自のテンプレートを作成するのに役立つ主なポイントに対処します。

通常、テンプレートの構築はプレーンテキストに干渉するため、プロセスはある程度具体的です。

基本:

$variable_nameへのアクセス。 名前はラテン文字で始まり、ラテン文字、数字、および文字「-」と「_」のみを含む必要があります。

#set($variable_name = "value") -テキストでさらに使用するために変数に値を割り当てます。

#if(condition) stub #else stub #end条件ステートメント。 スタブの代わりに、条件が満たされている(または満たされていない)場合にテキストに表示されるものを置き換えることができます。

#include("another_template.txt") -指定されたファイルの内容を置き換えます。 使用可能なファイルは、[含める]タブに一覧表示されます。

#parse("another_template.txt") - #includesと同じですが、ファイルにVTL(Velocity Template Language-Apache Velocityと同じ)が含まれている場合、それも実行されます。

#evaluate(string) -パラメーターを置換し、それに含まれるVTLを実行します。

次に、データ型について説明します。 VTL変数には次のタイプがあります。


ここでの文字列はJavaの文字列に対応しているため、 contains()matches()などを呼び出すことができます。

Javaでパターンを記述するための定義済み変数もいくつかあります。 最も重要なのは、ファイル名を含む${NAME}です。 ${PACKAGE_NAME}はパッケージ名が含まれています。 時間を表す変数、たとえば、今日を含む${DAY}があります。 変数を宣言することができます。変数の値は、書かれたテンプレートに従ってファイルを作成するときに設定するように求められます。 このように: ${VARIABLE_NAME} 。 すべての定義済み変数の完全なリストは、[説明]テキストボックスにあります。

例?


上記のすべてを明確にするために、独自のテンプレートをいくつか作成します。 ウィンドウ内で、テンプレートのリストの上にある緑色のプラス記号をクリックします。

アプリケーションエントリポイント


私はかつて、Ideaにはpublic static void main()を含むクラステンプレートがないことを発見しました。 まったくありません(まあ、または見つかりませんでした)。 IntelliJ IDEAテンプレートとVTLの知識はこれから始まりました。コメントと可変引数を使用して、独自のテンプレートを作成することにしました。

次のようになりました。

 public class ${NAME} { public static void main(String... args) { } } 

ここではすべてが簡単です。 VTL固有のおもちゃのうち、定義済みの変数は${NAME}のみです。 しかし、たとえば、今日の日付と著者の名前を含むコメントを挿入できます。

 /** * Today is ${DATE} * ${USER} is #if(${MINUTE}%1==0) the best #else not the best #end */ public class ${NAME} { public static void main(String... args) { } } 

テンプレートの名前を入力して保存します。 その後、プロジェクトのどこかでRMBをクリックします(テストプロジェクトを作成することをお勧めしますが、本番でもプレイできます)->新規->テンプレート。 ファイル名を入力して、以下を参照してください。

画像

いいね!

JUnit4テストのテンプレート


より実用的で美しい例。 コードの設計に関する合意により、テストクラスの名前にはTestという単語を含める必要があります。 メモリを管理し、次のテンプレートを作成します。

 import junit.framework.TestCase; public class ${NAME}#if(!$NAME.contains("Test"))Test #end extends TestCase { @Override public void setUp() { } } 

ここで、テストケースを作成するときに名前に「Test」という単語を追加するのを忘れると、テンプレートがそれを行います。

注意 :ここでは、文字列のcontainsメソッドを呼び出しました。 文字列メソッドを呼び出すには、中括弧を省略して変数にアクセスする必要があります。 配列とマップのフィールドにアクセスする場合も同じです-中括弧はありません!

ここでテンプレートを保存し、自分用のテストを作成してみてください。 いくつかのディレクトリを再度右クリック->新規->テストテンプレート。 名前を入力して(「Test」という単語なし)、このファイルが作成されます。

画像

しかし、それだけではありません。 削除して同じ名前で再作成しますが、今回は名前の最後に「Test」という単語を追加します。 何が得られますか? 絶対に、2つの連続した「テスト」はありません。

画像

非表示のテキスト
実際、2つの同一の写真を挿入しただけですが、それは問題ではありません。 うまくいく!

スキームについて少し


「ファイルとコードテンプレート」ウィンドウの最上部には、「デフォルト」と「プロジェクト」の2つの項目があるドロップダウンリストがあります。 これはどういう意味ですか?

つまり、すべてのプロジェクト(「デフォルト」)のテンプレートを作成することも、現在のプロジェクト(「プロジェクト」)のみのテンプレートを作成することもできます。 これはスキームと呼ばれ、具体的にはファイルおよびコードテンプレートには2つしかありませんが、一般的な設定ではさらに多くあり、独自のテンプレートを作成できます。 まあ、気にしないで。

何を読む


私が言及したVTLの言及

ええ、彼女はただ一人です。なぜなら、執筆の過程で二番目はどこかで失われたからです。

IntelliJの英語マニュアルもあります

ただし、コードの標準化のすべての可能性を明らかにするわけではありませんが、テンプレートの使いやすさについてのより完全な説明を提供します。

そして、offで始めましょう。 Apache Velocity

おわりに


ファイルとコードテンプレートは非常に強力なIntelliJ IDEAツールであり、何らかの理由で照明が不十分です。 私はすぐにつまずき、主題分野の研究を始めましたが、テンプレートは明らかにここに当てはまりません-そして無駄です。 友人や同僚とこの情報を早急に共有し、VTLでテンプレートを作成してもらいます! 上司またはお気に入りのオープンソースの所有者を説得して、テンプレートを挿入することで貢献ガイドを手配する人を植えます。 便利です!

Source: https://habr.com/ru/post/J343232/


All Articles