ما هو Lombok ولماذا هو مطلوب؟
\n\nLombok (Project Lombok) هي مكتبة للغة جافا تسمح بتقليل حجم الكود النمطي (boilerplate code) بشكل كبير. في جافا، غالبًا ما يكتب المطورون تركيبات متكررة: دوال الحصول (getters)، دوال التعيين (setters)، المنشئات (constructors)، وطرق toString() و equals() و hashCode(). يقوم Lombok تلقائيًا بتوليد هذا الكود في مرحلة التجميع باستخدام التعليقات التوضيحية (annotations).
الهدف الرئيسي من Lombok هو جعل الكود أنظف وأقصر وأسهل في الصيانة. بدلاً من كتابة عشرات الأسطر من الكود المتكرر، يمكنك ببساطة إضافة تعليق توضيحي واحد، ويتم توليد كل شيء تلقائيًا. هذا مفيد بشكل خاص لفئات النماذج (POJO/DTO)، حيث يشكل الكود النمطي ما يصل إلى 70% من الحجم الإجمالي.
\n\nLombok ليس إطار عمل وقت التشغيل (runtime framework) - فهو يعمل حصريًا في مرحلة التجميع. يتم تضمين الكود المُولّد في البايت كود (byte-code)، لذلك لا توجد حاجة لأي تبعيات من Lombok في وقت التشغيل.
\n\nتثبيت Lombok
\n\nيتم إضافة Lombok كتبعية عادية في مشروعك. نظرًا لأنها مكتبة جافا، لا يتم استخدام التثبيت عبر pip أو npm. فيما يلي الطرق الرئيسية للتثبيت:
Maven
\nأضف إلى pom.xml:
<dependency>\n <groupId>org.projectlombok</groupId>\n <artifactId>lombok</artifactId>\n <version>1.18.30</version>\n <scope>provided</scope>\n</dependency>\n\nGradle
\nأضف إلى build.gradle:
dependencies {\n compileOnly 'org.projectlombok:lombok:1.18.30'\n annotationProcessor 'org.projectlombok:lombok:1.18.30'\n}\n\nIntelliJ IDEA
\nفي IntelliJ IDEA، يجب تثبيت إضافة Lombok (Settings → Plugins → Marketplace → Lombok) وتفعيل معالجة التعليقات التوضيحية (Settings → Build, Execution, Deployment → Compiler → Annotation Processors → Enable annotation processing).
\n\nEclipse
\nقم بتنزيل ملف JAR الخاص بـ Lombok من الموقع الرسمي وقم بتشغيله بنقرة مزدوجة - سيفتح برنامج التثبيت الذي سيجد IDE الخاص بك تلقائيًا ويضبط الإعدادات اللازمة.
\n\nبداية سريعة مع مثال كود
\n\nلنلقِ نظرة على فئة جافا نموذجية قبل وبعد استخدام Lombok.
\n\nبدون Lombok (الطريقة التقليدية):
\npublic class User {\n private String name;\n private int age;\n private String email;\n\n public User() {}\n\n public User(String name, int age, String email) {\n this.name = name;\n this.age = age;\n this.email = email;\n }\n\n public String getName() { return name; }\n public void setName(String name) { this.name = name; }\n public int getAge() { return age; }\n public void setAge(int age) { this.age = age; }\n public String getEmail() { return email; }\n public void setEmail(String email) { this.email = email; }\n\n @Override\n public String toString() {\n return "User{name='" + name + "', age=" + age + ", email='" + email + "'}";\n }\n\n @Override\n public boolean equals(Object o) {\n if (this == o) return true;\n if (o == null || getClass() != o.getClass()) return false;\n User user = (User) o;\n return age == user.age && Objects.equals(name, user.name) && Objects.equals(email, user.email);\n }\n\n @Override\n public int hashCode() {\n return Objects.hash(name, age, email);\n }\n}\n\nمع Lombok:
\nimport lombok.*;\n\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class User {\n private String name;\n private int age;\n private String email;\n}\n\nفقط 5 أسطر بدلاً من 50! أصبح الكود موجزًا وقابلاً للقراءة وسهل الصيانة.
\n\nالتعليقات التوضيحية والطرق الرئيسية في Lombok
\n\nفيما يلي التعليقات التوضيحية الرئيسية في Lombok. كل منها يولد مجموعة معينة من