مرکزی مواد پر جائیں
ماڈیول 7 · سبق 1 از 2کورس میں 13/14~12 min
ماڈیول اسباق (1/2)

لیمبڈا اظہار

جاوا 8 سے شروع کرتے ہوئے، فنکشنل پروگرامنگ کو Lambda Expressions کے ذریعے سپورٹ کیا جاتا ہے۔ ایک لیمبڈا اظہار بنیادی طور پر ایک گمنام طریقہ ہے (بغیر نام کے ایک فنکشن) جسے طریقوں کی دلیل کے طور پر پاس کیا جاسکتا ہے یا متغیرات میں محفوظ کیا جاسکتا ہے۔

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

لیمبڈا ایکسپریشن صرف اس وقت استعمال کیا جا سکتا ہے جہاں فنکشنل انٹرفیس کی ضرورت ہو۔ ایک فنکشنل انٹرفیس ایک انٹرفیس ہے جو بالکل ایک تجریدی طریقہ کا اعلان کرتا ہے۔ جاوا ان انٹرفیس کو اختیاری @FunctionalInterface تشریح کے ساتھ نشان زد کرتا ہے۔

صارف کے بیان کردہ فنکشنل انٹرفیس کی مثال:

Java
@FunctionalInterface
interface MathOperation {
    int operate(int a, int b);
}

جاوا 8 سے پہلے، آپ کو ایک گمنام اندرونی کلاس کی وضاحت کرنی ہوگی۔ لیمبڈاس کے ساتھ، نحو کو آسان بنایا گیا ہے:

Java
MathOperation addition = (a, b) -> a + b;
int result = addition.operate(5, 3); // Returns 8

لیمبڈا اظہار کی ساخت

لیمبڈا کی بنیادی ترکیب یہ ہے:

Code
(parameters) -> { body }
  • پیرامیٹر کے بغیر: () -> System.out.println("Hello")
  • سنگل پیرامیٹر: x -> x * 2 (قوسین کو چھوڑا جا سکتا ہے)
  • متعدد پیرامیٹرز: (x, y) -> x + y
  • ملٹی لائن باڈی: اگر باڈی میں متعدد بیانات ہوں تو منحنی خطوط وحدانی {} اور ایک واضح return بیان درکار ہے۔
Java
MathOperation detailedAddition = (a, b) -> {
    System.out.println("Adding...");
    return a + b;
};

جاوا میں معیاری فنکشنل انٹرفیس

java.util.function پیکیج کئی بلٹ ان فنکشنل انٹرفیس فراہم کرتا ہے:

  • Predicate<T>: T قسم کی دلیل کو قبول کرتا ہے اور ایک بولین (test(T t) طریقہ) لوٹاتا ہے۔
  • Consumer<T>: T قسم کی دلیل کو قبول کرتا ہے اور نتیجہ واپس کئے بغیر آپریشن کرتا ہے (accept(T t) طریقہ)۔
  • Function<T, R>: ایک دلیل قبول کرتا ہے T اور نتیجہ دیتا ہے R (apply(T t) طریقہ)۔
  • Supplier<T>: کوئی دلیل قبول نہیں کرتا ہے اور T (get() طریقہ) کی قسم کی قدر واپس کرتا ہے۔

خود ہی آزمائیں۔

ورزش#java.m7.l1.e1
کوششیں: 0لوڈ ہو رہا ہے…

ایک لیمبڈا ایکسپریشن کا استعمال کرتے ہوئے کیلکولیٹر انٹرفیس کو انسٹینٹیٹ کرکے کوڈ کو مکمل کریں جس میں دو عدد کا اضافہ ہوتا ہے۔ پھر، 5 اور 3 پاس کرنے والے کیلکولیشن کا طریقہ استعمال کریں، اور نتیجہ پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

'کیلکولیٹر ایڈر = (a, b) -> a + b;' کا اعلان کریں اور پھر پرنٹ کال کے اندر 'adder.calculate(5, 3)' کی درخواست کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#java.m7.l1.e2
کوششیں: 0لوڈ ہو رہا ہے…

اسٹینڈرڈ فنکشنل انٹرفیس Predicate<String> کی ایک مثال بنائیں جس کا نام isLong ایک لیمبڈا ایکسپریشن کا استعمال کرتے ہوئے ہے جو چیک کرتا ہے کہ آیا سٹرنگ کی لمبائی 5 حروف سے زیادہ ہے۔ پھر 'ہیلو ورلڈ' کے لیے ٹیسٹ کا نتیجہ پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

ایک `Predicate<String>` کے لیے lambda ایک پیرامیٹر `s` لیتا ہے اور `s.length() > 5` کو بولین حالت کے طور پر لوٹاتا ہے۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#java.m7.l1.e3
کوششیں: 0لوڈ ہو رہا ہے…

سٹرنگز کے ناموں کی فہرست کو حروف تہجی کے مطابق ترتیب دے کر اس پر sort() طریقہ استعمال کریں اور ایک لیمبڈا ایکسپریشن پاس کریں جو Comparator کو لاگو کرتا ہے (دو سٹرنگز s1، s2 لے کر compareTo کا استعمال کرتے ہوئے ان کا موازنہ کریں)۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

فہرست کو جگہ پر ترتیب دینے کے لیے `names.sort((s1, s2) -> s1.compareTo(s2));` استعمال کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