JavaRush /جاوا بلاگ /Random-UR /تشریحات۔ دوسرا حصہ. لومبوک

تشریحات۔ دوسرا حصہ. لومبوک

گروپ میں شائع ہوا۔
تشریحات۔ پہلا حصہ، تھوڑا سا بورنگ اس حصے میں، میں نے ماخذ تشریحات کے ایک معروف نمائندے کے طور پر لومبوک لائبریری کو چھونے کا فیصلہ کیا۔ اگلے مضمون میں رن ٹائم تشریحات کے ساتھ۔ ایک زمانے میں ایک جاوا پروگرامر تھا، وہ ہر روز عام کوڈ لکھتا تھا، مثال کے طور پر:
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 فیلڈز ہیں، تو ان سب کو گیٹرز، سیٹرز، کنسٹرکٹرز کی ضرورت ہے... ان سب کے علاوہ، کچھ اور طریقے جو آنکھ سے پوشیدہ ہیں، آسانی سے ضائع ہو سکتے ہیں۔ میں ایسے پروگرامر کو تیز اور کم لکھنے میں کس طرح مدد کرسکتا ہوں؟ لومبوک۔ سیدھے گرمی میں، ایک ہی کلاس لیکن لومبوک کا استعمال کرتے ہوئے:
package lombok;

@Data
public class Chelovek {
    private String name;
    private int age;
}
ہاں بس اتنا ہی ہے۔ ٹھنڈا؟ @Data تشریح کیا کرے گی ؟ تالیف کے مرحلے پر، یہ تمام فیلڈز کے لیے گیٹرز/سیٹرز تیار کرے گا، ٹو سٹرنگ اور معیارات کے مطابق مساوی اور ہیش کوڈ کی دوبارہ وضاحت کرے گا۔ آپ 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();
پھر کون جانتا ہے کہ برائی میپ() کیا لوٹتا ہے، اور جب تک آپ خود طریقہ کو نہیں دیکھیں گے، آپ کو معلوم نہیں ہوگا۔ ذرائع سے جانے کی زحمت کیوں؟ عام طور پر، آپ کو اس کے ساتھ زیادہ محتاط رہنے کی ضرورت ہے۔ تجرباتی تھریڈ: یہاں میں تشریحات کو نوٹ کرنا چاہوں گا: @UtilityClass یہ ایک پرائیویٹ کنسٹرکٹر بناتا ہے اور وہاں ایک استثناء پھینک دیتا ہے (تاکہ عکاسی سے گندے ہاتھ یہاں نہ آئیں)۔ اور کلاس کے آغاز میں بہت اچھی طرح سے یہ ہمیں بتاتا ہے کہ افادیت کے طریقے موجود ہیں۔ @Delegate وفد کے پیٹرن کو نافذ کرتا ہے۔ اگر آپ کے پاس کوئی ایسی کلاس ہے جو کسی دوسرے طبقے کو کچھ ڈیلیٹ کرتی ہے، جبکہ صرف کچھ طریقوں میں تبدیلیاں کرتے ہیں، تو یہ تشریح آپ کو ڈپلیکیٹ طریقوں سے بچائے گی + ان پر نظر رکھے گی۔ اگر کوئی طریقہ ہٹا یا شامل کیا جاتا ہے، تو وہ اسے محسوس کرے گی۔ تجرباتی تشریحات کا تھریڈ GITHUB آفیشل ویب سائٹ IDE کے لمبوک کے ساتھ عام طور پر کام کرنے کے لیے، اور طریقوں کو غیر موجود کے طور پر نمایاں نہ کرنے کے لیے، آپ کو پلگ ان انسٹال کرنے کی ضرورت ہے۔ سرکاری ویب سائٹ پر، ایک سیٹ اپ سیکشن ہے جہاں آپ دیکھ سکتے ہیں کہ ہر IDE کے لیے پلگ ان کو کیسے جوڑنا ہے۔ جیسا کہ آپ دیکھ سکتے ہیں، Lombok مقبول ہے۔ >5000 ستارے اور >1000 کانٹے۔ بہار اپنی کلاسوں میں لومبوک کا استعمال کرتی ہے۔ اگر آپ کے پروجیکٹ میں بہار ہے تو اسے تلاش کریں، شاید اس نے لومبوک کو کھینچ لیا ہو، آپ کو معلوم نہیں ہے۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION