মূল কন্টেন্টে যান
মডিউল 7 · 1-এর পাঠ 2কোর্সে 13/14~12 min
মডিউল পাঠ (1/2)

ল্যাম্বডা এক্সপ্রেশন

Java 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লোড হচ্ছে...

স্ট্রিং দৈর্ঘ্য 5 অক্ষরের বেশি কিনা তা পরীক্ষা করে ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে isLong নামের প্রিডিকেট<String> স্ট্যান্ডার্ড ফাংশনাল ইন্টারফেসের একটি উদাহরণ তৈরি করুন। তারপর 'হ্যালো ওয়ার্ল্ড'-এর জন্য পরীক্ষার ফলাফল প্রিন্ট করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

একটি `Predicate<String>`-এর ল্যাম্বডা একটি প্যারামিটার `s` নেয় এবং বুলিয়ান শর্ত হিসেবে `s.length() > 5` প্রদান করে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#java.m7.l1.e3
প্রচেষ্টা: 0লোড হচ্ছে...

স্ট্রিং নামের তালিকাটি বর্ণানুক্রমিকভাবে সাজান এটিতে sort() পদ্ধতি ব্যবহার করে এবং একটি ল্যাম্বডা এক্সপ্রেশন পাস করে যা Comparator প্রয়োগ করে (দুটি স্ট্রিং s1, s2 নিয়ে এবং compareTo ব্যবহার করে তাদের তুলনা করে)।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

তালিকাটি যথাস্থানে সাজাতে `names.sort((s1, s2) -> s1.compareTo(s2));` ব্যবহার করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