Lambda Expressions কি এবং কিভাবে কাজ করে?

Java 8 এবং এর নতুন বৈশিষ্ট্য - জাভা ইন্টারভিউ প্রশ্ন (Java Interview Questions) - Java Technologies

409

Lambda Expressions হল একটি নতুন ফিচার যা Java 8 এ পরিচিত হয়েছে এবং এটি জাভাতে functional programming এর ধারণা প্রবর্তন করেছে। এটি মূলত anonymous functions (অথবা ফাংশনাল ইন্টারফেস) তৈরি করতে ব্যবহৃত হয়। ল্যাম্বডা এক্সপ্রেশন দ্বারা, আপনি কোডকে আরও সংক্ষিপ্ত এবং পাঠযোগ্যভাবে লিখতে পারেন, বিশেষ করে যখন আপনি একটি ফাংশন বা কোড ব্লক অন্য কোথাও পাস করতে চান। এটি সাধারণত functional interface এর সাথে ব্যবহৃত হয়।

1. Lambda Expression কী?

Lambda Expression হল একটি ফাংশনাল ইন্টারফেসের implementation যা একটি অজ্ঞাত (anonymous) ফাংশন হিসেবে কাজ করে। এটি শুধুমাত্র একটি method এর শর্টকাট রূপ। এর মাধ্যমে, আমরা ফাংশন বা কোড ব্লককে একটি parameterized method হিসেবে পাস করতে পারি যা নির্দিষ্ট কাজ সম্পাদন করবে। ল্যাম্বডা এক্সপ্রেশনকে মূলত একটি functional interface এর সাথে ব্যবহার করা হয়।

2. Lambda Expression Syntax:

ল্যাম্বডা এক্সপ্রেশনটির সাধারণ সিঙ্কট্যাক্স:

(parameters) -> expression

এটি তিনটি অংশে বিভক্ত:

  • parameters: যে ইনপুট প্যারামিটার ফাংশনটি নেবে (এটি এক বা একাধিক হতে পারে)।
  • ->: এটি একটি সেপারেটর যা প্যারামিটার এবং কোড বডির মধ্যে ব্যবহৃত হয়।
  • expression: এখানে কোড বা কাজ যা ফাংশনটি করবে।

3. Lambda Expression এর উদাহরণ:

উদাহরণ 1: একটি সাধারণ ল্যাম্বডা এক্সপ্রেশন:

public class LambdaExample {
    public static void main(String[] args) {
        // Lambda expression to print a message
        Runnable r = () -> System.out.println("Hello, World!");
        r.run();
    }
}

ব্যাখ্যা:

  • এখানে, Runnable একটি functional interface, যা একটি run() মেথড ধারণ করে। ল্যাম্বডা এক্সপ্রেশনটি run() মেথডের জন্য একটি অজ্ঞাত implementation প্রদান করছে।
  • () -> System.out.println("Hello, World!"); হলো ল্যাম্বডা এক্সপ্রেশন। এর মধ্যে () হল প্যারামিটার (এখানে কোনো প্যারামিটার নেই), এবং System.out.println("Hello, World!"); হল ফাংশনটি যা 실행 হবে।

উদাহরণ 2: দুইটি সংখ্যার যোগফল করা:

public class LambdaExample {
    public static void main(String[] args) {
        // Lambda expression to add two numbers
        AddNumbers add = (a, b) -> a + b;
        System.out.println("Sum: " + add.add(10, 20));
    }
}

@FunctionalInterface
interface AddNumbers {
    int add(int a, int b);
}

ব্যাখ্যা:

  • এখানে, AddNumbers একটি functional interface যা add() মেথড প্রদান করে।
  • ল্যাম্বডা এক্সপ্রেশনটি (a, b) -> a + b কোডটি add() মেথডে প্রেরণ করবে।

উদাহরণ 3: Sorting a List using Lambda:

import java.util.*;

public class LambdaExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("John", "Alice", "Bob", "Charlie");

        // Lambda expression to sort the list
        Collections.sort(names, (s1, s2) -> s1.compareTo(s2));

        System.out.println(names); // Output: [Alice, Bob, Charlie, John]
    }
}

ব্যাখ্যা:

  • এখানে, Collections.sort() মেথডের ভিতরে ল্যাম্বডা এক্সপ্রেশন ব্যবহৃত হয়েছে, যা compareTo মেথড ব্যবহার করে নামগুলোকে অক্ষরানুক্রমে সাজাবে।

