C এর উপাদান সমূহঃ ভ্যারিয়েবল

C প্রোগ্রামিং কে যদি রান্না বান্নার সাথে তুলনা করি তাহলে ভ্যারিয়েবল আর ফাংশন হল বাটি, কড়াই, চুলা এইসব।

ভ্যারিয়েবল প্রায় আক্ষরিক অর্থেই বাটির মত। বাটিতে যেমন কিছু রাখা যায়, ঠিক তেমনি ভ্যারিয়েবল এও কোন না কোন ডেটা রাখা যায়।

"ডেটা জমা রাখা এবং প্রয়োজনের সময় সেই ডেটা ব্যবহারের জন্য সরবরাহ করাই ভ্যারিয়েবল এর কাজ"।

ভ্যারিয়েবল এর কিছু বৈশিষ্ট্য নিম্নরূপঃ

* ভ্যারিয়েবল এর একটা নাম থাকতে হয়। নাম করনের উদ্দেশ্য হল, কোন ডেটা কোন ভ্যারিয়েবল এ আছে তা বুঝানো। ভ্যারিয়েবল এর নাম করনের কিছু নিয়ম আছে যা সামনে আলোচনা করা হবে। এখন এইটুকুই জেনে রাখা হোক যে ভ্যারিয়েবল এর নাম থাকা আবশ্যক।

* ভ্যারিয়েবল এর একটা ডেটা টাইপ থাকতে হয়। কমন সেন্স ব্যবহার করলেই এইটা বোঝা যায়। চুলায় পানি গরম করার জন্য যেমন প্লাস্টিকের বাটি ব্যবহার যায় না, ঠিক তেমনি এক ডেটা টাইপের ভ্যারিয়েবলে অন্য ডেটা টাইপ নিয়ে কাজ করা যায় না। যে ডেটা টাইপের ডেটা নিয়ে কাজ করতে হবে, সেই ডেটা টাইপের ভ্যারিয়েবল ডিক্লেয়ার করতে হবে।

* ভ্যারিয়েবল ডিক্লেয়ার ও ডিফাইন করার পর ভ্যারিয়েবলটির জন্য মেমরিতে একটি জায়গা নির্ধারণ করে দেওয়া হয়, যে জায়গায় ডেটা টাইপ অনুযায়ী ডেটা জমা রাখা যায়।

* যে ব্লকে কোন ভ্যারিয়েবল কে ডিক্লেয়ার করা হয় সেই ব্লক ও তার অধীনস্থ ব্লক গুলোকে ঐ ভ্যারিয়েবল এর স্কোপ বলা হয়। স্কোপের বাইরে ভ্যারিয়েবল কাজ করতে পারে না। যদি কখনো কোন প্রোগ্রামের কোড এক্সেকিউশনের সময় কোন ভ্যারিয়েবল স্কোপের বাইরে চলে যায় তাহলে সেই ভ্যারিয়েবল তাতে জমা রাখা ডেটা হারিয়ে ফেলে।

* কম্পিউটার এর মেমরিতে প্রত্যেকটি বাইট (byte) এর একটি ঠিকানা থাকে, যাকে মেমরি এড্রেস বলে। যেহেতু ডিক্লেয়ারেশন এর পরে ভ্যারিয়েবল এর জন্য মেমরিতে জায়গা নির্ধারণ করা হয় তাই সেই জায়গারও একটি ঠিকানা বা মেমরি এড্রেস থাকবে। কোন ভ্যারিয়েবল এর জন্য নির্ধারিত স্থান এর ঠিকানাকে সেই ভ্যারিয়েবল এর মেমরি এড্রেস বলে। ভ্যারিয়েবল এর নামে আগে '&' চিহ্নটি ব্যবহার করে ভ্যারিয়েবল এর মেমরি এড্রেস বুঝানো হয়। যেমন: ধরা যাক number একটি ইন্টিজার টাইপের ভ্যারিয়েবল। কাজেই কম্পিউটার মেমরিতে এই ভ্যারিয়েবল এর ঠিকানা হবে &number।

* ভ্যারিয়েবল এর ধরন নির্ধারণ করা একটু কঠিন। কারন এর সর্বজন স্বীকৃত কোন প্রকারভেদ নাই। তবে শেখার সুবিধার জন্য নিচের শ্রেণীবিভাগ মনে রাখা যেতে পারে:

১. একক সাধারণ ভ্যারিয়েবলঃ মৌলিক ডেটা টাইপ দিয়ে ডিক্লেয়ার করা একক ভ্যারিয়েবল সমূহ।

২. সাধারণ ভ্যারিয়েবল এর সমাবেশঃ মৌলিক ডেটা টাইপ দিয়ে ডিক্লেয়ার করা array

৩. বিশেষ একক ভ্যারিয়েবলঃ পয়েন্টার ভ্যারিয়েবল

৪. বিশেষ ভ্যারিয়েবল এর সমাবেশঃ পয়েন্টার array, স্ট্রাকচার ভ্যারিয়েবল, ইউনিয়ন

কম্পিউটার এ যে কোন ডেটাই কম্পিউটার এর মেমরির একটি নির্দিষ্ট ঠিকানায় থাকে। ডেটার ধরণ যাই হোক না কেন ঠিকানাটি সব সময়ই একটি সংখ্যা। অনেক সময় এটি অনেক বড় একটি সংখ্যা। তাই এটি মনে রাখা ও ব্যবহার করা বেশ অসুবিধাজনক। সেই জন্যেই ভ্যারিয়েবল ব্যবহার করা হয়।

ভ্যারিয়েবল হচ্ছে কম্পিউটার এর মেমরিতে একটি নির্দিষ্ট স্থানের নাম যেখানে আমরা কোন ডেটা জমা রাখতে পারি। অর্থাৎ,
** ভ্যারিয়েবল হচ্ছে একটি নাম
** ভ্যারিয়েবল এ ডেটা জমা রাখা যায়।

যেহেতু ভ্যারিয়েবল একটি নাম, সেহেতু এর নাম করনের কিছু নিয়ম কানুন আছে। কিছু নিয়ম পালন করা বাধ্যতামূলক, কিছু নিয়ম হচ্ছে নামটিকে অধিক গ্রহণযোগ্য করে তোলার জন্য। ☺☺☺

প্রথমেই বাধ্যতামূলক নিয়মগুলো জেনে নিই।

১। ভ্যারিয়েবল এর নাম রাখার জন্য আলফা-নিউমেরিক ক্যারেকটার সমূহ ও স্পেশাল ক্যারেক্টার এর মধ্যে শুধুমাত্র আন্ডার স্কোর '_' ব্যবহার করা যাবে। অর্থাৎ নামে লেটার, নাম্বার ও আন্ডার স্কোর ছাড়া অন্য কিছু ব্যবহার করা যাবে না।

২। শুধু লেটার দিয়ে নামকরন করা গেলেও, শুধু নাম্বার দিয়ে ভ্যারিয়েবল এর নাম রাখা যাবে না। লেটার ও নাম্বার মিলিয়ে নাম রাখা যাবে, তবে সেই ক্ষেত্রে নামটি নাম্বার দিয়ে শুরু হতে পারবে না। যেমন,

asdf রাখা যাবে, কিন্তু 1234 রাখা যাবে না; আবার as12 রাখা যাবে কিন্তু 12as রাখা যাবে না।

৩। আন্ডার স্কোর দিয়ে নাম শুরু করা যাবে। যেমন,

_asdf রাখা যাবে, _12as রাখা যাবে;

৪। ভ্যারিয়েবল এর নাম করনে কোন প্রকার স্পেস ব্যবহার করা যাবে না। যেমন,

student info নামটি ভ্যালিড নাম নয়। বোধগম্য করা জন্য যদি কোন সেপারেটর ব্যবহার করতে হয় তাহলে আন্ডার স্কোর ব্যবহার করা যাবে। যেমন,

student_info একটি ভ্যালিড ভ্যারিয়েবল এর নাম।

৫। নামের দৈর্ঘ্য সর্বোচ্চ কত হতে পারবে তা কম্পাইলার এর উপর নির্ভর করবে। তবে স্ট্যান্ডার্ড অনুযায়ী কম্পাইলারের ৩১ অক্ষর পর্যন্ত কমপক্ষে সাপোর্ট করার কথা।

এইবার আসি নামকে অধিক ব্যবহার উপযোগী করে তোলার কিছু নিয়ম। এগুলো বাধ্যতামূলক নয়।

৬। নাম যথাসম্ভব সংক্ষিপ্ত হলে ভাল হয়। এতে ভ্যারিয়েবলকে বার বার লিখা সহজ হয়।

৭। নামকে প্রাসঙ্গিক করলে কোডে তার প্রয়োগ বোঝা সহজ হয়।

৮। যদিও নাম সম্পূর্ণ ছোট হাতের অক্ষর, সম্পূর্ণ বড় হাতের অক্ষর বা মিশ্র হতে পারে, তবুও সম্পূর্ণ বড় হাতের অক্ষরে না রাখাই ভাল। প্রচলিত প্রথা অনুযায়ী সম্পূর্ণ বড় হাতের অক্ষরে নাম রাখা হয় প্রিপ্রসেসর ডিরেক্টিভ #define দিয়ে ডিফাইন করা জিনিসের। তবে, রাখলে কোন ভুল হবে না।


বিশেষ বিশেষ ভ্যারিয়েবল এর ক্ষেত্রে আরো কিছু নিয়ম কানুন আছে। যেমনঃ

→ array ভ্যারিয়েবল এর নাম এর সাথে [ ] থাকে। এই ব্র‍্যাকেট এর মধ্যে array এর ইন্ডেক্স সংখ্যা থাকে। কাজেই একটি array যার নাম number এবং যার ইন্ডেক্স সংখ্যা ১০, তার পুরো নামটি হয় number[10]। আবার এই array তেই যদি ৫ নম্বর ইন্ডেক্সটিকে আমরা চিহ্নিত করতে চাই তাহলে তার নাম হবে number[5]। এইক্ষেত্রে মনে হতে পারে যে ভ্যারিয়েবল এর নাম করনের সময় [ ] কেও নামে রাখা হয়েছে। কিন্তু আসলে ব্যাপারটা সে রকম নয়।

→ pointer এর নাম রাখার সময় নামের আগে * যোগ করা হয়। যেমন, পয়েন্টার p এর নাম লিখার সময় লিখা হয় *p। এখানে তার নাম p এবং * দ্বারা বোঝানো হয় যে এটি একটি পয়েন্টার।

ডেটা টাইপ পোস্টটা যারা পড়েছেন তারা দেখেছেন যে C ভাষায় কোন ডেটাকে পাচটি মৌলিক ডেটা টাইপ বা তাদের থেকে উদ্ভূত বা লব্ধ কোন একটা ডেটা টাইপের অন্তর্ভুক্ত হিসেবে চিন্তা করা হয়। এটি প্রোগ্রামিং এর কাজকে অনেক সাবলীল করে তোলে।

ভ্যারিয়েবলে যেহেতু ডেটাই জমা থাকবে সেহেতু ভ্যারিয়েবল এরও ডেটা টাইপ থাকতে হয়। কোন ভ্যারিয়েবল এর ডেটা টাইপ মানে হল ঐ ভ্যারিয়েবল এ কি ধরনের ডেটা রাখা হবে সেটা প্রকাশ করা। কেন সেটা করতে হয় সেটা ডেটা টাইপ ২ পোস্টে দেওয়া হবে। তার আগ পর্যন্ত এটাই জেনে রাখেন যে,

ভ্যারিয়েবল এর নাম করনের সাথে সাথেই তার ডেটা টাইপও উল্লেখ করতে হয়।

অনেকটা চাইনিজ বা জাপানিজ দের নাম রাখার মত। জানেন তো যে তাদের নামের প্রথম অংশটা তাদের বংশের নাম?

আজকে আমরা যেটা জানবো সেটা হচ্ছে ভ্যারিয়েবল ডিক্লেয়ারেশন, ইনিশিয়ালাইজেশন ও ডেফিনিশন।

ভ্যারিয়েবল ডিক্লেয়ারেশন হচ্ছে একটি ঘোষনার মাধ্যমে জানিয়ে দেওয়া যে, অমুক ডেটা টাইপের অমুক নামের একটি ভ্যারিয়েবল তৈরী করা হল। ডিক্লেয়ার করার নিয়ম হচ্ছে,

data_type variable_name;

তারমানে হচ্ছে যদি আমরা number নামের একটি ইন্টিজার টাইপের ভ্যারিয়েবল ডিক্লেয়ার করতে চাই, তাহলে আমাদের ডিক্লেয়ারেশন স্টেটমেন্ট হবে,

int number;

সহজ, তাই না?

একই ধরনের কয়েকটি ভ্যারিয়েবলকে একবারে ডিক্লেয়ার করা যায়। এই ক্ষেত্রে ডেটা টাইপের নামের পরে স্পেস দিয়ে ভ্যারিয়েবল এর নাম সমূহ কমা দিয়ে আলাদা করে লিখতে হয়। যেমন, কারো সিজিপিএ একটি দশমিক সংখ্যা। যদি প্রথম সেমিস্টার এর জিপিএ কে first_gpa, ফাইনাল সেমিস্টার এর জিপিএ কে final_gpa, আর গড় জিপিএ কে cgpa নামের ভ্যারিয়েবলে রাখতে চাই, তাহলে সহজেই এই ডিক্লেয়ারেশন স্টেটমেন্ট লিখা যায়,

float first_gpa, final_gpa, cgpa;

এই স্টেটমেন্ট দ্বারা একই সাথে তিনটি ফ্লোটিং পয়েন্ট টাইপের ভ্যারিয়েবল ডিক্লেয়ার করা হয়ে গেলো।

C স্ট্যান্ডার্ড এ কোন কোড ব্লকের শুরুতে ভ্যারিয়েবলকে ডিক্লেয়ার করতে বলা হয়েছে। এই বাক্যটার মানে কি এবং তা কতটুকু মানতে হয় তা আমরা আস্তে আস্তে শিখবো। আপাতত আমরা এইটুকুই জেনে নিই যে প্রোগ্রামের মেইন ফাংশনের শুরুতেই আমরা ভ্যারিয়েবল ডিক্লেয়ারেশন এর কাজটা করে ফেলবো।

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

ভ্যারিয়েবলকে ডিক্লেয়ার করার পরে তাতে একটি প্রাথমিক ডেটা জমা রাখা হয় যেটা প্রোগ্রামারের জানা থাকে। এই কাজটিকেই বলা হয় ইনিশিয়ালাইজেশন।

যেমনঃ number নামের একটি ইন্টিজার ভ্যারিয়েবলকে ডিক্লেয়ার করে তাতে প্রাথমিক ভাবে 0 জমা রাখার জন্য স্টেটমেন্ট গুলো হবেঃ

int number; //ডিক্লেয়ারেশন স্টেটমেন্ট
number = 0; // ইনিশিয়ালাইজেশন

'=' কে বলা হয় এসাইনমেন্ট অপারেটর যা সম্পর্কে পরবর্তিতে আলোচনা করা হবে। এখন এইটুকুই জেনে রাখা ভাল যে,

= চিহ্নের বাম পাশে ভ্যারিয়েবল রেখে আর ডানপাশে মানানসই ডেটা রেখে সেমিকোলন দিয়ে স্টেটমেন্ট শেষ করলেই ডেটা টি ঐ ভ্যারিয়েবল এ জমা হয়ে যায়। = চিহ্নের বামে ভ্যারিয়েবল ছাড়া অন্য কিছু থাকতে পারবে না।

ইনিশিয়ালাইজ কেন করা হয় তা যখন দরকার পড়বে তখনই বুঝতে পারবে। তবে এখন এইটুকুই জেনে রাখা দরকার যে,

ডিক্লেয়ারেশন এর পর পরই ভ্যারিয়েবল কে ইনিশিয়ালাইজ করার অভ্যাস থাকা ভাল।

আমরা চাইলে একই সাথে ডিক্লেয়ারেশন ও ইনিশিয়ালাইজেশন করতে পারি। এবং বাস্তবে সেটাই করা হয় সাধারণত। সেটা করা হয় এই ভাবে।

int number;
number=0;

এর পরিবর্তে একবারে লেখা হয়,

int number=0;

এই স্টেটমেন্ট এ প্রথমে number নামে একটি ভ্যারিয়েবল ডিক্লেয়ার হয়েছে, তারপর তাতে 0 জমা রাখা হয়েছে।

একই সাথে ডিক্লেয়ারেশন আর ইনিশিয়ালাইজেশন করাকেই ডেফিনিশন বলা হয়ে থাকে।

0 comments:

Post a Comment