مشروع جافا Lombok

مشروع لومبوك هو أداة مفيدة جدًا لمشاريع جافا لتقليل الشفرة المملة.

بيان المشكلة

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

package com.askrakesh.java.manage_boilerplate;

import java.time.LocalDate;

public class Person {

	String firstName;
	String lastName;
	LocalDate dateOfBirth;

	public Person(String firstName, String lastName, LocalDate dateOfBirth) {
		super();
		this.firstName = firstName;
		this.lastName = lastName;
		this.dateOfBirth = dateOfBirth;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public LocalDate getDateOfBirth() {
		return dateOfBirth;
	}

	public void setDateOfBirth(LocalDate dateOfBirth) {
		this.dateOfBirth = dateOfBirth;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((dateOfBirth == null) ? 0 : dateOfBirth.hashCode());
		result = prime * result + ((firstName == null) ? 0 : firstName.hashCode());
		result = prime * result + ((lastName == null) ? 0 : lastName.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (dateOfBirth == null) {
			if (other.dateOfBirth != null)
				return false;
		} else if (!dateOfBirth.equals(other.dateOfBirth))
			return false;
		if (firstName == null) {
			if (other.firstName != null)
				return false;
		} else if (!firstName.equals(other.firstName))
			return false;
		if (lastName == null) {
			if (other.lastName != null)
				return false;
		} else if (!lastName.equals(other.lastName))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Person [firstName=" + firstName + ", lastName=" + lastName + "dateOfBirth=" + dateOfBirth + "]";
	}

}

A class should have getter-setters for the instance variables, equals & hashCode method implementation, all field constructors and an implementation of toString method. This class so far has no business logic and even without it is 80+ lines of code. This is insane.

مشروع لومبوك

مشروع لومبوك هو مكتبة جافا تُوصَّل تلقائيًا إلى محررك وأدوات البناء وتساعد في تقليل الشفرة المملة. دعنا نرى كيفية إعداد مشروع لومبوك أولاً.

كيف يعمل مشروع لومبوك لجافا؟

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

مشروع لومبوك مافين

أضافة لومبوك في مشروعك بسيطة. ما عليك سوى إضافة التبعية التالية في ملف pom.xml الخاص بمشروعك في مافن.

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

إضافة ملحق لومبوك في بيئة التطوير المتكاملة (إيكليبس)

فيما يلي خطوات التثبيت لنظام التشغيل ويندوز:

  1. قم بتنزيل الملف jar من https://projectlombok.org/download أو استخدم الملف jar الذي تم تنزيله من مشروعك في مافن.
  2. قم بتنفيذ الأمر في الطرفية: java -jar lombok.jar
  3. سيتم فتح نافذة كما هو موضح في الصورة أدناه، قم بتثبيت البرنامج وإغلاق المثبت وأعد تشغيل إيكليبس.

إذا كنت تستخدم نظام التشغيل ماكوس، فيما يلي الخطوات لاستخدام لومبوك في مشروعك.

  1. انسخ ملف lombok.jar إلى الدليل Eclipse.app/Contents/MacOS .
  2. أضف -javaagent:lombok.jar إلى نهاية ملف Eclipse.app/Contents/Eclipse/eclipse.ini .
  3. أعد تشغيل Eclipse وقم بتمكين “معالجة التعليقات” في خصائص المشروع كما هو موضح في الصورة أدناه.

لمحة عن Lombok في مخطط Eclipse

بعد التثبيت، دعنا نتحقق من كيفية رؤية الشفرة القاعدية المقللة؟ لقد أعدت إنشاء نفس الصنف كـ PersonLombok . لمحة عن Eclipse التي تعرض المتداخل والواضع لـ firstName. تم ذلك استنادًا إلى تعليقات Lombok @Getter و @Setter محددة لـ متغير firstName.

لمحة عن Lombok في كود البايت Java

يمكننا التحقق من إضافة طرق getter & setter لـ firstName من بايتات الصنف.

تعليقات مشروع Lombok

يوفر مشروع Lombok العديد من التعليقات التي تساعد في تقليل رموز الشفرة المكررة في سيناريوهات مختلفة. دعونا نتعرف على بعضها.

  1. تعليق المنشئ

    @AllArgsConstructor
    public class PersonLombok {
    	@NonNull String firstName;
    	String lastName;
    	LocalDate dateOfBirth;
    	public static void main(String[] args) {
    		new PersonLombok(null, "Kumar", LocalDate.now());
    	}
    }
    

    الشفرة أعلاه تضيف ما يلي في الفصل:

    • منشئ مع جميع الوسائط بواسطة @AllArgsConstructor
    • فحص القيمة الفارغة أثناء تمرير وسيط في المنشئ بواسطة @NonNull. يمكن أيضًا استخدام التعليق @NonNull عند تمرير وسيط كمعلمة إلى طريقة

    وفيما يلي نتيجة تشغيل البرنامج. @RequiredArgsConstructor يولد منشئًا بمعلمة واحدة لكل حقل يتطلب معالجة خاصة. يحصل جميع الحقول النهائية غير المُبتَدَأة على معلمة، بالإضافة إلى أي حقول يتم وسمها بـ @NonNull ولم يتم تهيئتها في مكانها.

  2. تعليقات الحصول/التعيين

    يمكن استخدام هذه التعليقات إما على مستوى الحقل أو الفئة. إذا كنت تريد التحكم الدقيق فاستخدمها على مستوى الحقل. عندما يتم استخدامها على مستوى الفئة، يتم إنشاء جميع المحصلين/المعينين. دعونا نعمل على الفئة التي قمنا بإنشائها أعلاه.

    @AllArgsConstructor @Getter @Setter
    public class PersonLombok {
    	String firstName;
    	String lastName;
    	LocalDate dateOfBirth;
    }
    
  3. تسميات equals، hashCode، و toString

    يُفضل تعديل طرق hashCode() و equals() عند إنشاء فئة. في Lombok، لدينا تسمية @EqualsAndHashCode تضيف الكود الخاص بطريقتي equals() و hashCode() حيث يتم استخدامهما معًا. بالإضافة إلى ذلك، تسمية @ToString توفر تنفيذًا لطريقة toString(). دعنا نرى هذا:

    @AllArgsConstructor @Getter @Setter
    @EqualsAndHashCode 
    @ToString
    public class PersonLombok {
    	String firstName;
    	String lastName;
    	LocalDate dateOfBirth;
    }
    

    لقد تمكنا الآن من إنشاء فئة Person بدون أي كود زائد بفضل تسميات Lombok. ومع ذلك، يمكننا تحسين الأمور أكثر من ذلك بتعويض جميع التسميات المستخدمة في الفئة أعلاه بـ @Data والحصول على نفس الوظائف.

  4. تصميم نمط الشروحات

    @Builder يتيح لك إنشاء الشيفرة تلقائيًا المطلوبة لجعل فئتك يمكن إنشاءها باستخدام نمط المنشئ.

    @Builder
    public class Employee {
    	String firstName;
    	String lastName;
    	LocalDate dateOfBirth;
    
    	public static void main(String[] args) {
    		Employee emp = new EmployeeBuilder().firstName("Rakesh")
    				.lastName("Kumar")
    				.dateOfBirth(LocalDate.now())
    				.build();
    	}
    }
    

    @Delegate يولد طرق الوفد التي تحول الاستدعاء إلى هذا الحقل الذي يتم استخدامه فيه التعليق. ” فضل التكوين على التوريث “, ولكن هذا يخلق الكثير من شيفرة البخار المماثلة ل نمط المحول. لومبوك أخذت الدليل من تعليق جروفي بنفس الاسم أثناء تنفيذ هذه الوظيفة. لنرى تنفيذًا:

    @RequiredArgsConstructor
    public class AdapterImpl implements Adapter {
    	@Delegate
    	private final Adaptee instance;
    
    	public static void main(String[] args) {
    		AdapterImpl impl = new AdapterImpl(new Adaptee());
    		impl.display();
    	}
    }
    
    interface Adapter {
    	public void display();
    }
    
    class Adaptee {
    	public void display() {
    		System.out.println("In Adaptee.display()");
    	}
    }
    

    لومبوك توفر وظيفة للتحكم الدقيق في جميع التعليقات.

كود القالب: هل مهندسو Java يستمعون؟

نعم، هم كذلك. تحتاج إلى فهم أن جافا، على عكس اللغات الأخرى، اهتمت بتحديث اللغة بحيث لا تكسر أي قاعدة كود قائمة في الإصدارات القديمة من جافا. هذا بحد ذاته مهمة ضخمة ولا يمكن التقليل من قيمتها. هم بالفعل يعدلون ويبنون إمكانيات إستنتاج النوع بشكل أفضل في اللغة التي تم نشرها. واحدة من الميزات الهامة المخطط لها في جافا 10 هي Local-Variable Type Inference. على الرغم من أن هذه الميزة لها علاقة أكبر بإضافة تحليل ديناميكي أكثر من التخلص من التعليمات البرمجية المملة، إلا أنها قطرة صغيرة في المحيط لإدارة التعليمات البرمجية المملة.

ملخص

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

Source:
https://www.digitalocean.com/community/tutorials/java-project-lombok