Lombok を使用して Java コードの作成を高速化する方法
出典:
Dev.to すべてのアプリケーションで同じ定型コードを記述します。例えば:
- ゲッター。
- セッター。
- デザイナー;
- ビルダーのデザインパターン。
- などなど…
このルーチンワークを誰かに任せられたら素敵だと思いませんか?ここがロンボク島が私たちを助けてくれる場所です。
彼は何をしているの?
これらの一般的なタスク (ゲッター、セッターなど) のバイト コードを生成し、それを .class に配置して、作成するコードで使用できるようにします。
これはどうして起こるのでしょうか?
Lombok 依存関係を Maven ビルドに追加する必要があります。次に、必要なクラス、フィールドに Lombok アノテーションを付ける必要があります。コードを見てみましょう!
ロンボク島なし:
public class Human {
private int id;
private String name;
private int ageInYears;
public Human() { }
public Human(int id, String name, int ageInYears) {
this.id = id;
this.name = name;
this.ageInYears = ageInYears;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAgeInYears() {
return ageInYears;
}
public void setName(String name) {
this.name = name;
}
public void setAgeInYears(int ageInYears) {
this.ageInYears = ageInYears;
}
public Human id(int id){
this.id = id;
return this;
}
public Human name(String name){
this.name = name;
return this;
}
public Human ageInYears(int ageInYears){
this.ageInYears = ageInYears;
return this;
}
@Override
public String toString(){
return String.format("Human(id=%s, name=%s, ageInYears=%s)",
this.id, this.name, this.ageInYears);
}
}
それではロンボク島を使ってみましょう:
import lombok.*;
@Getter @Setter
@AllArgsConstructor @NoArgsConstructor
@Builder @ToString
public class Human {
@Setter(AccessLevel.NONE)
private int id;
private String name;
private int ageInYears;
}
Maven の依存関係は次のようになります。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
注: バージョン部分は、最新の Lombok リリースに応じて変更されます。
私たちが何をしてしまったのでしょうか?
アノテーションを使用して、ゲッター、セッター、コンストラクター、Builder デザイン パターン、および toString 実装を作成しました。id フィールドのセッターなど、一部のアノテーションを変更することもできます。アクセス レベルを None に設定します。これは、そのセッターを作成しないことを意味します。
やる価値はありましたか?
Lombok を使用していないときは
52 行を書きました。
Lombok を使用して8 行を書きました。Lombok は、コード サイズを
ほぼ 4 倍削減するのに役立ちました。教室に変数が増えれば、このスコアは改善される可能性があります。ロンボク島には、役立つ情報がたくさんある注釈がさらにたくさんあります。これらを表示するには、
Web サイトにアクセスしてください。
結論
Lombok を使用すると、細かい点 (ゲッター/セッター/コンストラクター/一般的なデザイン パターンやその他の Java 構造) を気にせずに、ビジネス コードに集中できます。
初心者プログラマー向けのトレーニング リスト
出典:
DZone 私の友人にはもうすぐ高校を卒業する息子がいます。彼はプログラミングの知識が少しあるので、プログラマーになるべきかどうか迷っています。最近、彼は私にこう尋ねました。「次は何を教えるべきですか?」
私が初めてプログラミングを学び始めたとき、「次に何を学べばいいのか」という質問に対する答えは、新しいプログラミング技術、新しい言語、新しいライブラリなどであると考えていました。キャリアを積むにつれて、考えが変わりました。プログラミング スキルを磨き、新しい言語を学ぶことに加えて、プログラマーを目指す人は関連分野を勉強する必要があります (これについては後で説明します)。このテキストでは、プログラマーに習得することをお勧めするスキルのリストをまとめたいと思います。私の目標は、現在の知識をすべてリストしたり、チュートリアルへのリンクを提供したりすることではありません。その代わりに、初心者がプログラムの作成に役立つ一連のツール、テクニック、スキルに慣れるのを手助けしたいと考えています。
コマンドライン
ある基準から見れば、私はすでに「年老いた」と考えられていると思います。私の時代、コンピューターを使用するということは、DOS に座ってコマンドを入力することを意味していました。それ以来、多くのことが変わりました。コマンドラインの使用方法を学ぶことは非常に重要です。多くのツールはコマンド ライン インターフェイスのみを提供します。場合によっては、コマンド ラインを使用した方が速く作業できます。次のような基本的なことができるはずです。
- ディレクトリトラバーサル。
- ファイル管理 (コピー/移動/削除)。
- ソースコードのコンパイルおよび/または実行。
Windows を使用している場合は、完全な仮想マシンの代わりに WSL2 を使用して、Linux に慣れることをお勧めします。Mac を使用している場合は、OS に組み込まれているシェルを使用できます。Linux 仮想マシンをインストールすると、優れたエクスペリエンスを得ることができます。
バージョン管理
バージョン管理を使用してソース コードを追跡する方法を学ぶ必要があります。バージョン管理ソフトウェアを使用すると、プロジェクトのリビジョン履歴を追跡できます。これはデバッグに不可欠です。また、コードベースでの共同作業も容易になります。
GitHubと
GitLab は、オープンソース プロジェクトをホスティングする 2 つの人気のあるサイトです。どちらも (名前が示すとおり) Git を使用します。Git は最近最も人気のあるツールなので、GitHub または GitLab をリポジトリとして使用して、コマンド ラインで Git を使用する方法を習得することをお勧めします。
ネットワーク
現在のほとんどのプログラムでは、少なくともある程度のネットワークが必要です。ネットワークがどのように機能するかを理解することが重要です。少なくとも、IP アドレス、ポート、プロトコルなどの基本を理解する必要があります。ファイアウォール、負荷分散、プロキシについて学ぶことは、後で役に立ちます。プログラミングのキャリアだけではありません。同意します。「なぜ Wi-Fi が機能しないのか?」という質問を理解するのは素晴らしいことです。AWSやAzureなどのクラウドサービスの基礎を学ぶのもおすすめです。サブネット、ログイン ルール、ゲートウェイを使用して AWS Virtual Private Cloud をセットアップしてみると、ネットワークの経験が得られます。
テスト
優れたソフトウェアを作成するために不可欠な部分は、ソフトウェアをテストする方法を学ぶことです。私たちの多くはプログラミングを学び、コードを「テスト」します。単体テストと統合テストは、作業するほぼすべてのソフトウェアに適用できる重要なスキルです。テストは最初は退屈に思えるかもしれませんが、このスキルが役に立ち、より速く、より自信を持って作業できるようになります。
継続的インテグレーション
継続的インテグレーション (CI) は、テストとバージョン管理を組み合わせます。コードの新しい反復を作成するたびに、一連のテストが自動的に実行されます。CI ツールは過去 10 年間で大幅に改善されました。GitHub と GitLab には CI ソリューション (それぞれ GitHub Actions と GitLab CI) が組み込まれており、簡単に始めることができます。テストと同様、CI を始めるのは難しいでしょう。しかし、基本を学べば、問題をはるかに簡単かつ迅速に見つけることができるようになります。使用しているプログラミング言語の例を含む詳細なチュートリアルを探すことをお勧めします。
ライティングスキル
おそらくこれは、私がプログラマーとして働き始めたときに最も過小評価していた領域です。誇張ではありません。私は今、プログラマーが自分の武器に加えることができる最も重要なスキルは書くことだと信じています。優れた文章スキルとは、最小限の単語を使ってアイデアを明確に説明できることを意味します。プログラミングを学ぶ場合、通常は自分で作業するため、書く必要はありません。ただし、チームで作業を開始する場合は、次のように記述する必要があります。
- ドキュメンテーション;
- バグレポート。
- 機能リクエスト。
- 顧客からの提案。
- 要件を記載した文書。
- 電子メール (大量の電子メール!);
- テキストメッセージ;
- ブログ投稿 (おそらく);
書くことを学びましょう。エクササイズ。ライティングコースを受講してください。それはあなたの残りの人生に恩恵をもたらします。また、上手に読むことを学びましょう。私が初めて専門能力開発を始めたとき、要件文書に怖気づいていました。この情報を数時間かけて注意深く検討すれば、間違ったものを構築して何ヶ月も無駄にする必要がなくなることがわかりました。
他のプログラミング言語
今日では、プログラミング言語を 1 つだけ知っているだけでは十分ではありません。ほぼすべてのプログラマーが少なくともいくつかのことを知っているはずです。新しい技術を学ぶために他の言語を勉強することは重要です。いくつかの異なるカテゴリーの言語を学ぶことをお勧めします。優先順位の高い順に:
関数型プログラミング。ほとんどの学校ではまだ関数型プログラミング (FP) を教えていません。FP は、さまざまな種類のコードの作成を容易にする強力なアプローチです。私は偏見を持っていますが、他の多くの言語よりも FP を理解するのに役立つため、Haskell を学ぶのに最適な言語として推奨します。LISP ファミリから言語を学習することも役立ちます。関数型プログラミングを学習すると、ほぼすべての言語でより優れたコードを作成できるようになります。
システムプログラミング。システム言語は下位レベルに属し、プログラムの動作をより適切に制御できるようになります。これらを学ぶことで、プログラムがシステム上でどのように動作するかを学ぶことができ、他の言語の問題を理解してデバッグするのに非常に役立ちます。Rustを学び、次にCとC++を学ぶことをお勧めします。
オブジェクト指向言語。Java と C# は、このファミリーの中で最も人気のある 2 つのオブジェクト指向言語です。(はい、Python と C++ も人気がありますが、それらについては個別に説明します)。OOP は多くの新しいパラダイムを導入し、おそらく今でも最も人気のあるプログラミング アプローチですが、私は個人的には関数型プログラミングのアプローチを好みます。ただし、オブジェクト指向プログラミングから学ぶべきことはたくさんあり、キャリアの中でオブジェクト指向コードを書くことになる可能性があります。
脚本執筆。Python と Ruby は、オブジェクト指向アプリケーション ファミリの 2 つの人気のあるスクリプト言語です。特にPythonはDevOpsやデータサイエンスなどの関連分野で広く使われています。さらに、それは非常に簡単に始めることができるシンプルな言語です。
プログラミング方法
使用するプログラミング言語に関係なく、特定の言語を超えた次のような追加テクニックを理解しておくことは価値があります。
- データベースプログラミング。SQLを学ぶことを強くお勧めします。SQLite と PostgreSQL は、検討すべき 2 つのオープンソース DBMS です。
- 並列処理と非同期プログラミング。これは今日ますます重要になっています。
- ネットワーク プログラミング、特に HTTP サーバーとクライアントの作成。
- HTML/CSS/JavaScript を使用してWeb インターフェイスを作成します。
- JSON、YAML、バイナリ ファイルなどの形式でデータをシリアル化します。
結論
上記の情報は複雑に見えるかもしれません。プログラマーになるためにこれらすべてを学ぶ必要があると考える必要はありません。これは間違っています。優れたプログラマーになるには、時間と専門的な練習が必要です。まだプログラミングを始めていない場合は、いくつかのペットプロジェクトから始めることをお勧めします。オープン ソース プロジェクトに貢献することを検討してください。これにより、経験豊富なプログラマーから安心して学ぶことができます。プログラマーの多くは、初心者と知識を共有することを好みます。
GO TO FULL VERSION