স্থানীয় ভেরিয়েবল

"শুভেচ্ছা, আমার প্রিয় ছাত্র! ভেরিয়েবল সম্পর্কে একটু বেশি সিরিয়াস হওয়ার সময় এসেছে৷ কিন্তু এবার আমরা তাদের অভ্যন্তরীণ কাঠামো নিয়ে আলোচনা করব না৷ পরিবর্তে, আমরা কীভাবে ভেরিয়েবলগুলি যেখানে অবস্থিত সেই কোডের সাথে ইন্টারঅ্যাক্ট করে তার উপর ফোকাস করব৷

"পদ্ধতির ভিতরে ঘোষিত সমস্ত ভেরিয়েবলকে স্থানীয় ভেরিয়েবল বলা হয় । একটি স্থানীয় ভেরিয়েবল শুধুমাত্র কোডের ব্লকে বিদ্যমান থাকে যেখানে এটি ঘোষণা করা হয়। অথবা, আরও সুনির্দিষ্টভাবে বলতে গেলে, এটি ঘোষিত হওয়ার মুহুর্ত থেকে ব্লকের শেষ পর্যন্ত এটি বিদ্যমান থাকে। কোড যেখানে এটি ঘোষণা করা হয়।"

"স্পষ্টভাবে, আমার একটি উদাহরণ দরকার।"

"কোন সমস্যা নেই। এই নিন:

কোড পরিবর্তনশীল প্রাপ্যতা
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}


a
a
a
a, b
a, b
a, b
a, b, x
a, b, x
a, b
a, b
a
a

"আসুন স্থানীয় ভেরিয়েবল অ্যাক্সেস করার নিয়মগুলি আরও একবার দেখে নেওয়া যাক। এখানে কোডের একটি ব্লক রয়েছে। এর শুরু এবং শেষ কী চিহ্নিত করে?"

"কোঁকড়া ধনুর্বন্ধনী?"

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

"এটি শুধুমাত্র লুপের শরীরে বিদ্যমান থাকবে।"

"এটা ঠিক। আরও কি, এটি লুপের প্রতিটি পুনরাবৃত্তিতে তৈরি এবং ধ্বংস হবে।"

"এর মানে হল যে আপনি একটি পদ্ধতিতে একই নামের দুটি স্থানীয় ভেরিয়েবল ঘোষণা করতে পারবেন না — প্রোগ্রামটি কম্পাইল করবে না। কিন্তু আপনি এটি করতে পারেন যদি কোডের ব্লক যেখানে ভেরিয়েবল ঘোষণা করা হয় ওভারল্যাপ না হয়। "

"আপনি আমার প্রিয় হওয়ার একটি কারণ আছে, অ্যামিগো। আপনার মস্তিষ্কে এটি শক্ত করার জন্য আরও একটি উদাহরণ নিন।

কোড পরিবর্তনশীল দৃশ্যমানতা
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     System.out.println(b);
   }

   if (a < 20)
   {
     int b = 20;
     System.out.println(b);
   }
}


a
a
a
a, b
a, b
a
a
a
a
a, b
a, b
a

"আমরা শুধুমাত্র একটি দ্বিতীয় স্থানীয় ভেরিয়েবল ঘোষণা করতে সক্ষম হয়েছি bকারণ প্রথম bভেরিয়েবলটি কোড ব্লকে দৃশ্যমান নয় যেখানে দ্বিতীয় bভেরিয়েবলটি ঘোষণা করা হয়েছে৷

পরামিতি

"যেমন আমরা আগে বলেছি, প্রতিটি পদ্ধতিতে ভেরিয়েবল থাকতে পারে যেগুলিকে আমরা প্যারামিটার বলি৷ তাদের দৃশ্যমানতা এবং জীবনকাল সম্পর্কে কী?"

"হুম... আমি হতবাক..."

"এখানে সবকিছুই বেশ সহজ। যখন এক্সিকিউশন পদ্ধতিতে প্রবেশ করে (অর্থাৎ যখন পদ্ধতির কোডটি কার্যকর করা শুরু হয়) তখন প্যারামিটার তৈরি করা হয়। পদ্ধতিটি শেষ হলে সেগুলি বাদ দেওয়া হয়।"

"অন্য কথায়, তারা পদ্ধতির পুরো শরীরে দৃশ্যমান এবং শুধুমাত্র সেখানে?"

"হ্যাঁ। উদাহরণ:

কোড পরিবর্তনশীল দৃশ্যমানতা
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}

args
args, a
args, a
args, a
args, a, b
args, a, b
args, a, b
args, a, b, x
args, a, b, x
args, a, b
args, a, b
args, a
args, a

"যেমন আমরা আগে বলেছি, argsএটি একটি ভেরিয়েবল যার ধরন হল স্ট্রিংগুলির একটি অ্যারে। এবং সমস্ত প্যারামিটারের মতো, এটি পদ্ধতির মূল অংশের মধ্যে সর্বত্র উপলব্ধ। এটি বলেছিল, আমরা সাধারণত আমাদের উদাহরণগুলিতে এটি উপেক্ষা করি।

একটি ক্লাসে ভেরিয়েবল

"লেভেল 1-এর পাঠগুলি মনে রাখবেন, যেখানে আমরা বলেছিলাম যে একটি ক্লাসে পদ্ধতি এবং ভেরিয়েবল থাকতে পারে৷ পদ্ধতিগুলিকে কখনও কখনও ইনস্ট্যান্স মেথড এবং ভেরিয়েবল - ইনস্ট্যান্স ভেরিয়েবল বা ক্ষেত্র বলা হয়৷

"একটি শ্রেণীর ভেরিয়েবল (বা ক্ষেত্র) কি ?

এগুলি ভেরিয়েবল যা একটি পদ্ধতিতে নয়, একটি শ্রেণিতে ঘোষণা করা হয়।"

"এবং তারা কি জন্য আছে?"

"শুরু করার জন্য, এগুলি একটি ক্লাসের যেকোনো (অ-স্থির) পদ্ধতি থেকে অ্যাক্সেস করা যেতে পারে। মোটামুটিভাবে বলতে গেলে, ইনস্ট্যান্স ভেরিয়েবল হল ভেরিয়েবল যা একটি ক্লাসের সমস্ত পদ্ধতি দ্বারা ভাগ করা হয়।

উদাহরণ:

কোড পরিবর্তনশীল দৃশ্যমানতা
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     count++;
   }

   public void remove(int data)
   {
     sum = sum - data;
     count--;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum

"এই উদাহরণে, আমাদের দুটি পদ্ধতি আছে - add()এবং remove(). পদ্ধতিটি এবং ইনস্ট্যান্স ভেরিয়েবলকে add()বৃদ্ধি করে এবং পদ্ধতিটি এবং ভেরিয়েবলকে হ্রাস করে। উভয় পদ্ধতিই শেয়ার্ড ইনস্ট্যান্স ভেরিয়েবলে কাজ করে।"sumcountremove()sumcount

"আমি সব বুঝি! একটি পদ্ধতি কার্যকর করার সময় স্থানীয় ভেরিয়েবল বিদ্যমান। একটি ক্লাসের ইনস্ট্যান্স ভেরিয়েবল একটি ক্লাসের একটি বস্তুর মধ্যে বিদ্যমান যতক্ষণ পর্যন্ত সেই বস্তুটি বিদ্যমান থাকে।"

"ভাল হয়েছে, অ্যামিগো। আমরা কিছু ভিত্তি তৈরি করেছি, এবং আপনি পরবর্তী স্তরে একটি ক্লাসের বস্তু সম্পর্কে বিস্তারিত জানতে পারবেন।

স্ট্যাটিক ভেরিয়েবল

"পদ্ধতির মতো, একটি ক্লাসের ভেরিয়েবলগুলি স্ট্যাটিক বা অ-স্ট্যাটিক হতে পারে। স্ট্যাটিক পদ্ধতিগুলি শুধুমাত্র স্ট্যাটিক ভেরিয়েবল অ্যাক্সেস করতে পারে।

"আমার এখনও স্ট্যাটিক ভেরিয়েবলের স্পষ্ট বোঝাপড়া নেই।"

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

"একটি স্ট্যাটিক ভেরিয়েবল (ক্লাস ভেরিয়েবল) তৈরি করতে, আপনাকে অবশ্যই staticএর ঘোষণায় কীওয়ার্ড লিখতে হবে।

"স্ট্যাটিক ভেরিয়েবলগুলি যে ক্লাসে ঘোষণা করা হয়েছে তার কোনও অবজেক্ট বা উদাহরণের সাথে আবদ্ধ নয়৷ পরিবর্তে, সেগুলি ক্লাসেরই অন্তর্গত৷ তাই ক্লাসের একটিও অবজেক্ট তৈরি না হলেও তারা বিদ্যমান থাকে ৷ আপনি উল্লেখ করতে পারেন অন্যান্য ক্লাস থেকে তাদের একটি গঠন ব্যবহার করে:

ClassName.variableName

উদাহরণ:

কোড পরিবর্তনশীল দৃশ্যমানতা
public class Solution
{
   public void add(int data)
   {
     Storage.sum = Storage.sum + data;
     Storage.count++;
   }

   public void remove(int data)
   {
     Storage.sum = Storage.sum - data;
     Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}

Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum



Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum

"উপরের উদাহরণে, আমরা একটি পৃথক Storageক্লাস তৈরি করেছি, এতে countএবং ভেরিয়েবলগুলিকে স্থানান্তরিত করেছি এবং তাদের স্ট্যাটিক ঘোষণা করেছি । একটি প্রোগ্রামের যেকোনো পদ্ধতি থেকে পাবলিক স্ট্যাটিক ভেরিয়েবল অ্যাক্সেস করা যেতে পারে (এবং শুধুমাত্র একটি পদ্ধতি থেকে নয়)।"sum

"আমি পুরোপুরি বুঝতে পারছি না, তবে এটি আমার কাছে সুবিধাজনক বলে মনে হচ্ছে।"

"তাই তাই। এবং কখনও কখনও এটি প্রয়োজনীয়। স্ট্যাটিক ভেরিয়েবল এবং পদ্ধতি ছাড়া আমরা আটকে থাকব।"

"আশা করি, আমি ধীরে ধীরে এটি বের করতে সক্ষম হব।"

"হ্যাঁ, অবশ্যই করবেন।"