লোকাল এবং গ্লোবাল ভেরিয়েবলের মধ্যে পার্থক্য

একটি পরিবর্তনশীল কি?

ভেরিয়েবল একটি স্টোরেজ এলাকায় একটি নাম বরাদ্দ করা হয় যা প্রোগ্রামটি ম্যানিপুলেট করতে পারে। একটি ভেরিয়েবল টাইপ ভেরিয়েবলের মেমরির আকার এবং বিন্যাস নির্ধারণ করে।

এটি সেই মানগুলির পরিসরও নির্ধারণ করে যা সেই মেমরির ভিতরে সংরক্ষণ করা প্রয়োজন এবং অপারেশনের প্রকৃতি যা সেই ভেরিয়েবলে প্রয়োগ করা যেতে পারে।

এই টিউটোরিয়ালে, আপনি শিখবেন

ভেরিয়েবলের সুযোগ

ভেরিয়েবলের সুযোগ কেবল একটি ভেরিয়েবলের জীবনকাল। এটি কোডের ব্লক যার অধীনে একটি পরিবর্তনশীল প্রযোজ্য বা জীবিত। উদাহরণস্বরূপ: | _+_ |

আপনি একটি ফাংশন 'foo' এর ভিতরে একটি পরিবর্তনশীল 'x' ঘোষণা করেন। সেই ভেরিয়েবলের ব্যাপ্তি সেই ফাংশনের ভিতরেই থাকে এটা সেই ফাংশনের বাইরে ব্যবহার করা যাবে না।

তিনটি জায়গা আছে যেখানে আপনি পরিবর্তনশীল প্রোগ্রামিং ভাষা ঘোষণা করতে পারেন:

  • একটি ফাংশন বা একটি ব্লকের ভিতরে: স্থানীয় ভেরিয়েবল
  • সমস্ত ফাংশনের বাইরে: গ্লোবাল ভেরিয়েবল
  • ফাংশন পরামিতি সংজ্ঞায়: আনুষ্ঠানিক পরামিতি

মূল পার্থক্য

  • লোকাল ভেরিয়েবল একটি ফাংশনের ভিতরে ঘোষিত হয় যেখানে গ্লোবাল ভেরিয়েবল ফাংশনের বাইরে ঘোষিত হয়।
  • লোকাল ভেরিয়েবল তৈরি করা হয় যখন ফাংশনটি এক্সিকিউশন শুরু করে এবং ফাংশনটি বন্ধ হয়ে গেলে হারিয়ে যায়, অন্যদিকে, গ্লোবাল ভেরিয়েবল তৈরি করা হয় যেমন এক্সিকিউশন শুরু হয় এবং প্রোগ্রাম শেষ হলে হারিয়ে যায়।
  • লোকাল ভেরিয়েবল ডেটা শেয়ারিং প্রদান করে না যেখানে গ্লোবাল ভেরিয়েবল ডেটা শেয়ারিং প্রদান করে।
  • স্থানীয় ভেরিয়েবলগুলি স্ট্যাকের মধ্যে সংরক্ষণ করা হয় যেখানে গ্লোবাল ভেরিয়েবল সংকলক দ্বারা নির্ধারিত একটি নির্দিষ্ট স্থানে সংরক্ষণ করা হয়।
  • স্থানীয় ভেরিয়েবলের জন্য প্যারামিটার পাস করা প্রয়োজন যেখানে গ্লোবাল ভেরিয়েবলের জন্য এটি প্রয়োজনীয় নয়

স্থানীয় পরিবর্তনশীল

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

লোকাল ভেরিয়েবলের উদাহরণ

function foo(){ var x; } 

এখানে, 'a' এবং 'b' হল স্থানীয় ভেরিয়েবল

গ্লোবাল ভেরিয়েবল

প্রতি গ্লোবাল ভেরিয়েবল প্রোগ্রামে সাবরুটিন বা ফাংশনের বাইরে সংজ্ঞায়িত একটি পরিবর্তনশীল। এটির একটি বৈশ্বিক সুযোগ রয়েছে যার অর্থ এটি প্রোগ্রামের জীবদ্দশায় তার মূল্য ধরে রাখে। অতএব, এটি প্রোগ্রামের মধ্যে সংজ্ঞায়িত যে কোনও ফাংশন দ্বারা পুরো প্রোগ্রাম জুড়ে অ্যাক্সেস করা যেতে পারে, যদি না এটি ছায়াযুক্ত হয়।

উদাহরণ: | _+_ |

এখানে, 'a' এবং 'b' হল বৈশ্বিক পরিবর্তনশীল।

স্থানীয় পরিবর্তনশীল বনাম। গ্লোবাল ভেরিয়েবলস

এখানে, স্থানীয় এবং গ্লোবাল ভেরিয়েবলের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে।

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

গ্লোবাল ভেরিয়েবল ব্যবহারের সুবিধা

  • আপনি একটি প্রোগ্রামের সমস্ত ফাংশন বা মডিউল থেকে গ্লোবাল ভেরিয়েবল অ্যাক্সেস করতে পারেন
  • আপনাকে শুধুমাত্র মডিউলের বাইরে গ্লোবাল ভেরিয়েবল একক সময় ঘোষণা করতে হবে।
  • এটি আদর্শভাবে 'ধ্রুবক' সংরক্ষণের জন্য ব্যবহৃত হয় কারণ এটি আপনাকে ধারাবাহিকতা বজায় রাখতে সাহায্য করে।
  • একটি গ্লোবাল ভেরিয়েবল উপকারী যখন একাধিক ফাংশন একই ডেটা অ্যাক্সেস করছে।

লোকাল ভেরিয়েবল ব্যবহারের সুবিধা

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

গ্লোবাল ভেরিয়েবল ব্যবহারের অসুবিধা

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

লোকাল ভেরিয়েবল ব্যবহারের অসুবিধা

  • স্থানীয় ভেরিয়েবলের ডিবাগিং প্রক্রিয়াটি বেশ চতুর।
  • মডিউলগুলির মধ্যে ডেটা ভাগ করা সম্ভব নয় বলে বারবার পাস করার জন্য সাধারণ ডেটা প্রয়োজন।
  • তাদের সুযোগ খুবই সীমিত।

কি আরো দরকারী?

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