কম্পিউটার টিউটোরিয়াল

জাভা ল্যাম্বডা এক্সপ্রেশন: একটি সম্পূর্ণ গাইড

জাভা-তে ল্যাম্বডা এক্সপ্রেশন কীভাবে ব্যবহার করবেন

আপনি কি কখনো ভাবেছেন কিছু মেথড এক লাইনে ফিট হয়ত যদি জাভার বার্তালাপূর্ণ সিনট্যাক্স না থাকত যা মেথড ঘোষণার জন্য ব্যবহার করতে হয়? আপনি একলা নন।

মেথড প্রোগ্রামিং-এ একটি অত্যন্ত উপযোগী ফিচার। একটি মেথড হলো কোড ব্লক যা আপনার প্রোগ্রামে একটি নির্দিষ্ট কাজ করে। সেগুলো इसलिये ব্যবহৃত হয় কারণ একবার মেথড ডিফাইন করলে আপনি সেটি একাধিকবার কল করতে পারেন। এটি কোডে রিডান্ডেন্সি কমানো সাহায্য করে, যা আবার কোড মেইনটেইন করা সহজ করে তোলে।

এই গাইডে আমরা জাভা ল্যাম্বডা এক্সপ্রেশন নিয়ে আলোচনা করব। এটি একটি বিশেষ ধরনের মেথড যা আপনি ব্যবহার করতে পারেন যাকে ল্যাম্বডা এক্সপ্রেশন বলা হয়, যা একটি ফাংশনাল ইন্টারফেস ইমপ্লিমেন্ট করে। আমরা কীভাবে সেগুলো কাজ করে এবং কেন সেগুলো ব্যবহৃত হয় সেটি বলব।

ফাংশনাল ইন্টারফেস কী?

ল্যাম্বডা এক্সপ্রেশন নিয়ে কথা বলার আগে আপনাকে ফাংশনাল ইন্টারফেস বুঝতে হবে। ये হলো যেসব ইন্টারফেস যেগুলো শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড ধারণ করে। ফাংশনাল ইন্টারফেসের ভেতরে থাকা একমাত্র অ্যাবস্ট্র্যাক্ট মেথডটি ইন্টারফেসটির উদ্দেশ্য নির্দেশ করে।

উদাহরণ বিবেচনা করুন:

interface CalculateThree {
    double multiply_by_three(String day);
}

আমরা CalculateThree নামে একটি ইন্টারফেস তৈরি করেছি। এই ইন্টারফেসে শুধু একটি মেথড multiply_by_three রয়েছে, অর্থাৎ এটি একটি ফাংশনাল ইন্টারফেস।

জাভা ল্যাম্বডা এক্সপ্রেশন কী?

একটি ল্যাম্বডা এক্সপ্রেশন হলো একটি বেনাম মেথড। এটি একটি ফাংশনাল ইন্টারফেসের ভেতরে ডিফাইন করা মেথড ইমপ্লিমেন্ট করতে ব্যবহৃত হয়। ল্যাম্বডা এক্সপ্রেশনকে কখনো কখনো অ্যানোনিমাস মেথডও বলা হয় কারণ এর কোনো নাম নেই।

ল্যাম্বডা এক্সপ্রেশন অ্যারো অপারেটর (->) ব্যবহার করে যা সেটিকে দুটি অংশে ভাগ করে:

(parameter list) -> lambda body

বাম দিকটি থাকেন প্যারামিটারগুলো যা এক্সপ্রেশনটি ব্যবহার করবে; ডান দিকটি থাকেন কোড যা ল্যাম্বডা এক্সপ্রেশন এক্সিকিউট হলে চলবে। ল্যাম্বডা ফাংশন এক বা একাধিক প্যারামিটার গ্রহণ করতে পারে।

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

একটি প্রোগ্রাম তৈরি করি যা ইউজার থেকে একটি নম্বর নেবে এবং সেটিকে তিন দিয়ে গুণ করবে। প্রথমে ইউজার থেকে নম্বর গ্রহণের কোড লিখি:

import java.util.Scanner;
class Main {
    public static void main(String args[]) {
        Scanner user_input = new Scanner(System.in);
        System.out.println("Insert a number to multiply by three: ");
        double user_number = user_input.nextDouble();
    }
}

এই কোড চালালে ইউজারকে তিন দিয়ে গুণ করার জন্য একটি নম্বর ইনসার্ট করতে বলবে। প্রোগ্রাম সেটি "user_number" ভেরিয়েবলে পড়বে। Scanner ক্লাস কীভাবে কাজ করে তা জানতে আমাদের জাভা Scanner টিউটোরিয়াল পড়তে পারেন।

এখন নম্বরটি তিন দিয়ে গুণ করার জন্য একটি ল্যাম্বডা এক্সপ্রেশন ডিফাইন করি। নিচের কোড আপনার main মেথডের উপরে পেস্ট করুন:

interface CalculateThree {
    double multiply_by_three(double number);
}

এই কোড সেটি ইন্টারফেস ডিফাইন করে যেটি আমাদের ল্যাম্বডা এক্সপ্রেশন রেফার করবে। তারপর main মেথডের নিচে ক্লাসে নিচের কোড যোগ করুন:

CalculateThree multiply = (number) -> number * 3;
double answer = multiply.multiply_by_three(user_number);
System.out.println(user_number + " multiplied by three is " + answer);

আমরা CalculateThree ইন্টারফেস ব্যবহার করে multiply নামে একটি ভেরিয়েবল ঘোষণা করেছি। এতে আমাদের ল্যাম্বডা এক্সপ্রেশনের কোড রয়েছে। ল্যাম্বডা এক্সপ্রেশনটি আমাদের CalculateThree ইন্টারফেসের multiply_by_three এর সাথে জড়িত কারণ সেটি ইন্টারফেসে একমাত্র ফাংশন।

তারপর আমরা ডট নোটেশন ব্যবহার করে এই ফাংশনটি কল করেছি:

multiply.multiply_by_three(user_number);

ডট নোটেশন হলো যেখানে আপনি যে ক্লাস বা ইন্টারফেস রেফার করতে চান তার নাম লিখেন, তারপর একটি ডট, তারপর যে মেথড অ্যাক্সেস করতে চান তার নাম। এই কেসে, আমরা "multiply" ইন্টারফেসের ভেতরে multiply_by_three মেথড অ্যাক্সেস করতে চাই।

আমাদের ফাইনাল কোড:

import java.util.Scanner;
interface CalculateThree {
    double multiply_by_three(double number);
}
class Main {
    public static void main(String args[]) {
        Scanner user_input = new Scanner(System.in);
        System.out.println("Insert a number to multiply by three: ");
        double user_number = user_input.nextDouble();
        CalculateThree multiply = (number) -> number * 3;
        double answer = multiply.multiply_by_three(user_number);
        System.out.println(user_number + " multiplied by three is " + answer);
    }
}

কোড চালিয়ে ৩ নম্বর ইনপুট দিলে:

Insert a number to multiply by three: 3
3.0 multiplied by three is 9.0

আমাদের কোড সফলভাবে ইনসার্ট করা নম্বরটি ৩ দিয়ে গুণ করল। এই কাজটি আমাদের ডিফাইন করা ল্যাম্বডা এক্সপ্রেশন দিয়ে করা হয়েছে।

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

ল্যাম্বডা এক্সপ্রেশন দুটি রূপে হতে পারে: সিংল এক্সপ্রেশন ব্যবহার করে, বা ব্লক ব্যবহার করে। ব্লক ল্যাম্বডা সিনট্যাক্স তখন ব্যবহৃত হয় যখন অ্যারোর ডান দিকের কোড একাধিক লাইন ধারণ করে।

ব্লক সিনট্যাক্স হলো ল্যাম্বডা এক্সপ্রেশনের ডান দিকের কোডকে কার্লি ব্রেস ({}) দিয়ে ঘিরে দেওয়া।

উদাহরণ বিবেচনা করুন:

interface GreetUser {
    String welcome_user(String name);
}
class Main {
    public static void main(String args[]) {
        GreetUser send_greeting = (name) -> {
            System.out.println("Good morning!");
            System.out.println("Welcome, " + name);
        };
        System.out.println(send_greeting.welcome_user("Brad"));
    }
}

আমরা send_greeting নামে একটি ল্যাম্বডা এক্সপ্রেশন ঘোষণা করেছি। এই এক্সপ্রেশন আমাদের প্রোগ্রামের শুরুতে ডিফাইন করা GreetUser ইন্টারফেসকে রেফার করে। আমাদের ল্যাম্বডা এক্সপ্রেশন দুটি কাজ করে:

  • কনসোলে "Good morning!" প্রিন্ট করে
  • কনসোলে "Welcome, " এবং ইউজারের নাম প্রিন্ট করে
যেহেতু এটি দুটি লাইন কোড নিচ্ছে, আমরা ব্লক সিনট্যাক্স ব্যবহার করেছি। ল্যাম্বডা এক্সপ্রেশনের ডান দিকের কোড কার্লি ব্রেস দিয়ে ঘেরা হয়েছে।

উপসংহার

ল্যাম্বডা এক্সপ্রেশন হলো বেনাম মেথড যা একটি ফাংশনাল ইন্টারফেস ইমপ্লিমেন্ট করে। এই ফাংশনগুলোকখনো কখনো অ্যানোনিমাস ক্লাস বা ফাংশন বলা হয় কারণ এর কোনো নাম নেই এবং সেগুলো নিজে থেকে এক্সিকিউট হয় না।

চ্যালেঞ্জ পছন্দ করবেন? একটি ল্যাম্বডা এক্সপ্রেশন লিখুন যা চেক করবে একটি নম্বর জোড় কিনা। যদি জোড় হয়, "X is even" কনসোলে প্রিন্ট হবে (X হলো টেস্ট করা নম্বর); অন্যথায় "X is odd" প্রিন্ট হবে।

এখন আপনি জাভা-তে ল্যাম্বডা এক্সপ্রেশন এক্সপার্টের মতো ব্যবহার করতে পারবেন!

  1. জাভা কম্পাইলার: ধাপে ধাপে গাইড

  2. জাভাতে নেস্টেড ইন্টারফেস

  3. জাভা ৮-এ ইন্টারফেস এনহ্যান্সমেন্ট

  4. জাভাতে ইন্টারফেস