Sobes.tech
Junior

Китобхонаи Lombok чист ва чӣ гуна дар таҳияи Java истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

Lombok هو مكتبة جافا تساعد على تقليل كمية الكود النمطي (boilerplate code). تقوم بذلك عن طريق توليد طرق مثل المُنشئات، getters، setters، equals()، hashCode() و toString() تلقائيًا أثناء الترجمة استنادًا إلى التعليقات التوضيحية.

التعليقات التوضيحية الرئيسية واستخدامها:

  • @Getter / @Setter: توليد طرق getX() و setX() لحقول الفئة.
  • @NoArgsConstructor، @RequiredArgsConstructor، @AllArgsConstructor: توليد المُنشئات بدون معاملات، ومع معاملات لجميع الحقول الموسومة بـ @NonNull أو final، ومع جميع الحقول على التوالي.
  • @Data: يجمع بين @ToString، @EqualsAndHashCode، @Getter، @Setter و @RequiredArgsConstructor. مناسب لفئات النماذج.
  • @Value: مشابه لـ @Data، لكنه يجعل الفئة غير قابلة للتغيير (final). جميع الحقول بشكل افتراضي private final.
  • @Builder: يولد رمز لنمط "الباني"، الذي يسهل إنشاء الكائنات ذات الحقول المتعددة.
  • @Slf4j (وغيرها لمختلف المسجلات): ينشئ حقل مسجل ثابت (log) في الفئة.

مثال على استخدام @Data:

// نموذج المستخدم بدون Lombok
public class UserManual {
    private String username;
    private String email;

    public UserManual(String username, String email) {
        this.username = username;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "UserManual{" +
               "username='" + username + '\'' +
               ", email='" + email + '\'' +
               '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        UserManual that = (UserManual) o;
        if (username != null ? !username.equals(that.username) : that.username != null) return false;
        return email != null ? email.equals(that.email) : that.email == null;
    }

    @Override
    public int hashCode() {
        int result = username != null ? username.hashCode() : 0;
        result = 31 * result + (email != null ? email.hashCode() : 0);
        return result;
    }
}

// نموذج المستخدم مع Lombok
import lombok.Data;

@Data
public class UserLombok {
    private String username;
    private String email;
    // ستُولد تلقائيًا خلال الترجمة
}

لاستخدام Lombok، يلزم إضافة الاعتمادية إلى نظام البناء (Maven أو Gradle) وتثبيت مكون إضافي لـ IDE الخاص بك، بحيث يمكنه تفسير التعليقات التوضيحية بشكل صحيح وتوفير الإكمال التلقائي.

Maven:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version> <!-- استخدم أحدث إصدار -->
    <scope>provided</scope>
</dependency>

Gradle:

compileOnly 'org.projectlombok:lombok:1.18.24' // استخدم أحدث إصدار
annotationProcessor 'org.projectlombok:lombok:1.18.24' // استخدم أحدث إصدار

Lombok يقلل بشكل كبير من حجم الكود، ويجعله أكثر قابلية للقراءة، ويقلل من احتمالية الأخطاء عند كتابة طرق القالب يدويًا. ومع ذلك، يجب أن تضع في اعتبارك أنه يخفي جزءًا من المنطق، مما قد يصعب تصحيح الأخطاء أو فهم الكود المولد بدون استخدام مكون إضافي لـ IDE.