LOMBOK

Furkan Şahin Kulaksız
3 min readOct 18, 2020

--

Javayı geliştirenler, java geliştiricilerine her an kolaylık sağlamak için çalışan isimsiz kahramanlar aslında :D ( İşin bence’si. )

Java’da IDE’lerin bize sunduğu ya da kod yapılarının bize sunduğu çok güzel kısayollar, pluginler ya da extensionlar var. Bunlardan birisi de LOMBOK.

Lombok, ( genellikle )Entity ya da POJO class’larımızda kullandığımız bir library. Bizi çok ciddi oranda kod satırından kurtaran bazı annotasyonlara sahip güzel bir library. Yazdığım her kodda bağımlılık olarak ilk eklediğim library bu.

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>

dependencies { compileOnly(‘org.projectlombok:lombok:1.16.20’) }

Bu library’yi kullanabilmek için POM.xml’e ya da gradle’a lombok eklentisini yapmamız gerekiyor. (Yukarıda POM.xml ve Gradle için bağımlılığı ekledim.) Tabi burada dikkat edilmesi gereken en önemli hususlardan birisi de kullandığınız IDE. Örnek vermek gerekirse, Intellij IDE’de bu bağımlılığı eklemek yeterli olmayabilir. Bir de Plugins kısmından Lombok’u enable etmeniz gerekebilir. Buna da dikkat lütfen.

Lombok eklentimizi yaptık. Şimdi basit bir POJO oluşturalım.

Herhangi bir “Hasta” class’ı oluşturdum ve içerisine totalde 8 tane field ekledim. (Ki hastane yazılımlarının kod tarafında bu kadar az field olmaz. En az 15 tane field bulunur.) Bunların set ve get methodlarını yazdığımız zaman, karşımıza 74 satırlık bir kod bloğu geldi. Şunu iddia edebilirsiniz, “zaten bunu IDE yaptı. Sen yazmadın ki. Getter-Setter işaretine tıkladığı zaman ne kadar field varsa o kadar get ve set methodunu oluşturuyor.” Haklısınız, ama dikakt edin burada 8 tane field var. 60 tane field’da olabilirdi ve kodunuzda gereksiz yer kaplardı. Sonuçta hepsi aynı işlevi yapıyor. İşte bunlardan kurtulmak için kullandığımız sadece 2 annotasyon var. Yapmamız gereken class’ın başına gelip

@Getter, @Setter yazmak.

Hayırlı, uğurlu olsun. Artık istesdiğiniz gibi bu fieldların set() ve get() methodlarını başka class’larda kullanabilirsiniz. Ama class’ın başına yazdığınız her annotasyon tüm sınıfa uygulanır. Yani siz, anneAdi’na set methodu koymak istemeyebilirsiniz. Ya da belli field’larda get methodu olsun ya da set methodu olsun diyebilirsiniz. Bunun için de yapmanız gereken tek şey, field’ın başına kullanmak istediğiniz annotasyonu eklemek.

@Getter
@Setter
private String sehir;

Bir diğer annotasyonumuz ise @AllArgsConstructor annotasyonu. Bu annotasyon bize içinde sınıfın bütün fieldlarını barındıran bir Constructor method tanımlar. Tabi bunun gibi bir de @NoArgsConstructor annotasyonumuz var ki bu da tahmin edeceğiniz üzere bize boş bir constructor tanımlar.

Sırada @ToString annotasyonu var. Bu annotasyon da bize toString() methodunun işlevini gören bir yapı sağlar.

Lombok öyle bir library’ki annotasyonlar arasında bile kod bloğunu azaltabiliyorsunuz. :D Mesela, elinizdeki sınıfın tüm field’ları için get()-set()-toString() methodlarını eklemek istiyorsunuz. Bunun için ise @Data annotasyonunu kullanmaya sizi davet ediyorum. Sınıfınızın başına sadece bu annotasyonu ekleyerek aslında bu annotasyonların yaptığı tüm işlevi yapabiliyorsunuz. @Data annotasyonu sadece bununla kalmayıp aynı zamanda @EqualsAndHashCode ve @RequiredArgsConstructor annotasyonlarını da barındırdığı için, bu annotasyonların özelliklerini de kullanabilirsiniz.

Son olarak bahsetmek istediğim annotasyon @Builder annotasyonu. Bu annotasyon bizim için Builder Design Pattern’in yaptı işlevi yapar.

Benim en sık kullandığım annotasyonlar bunlar. Geliştiriciler için az kodla çok iş yapmak, bir gereklilik. Burada algoritmik anlamda böyle bir şey söz konusu değil belki ama kod bloğunuzu azaltmak istiyor iseniz bu library size çok önemli bir yarar sağlar. Zaten bir kere kullandığınızda bir daha bırakamıyorsunuz.

Konu ile alakalı daha fazla bilgi için;

bu linki kullanabilirsiniz.

Eğer yanlış ya da eksik gördüğünüz yerler varsa lütfen bana bildiriniz. Yapıcı eleştrilere her zaman açığım. 😊

Ben Furkan Şahin KULAKSIZ

Java İle Kalın. (:

İletişim, İşbirlikleri ve Teklifler için

github: https://github.com/frknshnklksz

twitter: https://twitter.com/frknshnklksz

gmail: furkansahinkulaksiz@gmail.com

linkedIn: https://www.linkedin.com/in/frknshnklksz/

--

--

No responses yet