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

জাভা এই কিওয়ার্ড

এলোমেলো দলে প্রকাশিত
CodeGym-এ, শিক্ষার্থীদের প্রথম পাঠ থেকে আক্ষরিক অর্থে জাভা এই কীওয়ার্ডের সাথে পরিচয় করানো হয়। সময়ের সাথে সাথে এর অর্থ স্পষ্ট হয়ে ওঠে। কিন্তু পিছনে ফিরে তাকালে, অনেকে সম্ভবত নিজের কাছে স্বীকার করে যে তারা দীর্ঘদিন ধরে এই কীওয়ার্ডের জেন বুঝতে পারেনি। এই নিবন্ধটি এই কীওয়ার্ডটির গোপনীয়তার পর্দা টেনে আনবে যারা এখনও এটি করতে সক্ষম হয়নি তাদের জন্য... আমি আপনার কাছে Schildt এর জাভা রেফারেন্স পেয়েছি , তারপর 171 পৃষ্ঠায় আপনি দেখতে পারেন যে এই কীওয়ার্ডটি একটি পদ্ধতির জন্য প্রয়োজনীয় বস্তুর উল্লেখ করার জন্য যা এটিকে বলে। আমরা এটি দিয়ে পাঠ শেষ করতে পারি। কিন্তু আমরা সুনির্দিষ্ট প্রয়োজন. একটি নিয়ম হিসাবে, আপনাকে দুটি ক্ষেত্রে এটি ব্যবহার করতে হবে :
  1. যখন একটি ইনস্ট্যান্স ভেরিয়েবল এবং মেথড/কন্সট্রাক্টর ভেরিয়েবলের একই নাম থাকে;
  2. যখন আপনাকে অন্য ধরনের কনস্ট্রাক্টর থেকে একটি নির্দিষ্ট ধরনের কনস্ট্রাক্টর (উদাহরণস্বরূপ, একটি ডিফল্ট কনস্ট্রাক্টর বা প্যারামিটারাইজড কনস্ট্রাক্টর) কল করতে হবে। এটিকে একটি স্পষ্ট কনস্ট্রাক্টর কলও বলা হয়।
এবং এটি এটি সম্পর্কে - এই ভয়ঙ্কর কীওয়ার্ড ব্যবহার করা হয় যেখানে মাত্র দুটি ক্ষেত্রে আছে. এখন উদাহরণ হিসাবে এই দুটি ক্ষেত্রে তাকান.

উদাহরণ 1: একটি ইনস্ট্যান্স ভেরিয়েবল এবং মেথড ভেরিয়েবলের নাম একই।

ধরুন আমাদের একটি হিউম্যান ক্লাস আছে যা একটি নামের ক্ষেত্রকে সংজ্ঞায়িত করে: চলুন নামের ভেরিয়েবলের জন্য একটি সেটার তৈরি করি (সেটারটি সম্পূর্ণরূপে কার্যকরী - এখানে কোন ধরা নেই):

class Human {
    String name;


    public void setName(String newName) {
        name = newName;
    }
}
মনে রাখবেন যে আমরা স্ট্রিং newName-কে setName সেটার পদ্ধতিতে পাস করি আমরা একটি নতুন ভেরিয়েবল ঘোষণা করেছি এবং আমরা যা চাই তা নাম দিতে পারতাম কারণ এটি শুধুমাত্র কোঁকড়ানো বন্ধনী ({}) এর মধ্যে দৃশ্যমান হবে যা setName পদ্ধতিটি ঘেরা । মনে রাখবেন যে সেটারের একটি একক লাইন আছে:

name = newName;
এখানে আমরা newName নামে একটি নতুন ভেরিয়েবল প্রবর্তন করেছি এবং এটিকে অবজেক্টের বিদ্যমান নামের ভেরিয়েবলে বরাদ্দ করেছি। অনেক প্রোগ্রামার একটি নতুন নাম দিয়ে একটি ভেরিয়েবল প্রবর্তন করা অদ্ভুত বলে মনে করতে পারে যখন শেষ পর্যন্ত আমরা একই জিনিস সম্পর্কে কথা বলি। অর্থাৎ, আমরা মানব শ্রেণীর নামের ক্ষেত্রের কথা বলছি। এই কারণেই জাভার নির্মাতারা একই পরিবর্তনশীল নামটি সুবিধাজনকভাবে ব্যবহার করার জন্য একটি উপায় ভেবেছিলেন। অন্য কথায়, কেন একই জিনিস বোঝানো একটি পরিবর্তনশীল জন্য দুটি নাম আছে. অন্য কথায়, আমরা এরকম কিছু করতে চাই:

class Human {
    String name;


    public void setName(String name) {
        name = name;
    }
}
কিন্তু এখানে আমরা একটি সমস্যার সম্মুখীন হই । আমাদের এখন একই নামের দুটি ভেরিয়েবল আছে। একটি স্ট্রিং নাম মানব শ্রেণীর অন্তর্গত , অন্য স্ট্রিং নামটি তার সেটনাম পদ্ধতির অন্তর্গত । ফলস্বরূপ, আপনি যখন সেটারে নিম্নলিখিত লাইনটি লিখবেন তখন আপনি কোন ভেরিয়েবলের উল্লেখ করছেন তা JVM জানবে না:

