لطفا کمی صبر کنید...

استفاده از lombok برای خلاصه نویسی

همیشه یکی از مهمترین اصول برنامه نویسی، ساده نویسی و تمیز نوشتن بوده و فکر میکنم تا ابد هم خواهد بود. اصولا برنامه نویسی همینجوری پیچیده است حالا فکر کنید ما بخواهیم پیچیده ترش هم کنیم. خدا میدونه چه فحشهایی که عمه های نازنین برنامه نویس ها نخوردن به خاطر کثیف بودن و پیچیده بودن کدها. امروز میخوام یه ابزار کاربردی  رو به شما معرفی کنم تا با کمک اون بتونیم به تمیزتر شدن کد هامون کمک کنیم. اسم این ابزار چیزی نیست جز lombok. اسمش میخوره یه موجود چفت و دست و پا چلفتی باشه ولی واقعا اینجوری نیست. خارجی ها هم اسم هاشون عجیب غریبه!

 

معمولا وقتی داریم یه پروژه رو انجام میدیم یه سری کلاس داریم از نوع Entity که همشون هم از دم constructor, getter, setter , toString و یه سری متدهای دیگه رو دارن. این متدها وجودشون واقعا لازمه ولی از اونجایی که منطق خاص و پیچیده ای رو پیاده سازی نمیکنن بنظرم فقط یکم دست و پا گیرن و جز قسمت هایی هستند که آدم دوست نداره ببینتشون. مثلا این کلاس رو ببینید.

 


package com.codestack.lombok;

import java.math.BigDecimal;

public class Car {
    private long id;
    private CarType type;
    private CarCompany company;
    private String name;
    private BigDecimal price;

    public Car() {
    }

    public Car(long id, CarType type, CarCompany company, String name, BigDecimal price) {
        this.id = id;
        this.type = type;
        this.company = company;
        this.name = name;
        this.price = price;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public CarType getType() {
        return type;
    }

    public void setType(CarType type) {
        this.type = type;
    }

    public CarCompany getCompany() {
        return company;
    }

    public void setCompany(CarCompany company) {
        this.company = company;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car{" +
                "id=" + id +
                ", type=" + type +
                ", company=" + company +
                ", name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}

 

خوبی که lombok جان به ما میده اینه که می تونیم با استفاده از یه سری annotation ها این متدها از نظرها غایب کنیم در صورتی که همچنان هستن فقط ما نمیبینمشون. برای اینکه بتونیم default constructor, setter, getter  رو از کلاس حذف کنیم و در عین حال هم داشته باشیمشون کافیه از  annotation با عنوان Data@ بالای کلاسمون استفاده کنیم. مثل کلاس زیر که تغییر کرده همون کلاس بالاییه.

 


package com.codestack.lombok;

import lombok.Data;

import java.math.BigDecimal;

@Data
public class Car {
    private long id;
    private CarType type;
    private CarCompany company;
    private String name;
    private BigDecimal price;
}

توی کلاس بالا با گذاشتن @Data متدهای getter, setter  همه فیلدها ساخته میشه علاوه بر اون یه default contrsuctor براش تولید میشه و یه متد toString با خروجی خیلی ساده و البته کامل براش ایجاد میشه. به همین سادگی به همین خوشمزگی. 

 

اگر بخوایم در کنار متد سازنده عادی یه AllArgConstructor داشته باشیم یا در واقع یه متد سازنده که توش همه فیلدها رو بتونیم مقدار دهی کنیم، میتونیم از @AllArgsConstructor تو بالای کلاس استفاده کنیم.

 

package com.codestack.lombok;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.math.BigDecimal;

@Data
@AllArgsConstructor
public class Car {
    private long id;
    private CarType type;
    private CarCompany company;
    private String name;
    private BigDecimal price;
}

در ادامه یه نمونه ساده از ساختن یه نمونه از کلاس Car و مقداردهی و خروجی چاپ شده اش رو هم برای شما آورده ایم.

 

package com.codestack.lombok;

import java.math.BigDecimal;

public class Main {

    public static void main(String[] args) {
        Car car = new Car(1, CarType.SEDAN, CarCompany.TOYOTA, "Camry", new BigDecimal(999));
        car.setPrice(new BigDecimal(1000));

        System.out.println(car);
    }
}
Connected to the target VM, address: '127.0.0.1:39677', transport: 'socket'
Car(id=1, type=SEDAN, company=TOYOTA, name=null, price=999)
Disconnected from the target VM, address: '127.0.0.1:39677', transport: 'socket'

Process finished with exit code 0 

 

 

 نکته یک: برای اینکه بتونیم از این annotation ها تو پروژه امون استفاده کنیم باید dependency که در ادامه اوردم رو تو پروژه اضافه کنیم. 

 

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>

 

نکته دو: چون lombok داره یه سری کارهای خاص پشت پرده انجام میده ما باید یه پلاگین که مربوط به lombok میشه رو تو محیطی که داریم باهاش کار میکنیم اضافه کنیم. من از نسخه کرک شده inteliij استفاده میکنم،‌برای همین باید تو قسمت پلاگین ها حتما پلاگین lombok رو نصب کنید. کار خیلی ساده ایه اصلا نگرانش نباشید.

کلمات کلیدی:

نوشته شده توسط حسن گلشنی

آخرین بروز رسانی در 1400/07/28 00:00:00