CodeGym /وبلاگ جاوا /Random-FA /حاشیه نویسی ها قسمت 2. لومبوک
John Squirrels
مرحله
San Francisco

حاشیه نویسی ها قسمت 2. لومبوک

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

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

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

    public Person() {
    }

    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;

        Person person = (Person) o;

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

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

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

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

import lombok.experimental.var;

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

    public static void main(String[] args) {
        var person = new Person();
        person.setAge(22);
        System.out.println(person);
    }
}
چرا این لازم است؟ به عنوان مثال، ما یک کلاس 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 مشاهده کنید. همانطور که می بینید، لومبوک محبوب است:> 5000 ستاره و> 1000 چنگال. بهار در کلاس های خود از لومبوک استفاده می کند. اگر Spring را در پروژه خود دارید، نگاهی بیندازید - ممکن است بدون اطلاع شما لومبوک را وارد کرده باشد.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION