CodeGym /Java Blog /এলোমেলো /জাভা রিটার্ন কীওয়ার্ড
John Squirrels
লেভেল 41
San Francisco

জাভা রিটার্ন কীওয়ার্ড

এলোমেলো দলে প্রকাশিত
আমরা জানি, জাভা ভাষা একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা। অন্য কথায়, মৌলিক ধারণা, অর্থাৎ ভিত্তির ভিত্তি হল, সবকিছুই একটি বস্তু। অবজেক্ট ক্লাস ব্যবহার করে বর্ণনা করা হয়. ক্লাস, ঘুরে, অবস্থা এবং আচরণ সংজ্ঞায়িত করে। উদাহরণস্বরূপ, একটি ব্যাঙ্ক অ্যাকাউন্টে অ্যাকাউন্টে থাকা টাকার পরিমাণের আকার থাকতে পারে এবং এমন আচরণ থাকতে পারে যা অ্যাকাউন্টের ভারসাম্য বৃদ্ধি বা হ্রাস করে। জাভাতে, আচরণগুলি পদ্ধতির মাধ্যমে প্রয়োগ করা হয়। পদ্ধতিগুলি কীভাবে সংজ্ঞায়িত করতে হয় তা আপনার জাভা অধ্যয়নের একেবারে শুরুতে আসে। উদাহরণস্বরূপ, ওরাকলের অফিসিয়াল টিউটোরিয়ালে, শিরোনামের অধীনে " পদ্ধতি সংজ্ঞায়িত করা "। এখানে দুটি গুরুত্বপূর্ণ বিষয় খেয়াল রাখতে হবে:
  • প্রতিটি পদ্ধতির একটি স্বাক্ষর আছে। স্বাক্ষর পদ্ধতির নাম এবং এর ইনপুট পরামিতি নিয়ে গঠিত।
  • একটি রিটার্ন টাইপ পদ্ধতির জন্য নির্দিষ্ট করা আবশ্যক। আপনি তার পদ্ধতি ঘোষণায় একটি পদ্ধতির রিটার্ন টাইপ ঘোষণা করেন।
রিটার্ন টাইপ পদ্ধতি স্বাক্ষরের অংশ নয়। আবার, এটি এই সত্যের একটি ফলাফল যে জাভা একটি শক্তিশালী টাইপ করা ভাষা এবং কম্পাইলার জানতে চায় কী ধরনের ব্যবহার করা হয় এবং কোথায়, আগে থেকেই এবং যতটা সম্ভব। আবার, এটি আমাদের ভুল থেকে বাঁচানোর জন্য। মূলত, এটি একটি ভাল কারণের জন্য সব. এবং এটি আমার কাছে মনে হচ্ছে যে এটি আবার আমাদের মধ্যে ডেটা পরিচালনার একটি সংস্কৃতি স্থাপন করে। সুতরাং, রিটার্ন মানের ধরন পদ্ধতির জন্য নির্দিষ্ট করা হয়েছে। এবং জাভা রিটার্ন কীওয়ার্ড আসলে রিটার্নিং করতে ব্যবহৃত হয়। জাভা রিটার্ন কীওয়ার্ড- ১

জাভাতে রিটার্ন কি করে

রিটার্ন কীওয়ার্ড হল একটি নিয়ন্ত্রণ প্রবাহ বিবৃতি, যেমনটি এখানে ওরাকল টিউটোরিয়ালে বর্ণিত হয়েছে । আপনি অফিসিয়াল টিউটোরিয়ালের " একটি পদ্ধতি থেকে একটি মান ফেরত দেওয়া " বিভাগে কীভাবে মানগুলি ফেরত দিতে হয় সে সম্পর্কেও পড়তে পারেন । একটি পদ্ধতির রিটার্ন মান পদ্ধতির নির্দিষ্ট রিটার্ন টাইপের সাথে মেলে কিনা তা কম্পাইলার সাবধানে ট্র্যাক রাখে। আসুন একটি উদাহরণ বিবেচনা করতে Tutorialspoint এর অনলাইন IDE ব্যবহার করি। আসুন প্রাথমিক উদাহরণটি দেখি:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
আমরা দেখতে পাচ্ছি, মূল পদ্ধতিটি এখানে কার্যকর করা হয়েছে, যা প্রোগ্রামের এন্ট্রি পয়েন্ট। কোডের লাইনগুলি উপরে থেকে নীচে নির্বাহ করা হয়। আমাদের প্রধান পদ্ধতি একটি মান ফেরত দিতে পারে না. যদি আমরা সেখানে একটি মান ফেরত দেওয়ার চেষ্টা করি, তাহলে আমরা একটি ত্রুটি পাব: "ত্রুটি: প্রধান পদ্ধতিটি টাইপের একটি মান প্রদান করতে হবে" । তদনুসারে, পদ্ধতিটি কেবল পর্দায় আউটপুট দেয়। এখন বার্তা তৈরির জন্য স্ট্রিং আক্ষরিককে একটি পৃথক পদ্ধতিতে সরানো যাক:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println(getHelloMessage());
    }
    
    public static String getHelloMessage() {
        return "Hello World";
    }
    
}
আমরা দেখতে পাচ্ছি, আমরা রিটার্ন মান নির্দেশ করতে রিটার্ন কীওয়ার্ড ব্যবহার করেছি, যা আমরা তারপর প্রিন্টএলএন পদ্ধতিতে পাস করেছি। getHelloMessage পদ্ধতির ঘোষণা নির্দেশ করে যে পদ্ধতিটি একটি স্ট্রিং ফিরিয়ে দেবে । এটি কম্পাইলারকে পরীক্ষা করার অনুমতি দেয় যে পদ্ধতির ক্রিয়াগুলি কীভাবে এটি ঘোষণা করা হয়েছে তার সাথে সামঞ্জস্যপূর্ণ। স্বাভাবিকভাবেই, একটি পদ্ধতি ঘোষণায় নির্দিষ্ট রিটার্ন টাইপ কোডে আসলে যে মানের রিটার্ন করা হয়েছে তার চেয়ে বিস্তৃত হতে পারে, অর্থাৎ গুরুত্বপূর্ণ বিষয় হল একটি টাইপ রূপান্তর সম্ভব। অন্যথায়, আমরা কম্পাইলের সময় একটি ত্রুটি পাব: "ত্রুটি: অসামঞ্জস্যপূর্ণ প্রকার" । যাইহোক, আপনি সম্ভবত একটি প্রশ্ন আছে: কেন ফিরেএকটি নিয়ন্ত্রণ প্রবাহ বিবৃতি বিবেচনা করা হয়? কারণ এটি একটি প্রোগ্রামের স্বাভাবিক টপ-ডাউন প্রবাহকে ব্যাহত করতে পারে। উদাহরণ:

public class HelloWorld {

    public static void main(String[] args) {
        if (args.length == 0) {
            return;
        }
        for (String arg : args) {
            System.out.println(arg);
        }
    }
    
}
যেমন আপনি উদাহরণ থেকে দেখতে পাচ্ছেন, আমরা জাভা প্রোগ্রামের মূল পদ্ধতিতে বাধা দিই যদি এটিকে আর্গুমেন্ট ছাড়া কল করা হয়। এটি মনে রাখা গুরুত্বপূর্ণ যে যদি আপনার কাছে একটি রিটার্ন স্টেটমেন্টের পরে কোড থাকে তবে এটি অ্যাক্সেসযোগ্য হবে না। আমাদের স্মার্ট কম্পাইলার এটি লক্ষ্য করবে এবং আপনাকে এই ধরনের প্রোগ্রাম চালানো থেকে বাধা দেবে। উদাহরণস্বরূপ, এই কোডটি কম্পাইল করে না:

public static void main(String[] args) {
        System.out.println("1");
        return;
// we use output method after return statement, which is incorrect 
        System.out.println("2");
 }
এটি প্রায় পেতে একটি নোংরা হ্যাক আছে. উদাহরণস্বরূপ, ডিবাগিং উদ্দেশ্যে, বা অন্য কোন কারণে। উপরের কোডটি একটি if ব্লকে রিটার্ন স্টেটমেন্ট মোড়ানোর মাধ্যমে ঠিক করা যেতে পারে :

if (2==2) {
    return;
}

ত্রুটি পরিচালনার সময় বিবৃতি ফেরত দিন

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

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Value: " + getIntValue());
    }
    
    public static int getIntValue() {
        int value = 1;
        try {
            System.out.println("Something terrible happens");
            throw new Exception();
        } catch (Exception e) {
            System.out.println("Cached value: " + value);
            return value;
        } finally {
            value++;
            System.out.println("New value: " + value);
        }
    }
    
}
প্রথম নজরে, মনে হচ্ছে 2 ফেরত দেওয়া উচিত, যেহেতু অবশেষে সর্বদা মৃত্যুদন্ড কার্যকর করা হয়। কিন্তু না, রিটার্ন মান হবে 1, এবং অবশেষে ব্লকে ভেরিয়েবলের পরিবর্তন উপেক্ষা করা হবে। তাছাড়া, ধরুন যে মানটিতে একটি বস্তু রয়েছে এবং আমরা অবশেষে ব্লকে মান = নাল বলি । তারপর সেই বস্তুটি, নাল নয়, ক্যাচ ব্লকে ফেরত দেওয়া হবে । কিন্তু একটি ফিরতি বিবৃতি অবশেষে ব্লকে সঠিকভাবে কাজ করবে । স্পষ্টতই, আপনার সহকর্মীরা রিটার্ন বিবৃতি জড়িত সামান্য বিস্ময়ের জন্য আপনাকে ধন্যবাদ জানাবে না।

void.class

এবং পরিশেষে. এই অদ্ভুত গঠন আপনি লিখতে পারেন: void.class । হুম। কেন এবং এর অর্থ কী? জাভা রিফ্লেকশন এপিআই এর সাথে জড়িত বিভিন্ন ফ্রেমওয়ার্ক এবং জটিল কেস রয়েছে যেখানে এটি খুব দরকারী হতে পারে। উদাহরণ স্বরূপ, আপনি পরীক্ষা করতে পারেন কোন পদ্ধতি কোন ধরনের রিটার্ন করে:

import java.lang.reflect.Method;

public class HelloWorld {

    public void getVoidValue() {
    }

    public static void main(String[] args) {
        for (Method method : HelloWorld.class.getDeclaredMethods()) {
            System.out.println(method.getReturnType() == void.class);
        }
    }
}
এটি পরীক্ষার কাঠামোতে দরকারী হতে পারে যেখানে আপনাকে পদ্ধতিতে প্রকৃত কোড প্রতিস্থাপন করতে হবে। কিন্তু এটি করার জন্য, আপনাকে বুঝতে হবে একটি পদ্ধতি কীভাবে আচরণ করে (অর্থাৎ এটি কী ধরনের ফিরে আসে)। উপরের কোডে মূল পদ্ধতিটি বাস্তবায়নের একটি দ্বিতীয় উপায়ও রয়েছে :

public static void main(String[] args) {
        for (Method method : HelloWorld.class.getDeclaredMethods()) {
            System.out.println(method.getReturnType() == Void.TYPE);
        }
 }
আপনি স্ট্যাক ওভারফ্লোতে উভয়ের মধ্যে পার্থক্য সম্পর্কে একটি চমত্কার আকর্ষণীয় আলোচনা পড়তে পারেন: java.lang.Void এবং void এর মধ্যে পার্থক্য কী?
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION