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

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

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

সরলতার জন্য, আসুন একটি উদাহরণ বিবেচনা করা যাক:

কোড পরিবর্তনশীল দৃশ্যমানতা
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ভেরিয়েবল ঘোষণা করা হয়েছে।


2. পরামিতি

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

এটা সব সোজা. প্যারামিটার তৈরি করা হয় যখন এক্সিকিউশন পদ্ধতিতে প্রবেশ করে (অর্থাৎ যখন পদ্ধতির কোড কার্যকর করা শুরু হয়)। পদ্ধতি শেষ হলে তারা নির্মূল করা হয়। তারা পদ্ধতির শরীর জুড়ে দৃশ্যমান।

উদাহরণ:

কোড পরিবর্তনশীল দৃশ্যমানতা
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শুধুমাত্র একটি পরিবর্তনশীল যার টাইপ হল স্ট্রিং এর একটি অ্যারে। এবং সমস্ত পরামিতিগুলির মতো, এটি পদ্ধতির শরীরের মধ্যে সর্বত্র উপলব্ধ। এটি বলেছিল, আমরা সাধারণত আমাদের উদাহরণগুলিতে এটি উপেক্ষা করি।



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

আপনি লেভেল 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

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


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

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

লেভেল 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 ভেরিয়েবলগুলিকে এতে স্থানান্তরিত করেছি এবং তাদের স্ট্যাটিক ঘোষণা করেছি । পাবলিক স্ট্যাটিক ভেরিয়েবলগুলি একটি প্রোগ্রামের যেকোনো পদ্ধতি থেকে অ্যাক্সেস করা যেতে পারে (এবং শুধুমাত্র একটি পদ্ধতি থেকে নয়)।