4. Lambda Expression এর উপকারিতা:

  1. Code Readability and Simplicity:
    • ল্যাম্বডা এক্সপ্রেশন কোডকে আরও ছোট এবং সহজ করে তোলে। এটি সাধারণত অনেক কম কোড লিখতে সাহায্য করে, বিশেষ করে যখন শুধুমাত্র একটি মেথড পাস করতে হয়।
  2. Functional Programming:
    • ল্যাম্বডা এক্সপ্রেশন জাভাতে functional programming এর ধারণা নিয়ে আসে, যেখানে কোডে ফাংশন্যালিটির আলাদা আলাদা ব্লক থাকে এবং এগুলো একে অপরের সাথে কাজ করে।
  3. Encapsulation of behavior:
    • ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে আপনি একটি আচরণ (behavior) এনক্যাপসুলেট করতে পারেন এবং সেটা অন্য কোডে পাস করতে পারেন, যেমন এক্সিকিউশন কন্ট্রোল করার জন্য।
  4. Parallel Processing:
    • ল্যাম্বডা এক্সপ্রেশনগুলোর সাহায্যে আপনি parallel processing করতে পারেন, যেমন Streams API দিয়ে অনেক বেশি দ্রুত কাজ করতে সক্ষম হয়।

5. Functional Interface:

ল্যাম্বডা এক্সপ্রেশন একটি functional interface এর সাথে কাজ করে। একটি functional interface হল এমন একটি ইন্টারফেস যার মধ্যে মাত্র একটি abstract method থাকে। Java 8 থেকে, @FunctionalInterface annotation ব্যবহার করে একটি ইন্টারফেসকে functional interface হিসেবে চিহ্নিত করা যায়।

উদাহরণ:

@FunctionalInterface
interface MyFunctionalInterface {
    void myMethod(); // Single abstract method
}

6. Common Use Cases of Lambda Expressions:

  • Event handling: GUI অ্যাপ্লিকেশনগুলিতে (যেমন Swing) ইভেন্ট হ্যান্ডলিং করার জন্য ল্যাম্বডা এক্সপ্রেশন ব্যবহার করা হয়।
  • Threading: থ্রেডে কোড 실행 করতে ল্যাম্বডা এক্সপ্রেশন ব্যবহার করা যায়।
  • Stream API: Stream API (Java 8) ব্যবহার করে ডেটার প্রক্রিয়াকরণে ল্যাম্বডা এক্সপ্রেশন ব্যাপকভাবে ব্যবহৃত হয়, যেমন filter(), map(), reduce() ইত্যাদি।

উদাহরণ (Stream API):

import java.util.*;
import java.util.stream.*;

public class LambdaExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("John", "Alice", "Bob", "Charlie");

        // Using Lambda expression to filter and collect the names starting with 'J'
        List<String> filteredNames = names.stream()
                                          .filter(name -> name.startsWith("J"))
                                          .collect(Collectors.toList());

        System.out.println(filteredNames); // Output: [John]
    }
}

7. Limitations of Lambda Expressions:

  • Cannot be used for method overloading: ল্যাম্বডা এক্সপ্রেশন দিয়ে মেথড ওভারলোডিং করা সম্ভব নয়।
  • Cannot modify the outer variable (in some cases): বাইরের ভ্যারিয়েবল (যেমন instance ভ্যারিয়েবল) যদি final না হয়, তবে তা ল্যাম্বডা এক্সপ্রেশনে পরিবর্তন করা যাবে না।
  • Can’t access non-final local variables: শুধুমাত্র final বা effectively final লোকাল ভ্যারিয়েবলগুলি ল্যাম্বডা এক্সপ্রেশন থেকে অ্যাক্সেস করা যায়।

ল্যাম্বডা এক্সপ্রেশন একটি শক্তিশালী ফিচার যা জাভাতে functional programming এর ধারণাকে নিয়ে এসেছে। এটি কোডকে কমপ্যাক্ট, পাঠযোগ্য এবং সহজ করে তোলে, বিশেষ করে যখন আমরা ফাংশন বা আচরণগুলোকে parameterized methods হিসেবে পাস করতে চাই।

Content added By
Promotion

Are you sure to start over?

Loading...