name = name;
জাভা অনুমান করে আপনি সবচেয়ে কাছের নাম ভেরিয়েবলকে বোঝাচ্ছেন, অর্থাৎ সেটনাম পদ্ধতির একটি : এই কীওয়ার্ড (উদাহরণ সহ) - 3সুতরাং দেখা যাচ্ছে যে আপনি কেবলমাত্র পদ্ধতির নাম পরিবর্তনশীলটিকে নিজের জন্য নির্ধারণ করছেন। যেটা অবশ্যই কোন মানে হয় না. তাই, সেটনাম পদ্ধতিতে নামের ভেরিয়েবল থেকে মানব শ্রেণীর নাম ভেরিয়েবলকে আলাদা করার জন্য ভাষার কিছু উপায় প্রয়োজন । এই সমস্যাটি এই কীওয়ার্ডটি প্রবর্তন করে সমাধান করা হয়েছিল , যা এই ক্ষেত্রে নির্দেশ করে যে আপনি হিউম্যান ক্লাসের একটি উদাহরণের সাথে সম্পর্কিত ভেরিয়েবলটি উল্লেখ করতে চান , পদ্ধতিতে পরিবর্তনশীল নয়: অন্য কথায়, এটিএই কীওয়ার্ড (উদাহরণ সহ) - 4কলিং অবজেক্টকে বোঝায়, যেমনটি আমরা নিবন্ধের শুরুতে উল্লেখ করেছি। ফলস্বরূপ, setName পদ্ধতিটি তৈরি করা বস্তুতে ব্যক্তির নাম সেট করে। নিচে এই কিওয়ার্ড ব্যবহার না করেই প্রোগ্রামের কোড দেওয়া হল । কোডটি একটি মানব বস্তু তৈরি করে এবং এটিকে একটি নাম বরাদ্দ করে: এবং এখানে এইএই কীওয়ার্ড (উদাহরণ সহ) - 5 কীওয়ার্ডটির কোড রয়েছে :

public class Solution {
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Vinny");
        human1.print();
    }
}
class Human {
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    void print() {
        System.out.println(name);
    }
}
সুতরাং, এটি আমাদের একই জিনিস বোঝাতে নতুন ভেরিয়েবল প্রবর্তন এড়াতে দেয়, কোডটিকে পরিষ্কার করে এবং অতিরিক্ত ভেরিয়েবলের সাথে কম বিশৃঙ্খল করে তোলে।

উদাহরণ 2: একটি স্পষ্ট কনস্ট্রাক্টর কলের জন্য এটি ব্যবহার করা

এক কনস্ট্রাক্টর থেকে অন্য কনস্ট্রাক্টরকে কল করা কার্যকর হতে পারে যখন আপনার (অদ্ভুতভাবে যথেষ্ট) একাধিক কনস্ট্রাক্টর থাকে এবং আপনি নতুন কনস্ট্রাক্টরকে আগে অন্য কনস্ট্রাক্টরে লেখা ইনিশিয়ালাইজেশন কোড ডুপ্লিকেট করতে চান না। বিভ্রান্ত? এটি এতটা ভীতিকর নয় যতটা মনে হয়। নিচের কোডটি দেখুন। মানব শ্রেণীর জন্য এটির দুটি কনস্ট্রাক্টর রয়েছে :

class Human {
    int age;
    int weight;
    int height;

    Human(int age, int weight) {
        this.age = age;
        this.weight = weight;
    }
    Human(int age, int weight, int height) {
        // Call the constructor with two parameters
        this(age, weight);
        // and then initialize the missing variable
        this.height = height;
    }
}
এখানে আমরা প্রথমে দুটি প্যারামিটার সহ একটি কনস্ট্রাক্টর প্রদান করেছি: int বয়স এবং int ওজন । ধরুন এটির কোডের দুটি লাইন রয়েছে:

this.age = age;
this.weight = weight;
পরবর্তীতে আমরা বর্তমান বয়স এবং ওজনের পরামিতিগুলিতে উচ্চতা যোগ করে তিনটি প্যারামিটার সহ আরেকটি কনস্ট্রাক্টর যোগ করার সিদ্ধান্ত নিই। আপনি এই মত নতুন কনস্ট্রাক্টর লিখতে পারেন:

this.age = age;
this.weight = weight;
this.height = height;
কিন্তু এই কনস্ট্রাক্টরে বিদ্যমান কোডের পুনরাবৃত্তি করার পরিবর্তে, আপনি দুটি প্যারামিটার সহ কনস্ট্রাক্টরকে স্পষ্টভাবে কল করতে এই কীওয়ার্ডটি ব্যবহার করতে পারেন:

this(age, weight);
// and then initialize the missing variable:
this.height = height;
এটা যেন আমরা তিন-প্যারামিটার কনস্ট্রাক্টরকে বলছি:
  • এই অন্য কনস্ট্রাক্টরকে কল করুন যার দুটি প্যারামিটার রয়েছে
  • এবং তারপর অন্য পরিবর্তনশীল যোগ করুন.
এটাই সব =)। অবশেষে, আমরা লক্ষ্য করি যে জাভাতে এই কীওয়ার্ডটি শুধুমাত্র মেথড এবং কনস্ট্রাক্টরগুলিতে ব্যবহৃত হয়। কিন্তু এটি সমস্ত নন-স্ট্যাটিক পদ্ধতিতে অন্তর্নিহিতভাবে পাস করা হয় (তাই এটিকে প্রায়শই একটি অন্তর্নিহিত পরামিতি বলা হয়) এবং পদ্ধতিটি বলা বস্তুটিকে উল্লেখ করতে ব্যবহার করা যেতে পারে। এই কীওয়ার্ড থেকে ভয় পাবেন না, কারণ এটি ভীতিকর নয়।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION