JavaRush /وبلاگ جاوا /Random-FA /حاشیه نویسی ها بخش دوم. لومبوک

حاشیه نویسی ها بخش دوم. لومبوک

در گروه منتشر شد
حاشیه نویسی ها بخش اول، کمی کسل کننده در این بخش، تصمیم گرفتم به کتابخانه لومبوک به عنوان نماینده معروف حاشیه نویسی های منبع اشاره کنم. با حاشیه نویسی Runtime در مقاله بعدی. روزی روزگاری یک برنامه نویس جاوا بود، هر روز کدهای معمولی می نوشت، مثلا این:
package lombok;

public class Chelovek {
    private String name;
    private int age;

    public Chelovek(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Chelovek() {
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Chelovek chelovek = (Chelovek) o;

        if (age != chelovek.age) return false;
        return name != null ? name.equals(chelovek.name) : chelovek.name == null;
    }

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

    @Override
    public String toString() {
        return "Chelovek{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
این یک کلاس معمولی با تنها 2 فیلد است (اما گاهی اوقات بیش از 10-15 فیلد وجود دارد). بله، البته، همه اینها را می توان در IDE تولید کرد، اما لعنتی، فضا را اشغال می کند. اگه 15-20 فیلد باشه همشون نیاز به گیرنده، ستتر، سازنده... از این میان، یکی دو روش دیگه که با چشم نامرئی هستن به راحتی گم میشن. چگونه می توانم به چنین برنامه نویسی کمک کنم تا سریعتر و کمتر بنویسد؟ لومبوک مستقیم در گرما، همان کلاس اما با استفاده از Lombok:
package lombok;

@Data
public class Chelovek {
    private String name;
    private int age;
}
بله، همین است. سرد؟ حاشیه نویسی @Data چه خواهد کرد ؟ در مرحله کامپایل، getters/setter را برای همه فیلدها، toString تولید می کند و برابرها و هش کد را طبق استانداردها دوباره تعریف می کند. شما می توانید یک افزونه را در IDE نصب کنید و تمام روش هایی که هنوز ایجاد نشده اند را مشاهده می کند.
حاشیه نویسی ها  بخش دوم.  لومبوک - 1
امیدوارم برای شما خواننده جالب بوده باشد، زیرا آنچه در ادامه می آید مقدمه ای کوتاه و پیوندهایی به جزئیات است. Lombok همچنین فرصتی برای سفارشی‌سازی تولید فراهم می‌کند؛ همه دریافت‌کننده‌ها، تنظیم‌کننده‌ها یا هش کدها همیشه نیازی به تولید متفاوت ندارند. بنابراین، حاشیه‌نویسی‌های جداگانه‌ای وجود دارد (من فکر می‌کنم بسیاری از آنها نیازی به توضیح ندارند) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor، @RequiredArgsConstructor و @AllArgsConstructor @Log اینها معمولی‌ترین آنها هستند، کل مجموعه را می‌توان مشاهده کرد . در اینجا var و val سزاوار توجه ویژه هستند. می توان اینگونه نوشت:
package lombok;

import lombok.experimental.var;

@Data
public class Chelovek {
    private String name;
    private int age;

    public static void main(String[] args) {
        var chelovek = new Chelovek();
        chelovek.setAge(22);
        System.out.println(chelovek);
    }
}
چرا این لازم است؟ به عنوان مثال، ما کلاس RandomAccessFileChannel را داریم، خوب، چرا باید آن را به این صورت بنویسیم:
RandomAccessFileChannel channel = new RandomAccessFileChannel();
در صورت امکان به این صورت:
var channel2 = new RandomAccessFileChannel();
به نظر من این همیشه قابل قبول نیست. به عنوان مثال، ما یک متد شیطانی داریم که یک نقشه شیطانی را برمی گرداند:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap(){
    return new HashMap<>();
}
اگر آن را اینگونه صدا کنید:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
کم و بیش مشخص است که ما با چه چیزی کار می کنیم. اگر تماس به این صورت است:
var listSetMap = evilMap();
پس چه کسی می داند که ()evilMap چه چیزی را برمی گرداند، و تا زمانی که به خود متد نگاه نکنید، متوجه نخواهید شد. چرا به خود زحمت می دهید منابع را مرور کنید؟ به طور کلی، باید در این مورد بیشتر مراقب باشید. موضوع آزمایشی: در اینجا می‌خواهم به حاشیه‌نویسی‌ها توجه کنم: @UtilityClass یک سازنده خصوصی ایجاد می‌کند و یک استثنا را در آنجا می‌اندازد (به طوری که دست‌های کثیف از بازتاب وارد اینجا نشوند). و به خوبی در ابتدای کلاس به ما می گوید که روش های کاربردی وجود دارد. @Delegate الگوی تفویض اختیار را پیاده سازی می کند. اگر کلاسی دارید که چیزی را به کلاس دیگری واگذار می کند، در حالی که فقط در برخی از روش ها تغییرات ایجاد می کند، این حاشیه نویسی شما را از تکرار روش ها نجات می دهد + آنها را پیگیری می کند. اگر روشی حذف یا اضافه شود، متوجه آن خواهد شد. موضوع حاشیه نویسی های آزمایشی وب سایت رسمی GITHUB برای اینکه IDE به طور معمول با lombok کار کند و روش ها را به عنوان ناموجود برجسته نکند، باید افزونه را نصب کنید. در وب سایت رسمی، یک بخش راه اندازی وجود دارد که در آن می توانید نحوه اتصال افزونه را برای هر IDE مشاهده کنید. همانطور که می بینید، Lombok محبوب است. > 5000 ستاره و > 1000 چنگال. بهار در کلاس های خود از لومبوک استفاده می کند. اگر فنری در پروژه خود دارید، به دنبال آن بگردید، شاید لومبوک را بالا کشیده است، فقط نمی دانید.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION