Monday, February 8, 2016

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


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

আজ আমরা জানবো গ্লোবাল ভ্যারিয়েবল সম্বন্ধে।
গত পর্বে যেহুতু আমরা লোকাল ভ্যারিয়েবল সম্পর্কে জেনেছি,সেহেতু আমাদের জন্যে এ পর্বে গ্লোবাল ভ্যারিয়েবল সম্পর্কে জানতে গিয়ে আশা করি বেগ পেতে হবে না।
শুরুতেই একটি গল্প বলি।
আমার এলাকার এক ছেলে আছে। অনেক ভালো ক্রিকেট খেলে। এলাকার সবাই তাকে চিনে।ছেলেটার নাম সাকিব আল হাসান।
ধরো,তোমার এলাকার এক ছেলে সাকিব আল হাসানের মতো বেশ বড়মাপের ক্রিকেটার।ধরেই নাও যে মাশরাফি বিন মর্তুজার বাড়ি তোমাদের এলাকায়। মাশরাফিকে তোমাদের এলাকার সবাই চিনে।
আচ্ছা,সাকিব আল হাসান আমার এলাকার লোক হলেও তুমি কিন্তু সাকিব আল হাসানকে ঠিকই চিনো। আবার মাশরাফি বিন মর্তুজা তোমার এলাকার লোক হলেও আমি কিন্তু মাশরাফিকে চিনি। অর্থাৎ,মাশরাফি এবং সাকিব দুজনেই লোকাল হিরো হওয়ার সাথে সাথে ন্যাশনাল হিরোও কিন্তু।এদের দুজনকেই সবাই চিনে ফেলেছে।
আমাদের প্রোগ্রামিংয়ে এরকম একটা ভ্যারিয়েবল আছে যাকে সবাই চেনে। তুমি তাকে যেখানে খুশি ব্যবহার করতে পারবে,কারণ কম্পাইলার তাকে সব জায়গাতেই চিনবে।সাকিব এবং মাশরাফির কথা যেখানেই বলা হোক,সবাই চিনবে। আমাদের গ্লোবাল ভ্যারিয়েবলও ঠিক এরকম।কম্পাইলার যেকোনো ভ্যালিড ডিক্লেয়ারেশনেই তাকে চিনে নেই।
গ্লোবাল ভ্যারিয়েবল এর শর্টকাট সংজ্ঞা আমরা এভাবে দিতে পারি যে,যে ভ্যারিয়েবলকে আমরা সকল ফাংশন থেকেই একসেস করতে পারি তাকে গ্লোবাল ভ্যারিয়েবল বলে।
গ্লোবাল ভ্যারিয়েবলকে সাধারণত সব ফাংশনের উপরে ডিক্লেয়ার করা হয়।কারণ,কোনো ভ্যারিয়েবলকে যখন গ্লোবালি ডিক্লেয়ার করবে,ভ্যারিয়েবলটি তার নিচের সকল ফাংশন থেকেই একসেস করা যাবে শুধু। তবে,তোমার প্রোগ্রামের সুবিধার্তে তুমি এটা যেকোনো ফাংশনের বাইরেই ডিক্লেয়ার করতে পারো।
নিচের কোড দেখে নাওঃ
#include<stdio.h>
int sum=0;          ///global variable
int  main()
{
       int a=10,b=30;                            ///local variable
       sum=a+b;                                      ///sum গ্লোবাল ভ্যারিয়েবল হওয়ায় কম্পাইলার তাকে চিনতেছে
       printf(“sum=%d\n”,sum);
     return 0;
}
এই প্রোগ্রামের আউটপুট হবে 
 sum=40

আশা করি গ্লোবাল ভ্যারিয়েবল সম্পর্কে কিছুটা হলেও ধারণা এসেছে।
গ্লোবাল ভ্যারিয়েবল সম্পর্কিত কিছু সাধারণ বিষয়ের উত্তরঃ

১।ভাইয়া,আমি যখন গ্লোবাল ভ্যারিয়েবলকে ডিক্লেয়ার করি তখন গ্লোবাল ভ্যারিয়েবলের ইনিশিয়াল ভ্যালু কত থাকে?? 

উওর হচ্ছে,ভাইয়া,গ্লোবাল ভ্যারিয়েবলের ইনিশিয়াল ভ্যালু জিরো থাকে।যদিও লোকাল ভ্যারিয়েবলের ক্ষেত্রে তুমি একটা গার্বেজ ভ্যালু পাবে(উল্টাপাল্টা ভ্যালু আর কি)।
নিচের কোড দেখলে আরো ক্লিয়ার হবেঃ
#include<stdio.h>
int sum;                                    ///global variable [ ইনিশিয়ালি sum এঁর ভেতর কিছু অ্যাসাইন করা হয়নি ]
int main()
{
   printf(“kono value assign korar age sum er maan holo %d\n”,sum);
         int a;                                   ///local variable [  ইনিশিয়ালি a তে কিছুই অ্যাসাইন করা হয় নাই ]
        printf(“ ’a’ te kono kichu assign korar age local variable ‘a’ er maan holo %d \n”,a);
   return 0;
} 
আউটপুটে sum এর মান হবে 0
কিন্তু a এর মান হিসেবে উল্টাপাল্টা একটা ভ্যালু প্রিন্ট হয়েছে।
বিভিন্ন Data Type এর জন্যে গ্লোবাল ভ্যারিয়েবলের ইনিশিয়াল ভ্যালু হল


Data Type
Initializer
int
0
float
0
double
0
char
‘\0’
pointer
NULL








২।ভাইয়া,আমি যদি লোকাল এবং গ্লোবাল ভ্যারিয়েবল দুইটাকেই একই নামে ডিক্লেয়ার করি তবে কি হবে??

উত্তর হলো,লোকাল এবং গ্লোবাল ভ্যারিয়েবল দুইটাই যদি একই নামে ডিক্লেয়ার করা হয়,তবে কম্পাইলার লোকাল ভ্যারিয়েবলের হয়ে কাজ করবে।নিচের প্রোগ্রামটার দিকে খেয়াল করোঃ
#include<stdio.h>
int sum=100;                                  /// global variable
int main()
{
      int a=10,b=20,sum;               ///local variable[ sum এখানেও ডিক্লেয়ার করা হয়েছে,এখানে sum লোকাল ভ্যারিয়েবল]
  sum=a+b;
  printf(“sum er maan holo %d\n”,sum);
  return 0;
}
আউটপুট হবে------
sum er maan holo 30
খেয়াল করে দেখো,sum নামে লোকাল ভ্যারিয়েবল এবং গ্লোবাল ভ্যারিয়েবল ডিক্লেয়ার করা হলেও sum এর মান হিসেবে আমরা লোকাল ভ্যারিয়েবলের মানকেই পেয়েছি।গ্লোবাল ভ্যারিয়েবলের মান ছিলো ১০০।কিন্তু আমরা sum এর মান পেয়েছি 30, সেটা লোকাল ভ্যারিয়েবলের মান ৩০
***মনের ভেতর উঁকি দিয়ে ওঠা আর একটি প্রশ্নের উওরঃ

গ্লোবাল ভ্যারিয়েবল সবসময় আপডেটেড ভ্যালু ক্যারি করে। ধরো,main() ফাংশনে তোমার গ্লোবাল ভ্যারিয়েবলে অ্যাসাইন করা হয়েছিলো ৫০।গ্লোবাল ভ্যারিয়েবলের ভেতর কোনো কিছু যতক্ষণ না অ্যাসাইন না করবো ততক্ষণ গ্লোবাল ভ্যারিয়েবলের মান কিন্তু ৫০ই থাকবে। ধরো,main() থেকে কল করা কোনো ফাংশনের ভেতর ঐ গ্লোবাল ভ্যারিয়েবলটির ভেতর ৩০ অ্যাসাইন করা হলো। এবার বলো তো,ঐ গ্লোবাল ভ্যারিয়েবলটির মান কত এখন?? এখন,ঐ গ্লোবাল ভ্যারিয়েবলটির মান হলো ৩০।কারণ,গ্লোবাল ভ্যারিয়েবল সবসময় তার ভেতর অ্যাসাইন করা ইমিডিয়েট ভ্যালুটা ক্যারি করে।
***গ্লোবাল ভ্যারিয়েবলের লাইফটাইম প্রোগ্রামটি এক্সিট হওয়ার পূর্ব পর্যন্ত।তবে লোকাল ভ্যারিয়েবল ঠিক ততক্ষণই মেমোরিতে জায়গা অ্যালোকেট করে থাকে,যতক্ষণ কম্পাইলার লোকাল ভ্যারিয়েবলের এলাকার মধ্যে থাকে। প্রোগ্রামিংয়ে এই এলাকা/অঞ্চলকে বলা হয় scopeঅর্থাৎ,লোকাল ভ্যারিয়েবলের scope হলো একটি নির্দিষ্ট এলাকা/ব্লক,আর গ্লোবাল ভ্যারিয়েবলের scope হলো গ্লোবাল ভ্যারিয়েবলটি ডিক্লেয়ারেশনের পরের সব ফাংশন। যখন প্রোগ্রামটির সব কাজ শেষে main ফাংশন থেকে আমরা রিটার্ন করি,তার ঠিক আগ পর্যন্ত গ্লোবাল ভ্যরিয়েবল মেমোরিতে জায়গা অ্যালোকেট করে থাকে। এজন্যেই,গ্লোবাল ভ্যারিয়েবলের লাইফটাইম পুরো প্রোগ্রামটি এক্সিকিউশনের সমান সময়,আর লোকাল ভ্যারিয়েবলের লাইফটাইম নির্দিষ্ট ব্লক/এলাকা পর্যন্ত।
এই ছিলো গ্লোবাল ভ্যারিয়েবল সম্পর্কিত আজকের পর্ব।লোকাল ভ্যারিয়েবল সম্মন্ধে পড়ুন এখানে

No comments:

Post a Comment