JavaRush /جاوا بلاگ /Random-UR /Java 8. ہر وہ چیز جس کی آپ کو ضرورت ہے۔

Java 8. ہر وہ چیز جس کی آپ کو ضرورت ہے۔

گروپ میں شائع ہوا۔

جاوا 8 ٹیوٹوریل

"جاوا ابھی بھی زندہ ہے اور لوگ اسے سمجھنا شروع کر رہے ہیں۔"
جاوا 8 کے میرے تعارف میں خوش آمدید۔ یہ مضمون آپ کو جاوا 7 سے لے کر جاوا 8 تک تمام نئی خصوصیات کے ذریعے قدم بہ قدم لے جائے گا۔ فوری اور آسان کوڈ کی مثالوں کے ساتھ، ہم سیکھ سکتے ہیں کہ ڈیفالٹ انٹرفیس، طریقہ کار کے حوالہ جات ، اور دہرائی جانے والی تشریحات ۔ مضمون کے آخر میں ہم Stream API سے واقف ہوں گے۔
Java 8. آپ کو صرف 1 کی ضرورت ہے۔
کوئی غیر ضروری بات نہیں - صرف کوڈ اور تبصرے! آگے!

انٹرفیس کے لیے پہلے سے طے شدہ طریقے

جاوا 8 ہمیں انٹرفیس میں غیر تجریدی طریقوں کو شامل کرنے کی اجازت دیتا ہے (جو لاگو ہوتے ہیں) شامل کرکے default۔ اس خصوصیت کو Extention Methods کے نام سے بھی جانا جاتا ہے ۔ ذیل میں پہلی مثال ہے:
interface Formula {
    double calculate(int a);

    default double sqrt(int a) {
        return Math.sqrt(a);
    }
}
تجریدی طریقہ کے علاوہ calculate، انٹرفیس Formulaایک طے شدہ طریقہ کی بھی وضاحت کرتا ہے sqrt۔ اس انٹرفیس کو نافذ کرنے والی کلاسوں کو صرف لاگو کرنے کی ضرورت ہے calculate۔ پہلے سے طے شدہ طریقہ کو sqrtباکس سے باہر استعمال کیا جا سکتا ہے۔
Formula formula = new Formula() {
    @Override
    public double calculate(int a) {
        return sqrt(a * 100);
    }
};

formula.calculate(100);     // 100.0
formula.sqrt(16);           // 4.0
انٹرفیس کو Formulaایک گمنام کلاس کے طور پر لاگو کیا جاتا ہے۔ کوڈ بے کار ہے: نفاذ کے لیے 6 لائنیں sqrt(a * 100)۔ جیسا کہ ہم اگلے حصے میں دیکھیں گے، جاوا 8 میں ایک طریقہ کو نافذ کرنے کا ایک خوبصورت طریقہ ہے۔

لیمبڈا کے تاثرات

آئیے جاوا کے پچھلے ورژن میں تاروں کی فہرست کو ترتیب دینے کی ایک سادہ مثال کے ساتھ شروع کریں:
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");

Collections.sort(names, new Comparator<String>() {
    @Override
    public int compare(String a, String b) {
        return b.compareTo(a);
    }
});
جامد طریقہ Collections.sortایک فہرست اور ایک موازنہ کو اس ترتیب میں قبول کرتا ہے جس میں فہرست کو ترتیب دیا جانا ہے۔ آپ ہمیشہ ایک گمنام کمپیریٹر کلاس بنا سکتے ہیں اور اسے پاس کر سکتے ہیں۔ ایک گمنام کلاس بنانے کے بجائے، جاوا 8 میں آپ ایک چھوٹی شکل، ایک لیمبڈا اظہار لکھ سکتے ہیں۔
Collections.sort(names, (String a, String b) -> {
    return b.compareTo(a);
});
جیسا کہ آپ دیکھ سکتے ہیں کہ کوڈ بہت چھوٹا اور پڑھنے میں آسان ہے۔ لیکن اسے اور بھی چھوٹا کیا جا سکتا ہے:
Collections.sort(names, (String a, String b) -> b.compareTo(a));
ایک لائن والے جسم کے لیے، آپ {}لفظ کو چھوڑ سکتے ہیں return۔ لیکن آپ اسے اور بھی چھوٹا کر سکتے ہیں:
Collections.sort(names, (a, b) -> b.compareTo(a));
جاوا کمپائلر دلیل کی اقسام کے بارے میں جانتا ہے، لہذا آپ انہیں بھی چھوڑ سکتے ہیں۔ آئیے لیمبڈا کے تاثرات کو مزید گہرائی میں کھودیں اور سمجھتے ہیں کہ انہیں کیسے استعمال کیا جا سکتا ہے۔

فنکشنل انٹرفیس

لیمبڈا ایکسپریشن جاوا ٹائپ سسٹم میں کیسے فٹ ہوتے ہیں؟ ہر لیمبڈا انٹرفیس میں بیان کردہ ایک قسم سے مساوی ہے۔ لہذا، ایک فعال انٹرفیس میں صرف ایک خلاصہ طریقہ ہونا چاہئے. اس قسم کا ہر لیمبڈا اظہار اس تجریدی طریقہ سے مطابقت رکھتا ہے۔ چونکہ پہلے سے طے شدہ طریقے خلاصہ نہیں ہوتے ہیں، آپ ضرورت کے مطابق فنکشنل انٹرفیس میں پہلے سے طے شدہ طریقے بنانے کے لیے آزاد ہیں۔ اگر اس انٹرفیس میں صرف ایک تجریدی طریقہ موجود ہے تو ہم صوابدیدی انٹرفیس کو لیمبڈا اظہار کے طور پر بھی استعمال کرسکتے ہیں۔ ان تقاضوں کو پورا کرنے کے لیے، آپ کو @FucntionalInterfaceایک تشریح شامل کرنے کی ضرورت ہے۔ مرتب کرنے والا اس کے بارے میں جانتا ہے اور اگر آپ ایک سے زیادہ تجریدی طریقہ فراہم کرنا چاہتے ہیں تو اسے مستثنیٰ قرار دے گا۔ مثال:
@FunctionalInterface
interface Converter<F, T> {
    T convert(F from);
}
Converter<String, Integer> converter = (from) -> Integer.valueOf(from);
Integer converted = converter.convert("123");
System.out.println(converted);    // 123
@FunctionalInterfaceذہن میں رکھیں کہ اگر تشریح کو چھوڑ دیا جائے تو کوڈ بھی مرتب ہو جائے گا ۔

طریقہ اور تعمیر کنندہ حوالہ جات

مندرجہ بالا مثال کو طریقہ کے حوالہ جات کا استعمال کرکے اور بھی چھوٹا بنایا جا سکتا ہے:
Converter<String, Integer> converter = Integer::valueOf;
Integer converted = converter.convert("123");
System.out.println(converted);   // 123
جاوا 8 آپ کو ایک طریقہ یا کنسٹرکٹر کو شامل کرکے حوالہ جات منتقل کرنے کی اجازت دیتا ہے ::۔ مندرجہ بالا مثال سے پتہ چلتا ہے کہ ہم کس طرح ایک جامد طریقہ کا حوالہ دے سکتے ہیں، حالانکہ ہم غیر جامد طریقوں کا حوالہ بھی دے سکتے ہیں:
class Something {
    String startsWith(String s) {
        return String.valueOf(s.charAt(0));
    }
}
Something something = new Something();
Converter<String, String> converter = something::startsWith;
String converted = converter.convert("Java");
System.out.println(converted);    // "J"
آئیے دیکھتے ہیں کہ ::یہ کنسٹرکٹرز کے ساتھ کیسے کام کرتا ہے۔ شروع کرنے کے لیے، ہم مختلف کنسٹرکٹرز کے ساتھ ایک مثال کلاس کی وضاحت کریں گے:
class Person {
    String firstName;
    String lastName;

    Person() {}

    Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
اگلا، ہم نئی اشیاء بنانے کے لیے ایک انٹرفیس کی وضاحت کریں گے:
interface PersonFactory<P extends Person> {
    P create(String firstName, String lastName);
}
تخلیق کارخانے کو لاگو کرنے کے بجائے، ہم ::کنسٹرکٹر کی مدد سے اس سب کو جوڑ دیں گے:
PersonFactory<Person> personFactory = Person::new;
Person person = personFactory.create("Peter", "Parker");
ہم نے کنسٹرکٹر کے ذریعے ایک لنک بنایا Person::new۔ جاوا کمپائلر خود بخود درست کنسٹرکٹر کا انتخاب کرے گا جو طریقہ کے دستخط سے میل کھاتا ہے PersonFactory.create۔ ... جاری ہے. بدقسمتی سے، مجھے مضمون کے مسودے کو محفوظ کرنے کا کوئی طریقہ نہیں ملا، اور یہ واقعی عجیب ہے، اور ترجمہ کا وقت ختم ہو گیا ہے - اس لیے میں اسے بعد میں ختم کروں گا۔ ہر ایک کے لیے جو انگریزی جانتا اور سمجھتا ہے - اصل مضمون ۔ اگر آپ کے پاس ترجمے کو درست کرنے کے لیے تجاویز ہیں، تو آپ کے لیے دستیاب کسی بھی طریقے سے لکھیں۔ میرا گیتوب اکاؤنٹ
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION