"ঠিক আছে, আসুন অন্য পদ্ধতির চেষ্টা করি। আমি আপনাকে দেখাব কিভাবে কলিং পদ্ধতি কাজ করে, এবং তারপরে আপনি আবার আগের পাঠটি দেখার চেষ্টা করবেন, ঠিক আছে?"

"চল এটা করি."

"দারুণ। আমি আপনাকে কলিং ফাংশন/পদ্ধতি এবং তারা যে মানগুলি ফেরত দেয় (রিটার্ন মান) সম্পর্কে বলব।"

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

উদাহরণ
package com.codegym.lesson2;
public class MethodCall
{
    public static void main(String[] args)
    {
         print4("I like to move it, move it.");
    }

    public static void print4(String s)
    {
        System.out.println(s);
        System.out.println(s);
        System.out.println(s);
        System.out.println(s);
    }
}

"উপরের উদাহরণে, আমরা একটি ফাংশন লিখেছি যা স্ক্রিনে চারবার পাস করা স্ট্রিং প্রদর্শন করবে। তারপরে আমরা ফাংশনটিকে print4লাইন 6-এ ডাকলাম।"

"যখন প্রোগ্রামটি লাইন 6 এ পৌঁছাবে, তখন এটি 9 লাইনে চলে যাবে, 'I like to move it, move it'ভ্যারিয়েবল s এর মান নির্ধারণ করবে।"

"তারপর লাইন 11-14 কার্যকর করা হবে। ফাংশন শেষ হবে, এবং প্রোগ্রাম 7 লাইনে পুনরায় শুরু হবে।"

"আমি দেখি."

"আপনি শুধুমাত্র একটি ফাংশনে আর্গুমেন্ট (মান) পাস করতে পারবেন না - একটি ফাংশন তার কাজের ফলাফল (রিটার্ন মান) ফেরত দিতে পারে। এটি কীওয়ার্ড রিটার্ন দিয়ে করা হয়। এটি দেখতে এইরকম:"

উদাহরণ 1.
ন্যূনতম দুটি সংখ্যা নির্ধারণ করুন।
public class MethodCall
{
   public static void main(String[] args)
   {
      int a = 5, b = 7;
      int m = min(a, b);
      System.out.println("The minimum is "+ m);
   }

   public static int min(int c, int d)
   {
      int m2;
      if (c < d)
           m2 = c;
      else
           m2 = d;

      return m2;
   }
}
এখানে কিভাবে এটা কাজ করে:
public class MethodCall
{
   public static void main(String[] args)
   {
      int a = 5, b = 7;
      int c = a, d = b;
      int m2;
      if (c < d)
           m2 = c;
      else
           m2 = d;

      int m = m2;
      System.out.println("The minimum is "+ m);
   }
}

"আমি মনে করি এটি অর্থপূর্ণ হতে শুরু করেছে! বাম এবং ডান কলামের কোডটি আসলে একই। এটি কেবলমাত্র বাম দিকের কোডটির একটি স্বতন্ত্র ফাংশন রয়েছে।"

"ফাংশনটি একটি নির্দিষ্ট মান গণনা করে এবং রিটার্ন স্টেটমেন্ট ব্যবহার করে সেই মানটি যাকে বলা হয় তা পাস করতে। অন্তত, আমি এটি দেখতে পাই।"

"এবং আপনি সঠিক!"

"কিন্তু এই অকার্যকর টাইপ কি?"

"কিছু ফাংশন আমাদের main() পদ্ধতির মতো কম্পিউটিং বা কোনো মান ফেরত না দিয়েই কিছু করে । এই ধরনের ফাংশনগুলির জন্য একটি বিশেষ রিটার্ন টাইপ- void - তৈরি করা হয়েছিল।"

"কেন শুধু কিছুই ঘোষণা করবেন না যদি একটি ফাংশন কিছু ফেরত না দেয়?"

"মনে রাখবেন কিভাবে আমরা কোন ভেরিয়েবল ডিক্লেয়ার করি? টাইপ এবং নাম। ফাংশনের জন্য, আমরা একটি টাইপ, নাম এবং বন্ধনী ঘোষণা করি। একটি ফাংশনের নাম বন্ধনী দ্বারা অনুসরণ করে আপনি ফাংশনটিকে কীভাবে কল করবেন।"

"সুতরাং, ফাংশনগুলিকে দুটি বিভাগে বিভক্ত করার চেয়ে একটি 'অকার্যকর প্রকার' উদ্ভাবন করা সহজ ছিল - যেগুলি মান প্রদান করে এবং যেগুলি দেয় না?"

"ঠিক! তুমি সত্যিই স্মার্ট, আমার ছেলে।"

"আমরা কিভাবে একটি অকার্যকর টাইপ ফেরত দিতে পারি?"

"আমরা করি না। এটি এইভাবে কাজ করে। রিটার্ন স্টেটমেন্ট কার্যকর করার সময়, জাভা মেশিন 'রিটার্ন' শব্দের ডানদিকে অভিব্যক্তির মান গণনা করে, এই মানটিকে মেমরির একটি বিশেষ অংশে সংরক্ষণ করে এবং অবিলম্বে শেষ হয় ফাংশন ফাংশন কল করার ফলে যেখানে ফাংশন কল করা হয়েছিল সেখানে সঞ্চিত মান ব্যবহার করা হয়। আমি আগে যে উদাহরণ দিয়েছিলাম তা আপনি দেখতে পাবেন।"

"আপনি বলতে চাচ্ছেন সেই অংশ যেখানে int m = min(a, b) m = m2 তে রূপান্তরিত হয়?"

"হ্যাঁ। ফাংশন শেষ হওয়ার পরে, সবকিছু এমনভাবে কাজ করে যেন ফাংশনের রিটার্ন মানটি তার জায়গায় লেখা ছিল। আপনার মনে এই বাক্যাংশটি পুনরাবৃত্তি করুন এবং শেষ উদাহরণে কোডটি দেখুন। "

"আমি মনে করি এটি কেবল সহজ বলে মনে হচ্ছে। এটি আসলে কঠিন। আমি এর কিছু অংশ বুঝতে পেরেছি।"

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

"আচ্ছা, আপনি যদি বলেন। চল চলুন।"