ডেটা টাইপ, চলক ও কীওয়ার্ড
সি প্রোগ্রামিং: ডেটা টাইপ (int, float, char), ফরম্যাট স্পেসিফায়ার, ভেরিয়েবল নামকরণের নিয়ম, কীওয়ার্ড এবং কনস্ট্যান্ট এর বিস্তারিত।
অধ্যায় ৫: ডেটা টাইপ, চলক ও কীওয়ার্ড
- ডেটা টাইপ, চলক ও কীওয়ার্ড
- রান্নাঘরের কৌটা বনাম কম্পিউটারের মেমোরি
- ডেটা টাইপ (Data Type) কী?
- বিভিন্ন ডেটা টাইপ ও মেমোরি সাইজ
- ফরম্যাট স্পেসিফায়ার (Format Specifier)
- চলক বা ভেরিয়েবল (Variable) কী?
- ভেরিয়েবল নামকরণের নিয়মাবলী (১)
- ভেরিয়েবল নামকরণের নিয়মাবলী (২)
- কোনটি বৈধ আর কোনটি অবৈধ?
- কীওয়ার্ড (Keyword) - সংরক্ষিত শব্দ
- ধ্রুবক বা কনস্ট্যান্ট (Constant)
- কোড উদাহরণ: হাতে-কলমে
- সারসংক্ষেপ
অধ্যায় ৫: প্রোগ্রামিং ভাষা - ডেটা টাইপ, চলক ও কীওয়ার্ড (বিস্তারিত আলোচনা)
লেকচারের 'রান্নাঘরের কৌটা'র উদাহরণটি মনে আছে? বাস্তব জীবনে যেমন চাল, ডাল বা তেল রাখার জন্য ভিন্ন ভিন্ন ধরণের পাত্র বা কন্টেইনার প্রয়োজন হয়, তেমনি প্রোগ্রামিংয়েও বিভিন্ন ধরণের ডেটা মেমোরিতে সংরক্ষণের জন্য ভিন্ন ভিন্ন 'ডেটা টাইপ' প্রয়োজন। একটি পূর্ণসংখ্যা (যেমন ১০) এবং একটি দশমিক সংখ্যা (যেমন ১০.৫) কম্পিউটার মেমোরিতে একইভাবে সংরক্ষিত হয় না। এদের জায়গা বা মেমোরি স্পেস এবং প্রসেস করার পদ্ধতি ভিন্ন।
এই পাঠে আমরা লেকচারের মৌলিক আলোচনার বাইরে গিয়ে ডেটা টাইপের বিস্তারিত প্রকারভেদ, মেমোরি রেঞ্জ এবং ভেরিয়েবল বা চলক ব্যবহারের খুঁটিনাটি শিখব। বিশেষ করে পরীক্ষার খাতায় কীভাবে উত্তর লিখলে সর্বোচ্চ নম্বর পাওয়া যাবে, সেই কৌশলগুলো এখানে আলোচনা করা হয়েছে।
ডেটা টাইপ (Data Type) ও এর প্রকারভেদ
সি প্রোগ্রামে ইনপুট হিসেবে আমরা যে ডেটা গ্রহণ করি এবং প্রসেস করার পর যে ফলাফল পাই, মেমোরিতে তাদের ধরন ও ধারণক্ষমতা নির্ধারণের মাধ্যমকেই ডেটা টাইপ বলে। সহজ কথায়, ডেটা টাইপ কম্পাইলারকে বলে দেয় যে ভেরিয়েবলটি মেমোরিতে কতটুকু জায়গা নিবে এবং কী ধরনের ডেটা রাখবে।
লেকচারে আমরা শুধুমাত্র ৪টি মৌলিক ডেটা টাইপ দেখেছি। কিন্তু পরীক্ষার 'খ' ও 'গ' বিভাগের প্রশ্নের জন্য ডেটা টাইপের পূর্ণাঙ্গ শ্রেণবিভাগ জানা জরুরি। সি ল্যাঙ্গুয়েজে ডেটা টাইপ প্রধানত ৪ প্রকার:
- মৌলিক (Primitive / Built-in): যা সরাসরি কম্পাইলারে দেওয়া থাকে। (যেমন: int, float, char, double)
- ডিরাইভড (Derived): যা মৌলিক টাইপ থেকে তৈরি হয়। (যেমন: Array, Pointer, Function)
- ইউজার ডিফাইন্ড (User Defined): যা ব্যবহারকারী নিজের প্রয়োজনমতো তৈরি করে। (যেমন: Structure, Union, Enum)
- ফাঁকা (Void): যার কোনো মান নেই।

সংজ্ঞা (Definition): ডেটা টাইপ
সি প্রোগ্রামে ব্যবহৃত ডেটা বা তথ্যের ধরন, মেমোরি সাইজ এবং রেঞ্জ নির্দিষ্ট করার প্রক্রিয়াকে ডেটা টাইপ বলে। এটি কম্পাইলারকে নির্দেশ দেয় যে মেমোরিতে কত বাইট জায়গা বরাদ্দ করতে হবে।
গুরুত্বপূর্ণ (Important):
- লেকচারে আলোচিত int, float, char, double হলো 'মৌলিক' বা Primitive ডেটা টাইপ।
- Array, Pointer, Function হলো 'ডিরাইভড' ডেটা টাইপ।
- Structure, Union, Enum হলো 'ইউজার ডিফাইন্ড' ডেটা টাইপ।
- MCQ-তে প্রায়ই আসে "নিচের কোনটি ইউজার ডিফাইন্ড ডেটা টাইপ?" উত্তর হবে Structure বা Union।
মৌলিক ডেটা টাইপ: মেমোরি সাইজ ও রেঞ্জ
সি প্রোগ্রামে বহুল ব্যবহৃত চারটি মৌলিক ডেটা টাইপ হলো char, int, float, এবং double। এদের মেমোরি সাইজ এবং রেঞ্জ জানা খুবই জরুরি, কারণ এর ওপর ভিত্তি করেই মেমোরি অপচয় রোধ করা যায়।
নিচের ছকটি খুব ভালো করে লক্ষ্য করো (৩২-বিট কম্পাইলারের জন্য):
| ডেটা টাইপ | বর্ণনা | মেমোরি সাইজ | ফরম্যাট স্পেসিফায়ার | রেঞ্জ (Range) |
|---|---|---|---|---|
| char | অক্ষর বা ক্যারেক্টার | ১ বাইট (8 bits) | %c |
-128 থেকে +127 |
| int | পূর্ণসংখ্যা | ২ বা ৪ বাইট | %d |
-32,768 থেকে +32,767 |
| float | দশমিক সংখ্যা | ৪ বাইট | %f |
3.4E-38 থেকে 3.4E+38 |
| double | বড় দশমিক সংখ্যা | ৮ বাইট | %lf |
1.7E-308 থেকে 1.7E+308 |
| void | মানহীন | ০ বাইট | নেই | মান নেই |
সাইনড (Signed) ও আনসাইনড (Unsigned) এর ধারণা:
স্বাভাবিকভাবে সব পূর্ণসংখ্যা টাইপ (int, char) 'Signed' হয়, অর্থাৎ এরা ধনাত্মক (+) ও ঋণাত্মক (-) উভয় মান রাখতে পারে। কিন্তু যদি আমরা ভেরিয়েবলের আগে unsigned কীওয়ার্ড ব্যবহার করি, তবে সেটি শুধু ধনাত্মক মান রাখবে এবং এর রেঞ্জ দ্বিগুণ হয়ে যাবে।
উদাহরণ: unsigned int শুধু পজিটিভ সংখ্যা রাখে, তাই এর রেঞ্জ 0 থেকে 65,535 পর্যন্ত।
ফ্লোট (float) বনাম ডাবল (double)
পরীক্ষায় প্রায়ই প্রশ্ন আসে: "দশমিক সংখ্যার জন্য কখন float এবং কখন double ব্যবহার করব?"
চলক বা ভেরিয়েবল (Variable) বিস্তারিত
প্রোগ্রামিংয়ের সময় আমাদের ডেটাগুলোকে মেমোরিতে কোথাও না কোথাও রাখতে হয়। মেমোরির যেই নির্দিষ্ট ঠিকানায় বা পাত্রে আমরা ডেটা রাখি, সেই পাত্রের নামই হলো চলক বা Variable। প্রোগ্রামে এর মান পরিবর্তন করা যায় বলেই একে 'ভেরিয়েবল' বলা হয়।
সংজ্ঞা (Definition): চলক বা Variable
চলক হলো মেমোরি লোকেশনের একটি নাম বা ঠিকানা, যেখানে ডেটা বা মান সংরক্ষণ করা হয় এবং প্রোগ্রাম নির্বাহের সময় যার মান পরিবর্তন হতে পারে।
ভেরিয়েবল ডিক্লেয়ার করার নিয়ম (Syntax):
data_type variable_name;
data_type variable_name = value; // মানসহ ডিক্লেয়ারেশন
উদাহরণ:
int age = 18;
float marks = 85.5;
char section = 'A';
লোকাল (Local) ও গ্লোবাল (Global) ভেরিয়েবল
লেকচারে আমরা শুধু ভেরিয়েবল দেখেছি, কিন্তু এর অবস্থান বা স্কোপ (Scope) অনুযায়ী এটি দুই প্রকার। এটি পরীক্ষার জন্য অত্যন্ত গুরুত্বপূর্ণ একটি টপিক।
উদাহরণ (Example): লোকাল বনাম গ্লোবাল
#include <stdio.h>
int globalVar = 100; // গ্লোবাল ভেরিয়েবল (সব ফাংশনের বাইরে)
void display() {
printf("%d", globalVar); // এখানে globalVar কাজ করবে
}
int main() {
int localVar = 10; // লোকাল ভেরিয়েবল (ফাংশনের ভেতরে)
printf("%d", localVar); // এটি কাজ করবে
printf("%d", globalVar); // এটিও কাজ করবে
return 0;
}
পরীক্ষার টিপস (Exam Tip):
অনুধাবনমূলক প্রশ্নে আসতে পারে "লোকাল ও গ্লোবাল ভেরিয়েবলের মধ্যে পার্থক্য লিখ"।
- লোকাল ভেরিয়েবল: কোনো নির্দিষ্ট ফাংশনের ভেতরে ঘোষণা করা হয় এবং শুধুমাত্র ওই ফাংশনের ভেতরেই কাজ করে।
- গ্লোবাল ভেরিয়েবল: সকল ফাংশনের বাইরে (সাধারণত main এর আগে) ঘোষণা করা হয় এবং পুরো প্রোগ্রামের যেকোনো জায়গা থেকে ব্যবহার করা যায়।
চলক নামকরণের নিয়মাবলী ও সাধারণ ভুল
সি প্রোগ্রামে ভেরিয়েবলের নাম ইচ্ছেমতো দেওয়া যায় না। কিছু সুনির্দিষ্ট নিয়ম মেনে চলতে হয়। এই নিয়মগুলো ভঙ্গ করলে কম্পাইলার Syntax Error দেখাবে।
চলক নামকরণের প্রধান নিয়মসমূহ:
১. নাম অবশ্যই অক্ষর (a-z, A-Z) বা আন্ডারস্কোর (_) দিয়ে শুরু হতে হবে। কোনো সংখ্যা দিয়ে শুরু হতে পারবে না।
২. নামের মাঝে কোনো ফাঁকা স্থান (Space) রাখা যাবে না।
৩. নামের মধ্যে কোনো স্পেশাল ক্যারেক্টার (যেমন @, #, $, %, !) ব্যবহার করা যাবে না (শুধু _ বাদে)।
৪. সি ল্যাঙ্গুয়েজের কোনো কীওয়ার্ড (Keyword) (যেমন int, float, return) কে ভেরিয়েবলের নাম হিসেবে ব্যবহার করা যাবে না।
৫. সি ল্যাঙ্গুয়েজ Case Sensitive, তাই Total এবং total দুটি ভিন্ন ভেরিয়েবল হিসেবে গণ্য হবে।
নিচের ছকটি দেখে শুদ্ধ ও অশুদ্ধ নামগুলো চিনে নাও:
| ভেরিয়েবলের নাম | শুদ্ধ/অশুদ্ধ | কারণ |
|---|---|---|
student_age |
✅ শুদ্ধ | অক্ষর ও আন্ডারস্কোর ব্যবহৃত হয়েছে। |
Roll_No_1 |
✅ শুদ্ধ | শেষে সংখ্যা ব্যবহার করা যাবে। |
2ndPaper |
❌ অশুদ্ধ | সংখ্যা দিয়ে শুরু হয়েছে। |
my name |
❌ অশুদ্ধ | মাঝখানে স্পেস আছে। |
float |
❌ অশুদ্ধ | এটি একটি কীওয়ার্ড। |
| `total$` | ❌ অশুদ্ধ | স্পেশাল ক্যারেক্টার ($) আছে। |
MCQ হ্যাক:
MCQ-তে প্রায়ই প্রশ্ন আসে "নিচের কোনটি বৈধ চলক?"। সবসময় খুঁজবে—শুরুতে সংখ্যা আছে কিনা, মাঝে স্পেস আছে কিনা বা সেটি কোনো কীওয়ার্ড কিনা। এই তিনটি বিষয় চেক করলেই ভুল উত্তর বাদ দেওয়া সহজ হবে।
কীওয়ার্ড (Keyword) ও ধ্রুবক (Constant)
কীওয়ার্ড (Keyword)
সি কম্পাইলারে কিছু শব্দ আগে থেকেই রিজার্ভ বা সংরক্ষিত থাকে, যেগুলোর নির্দিষ্ট অর্থ ও কাজ আছে। এগুলোকে আমরা ভেরিয়েবলের নাম হিসেবে ব্যবহার করতে পারি না। সি ভাষায় মোট ৩২টি কীওয়ার্ড আছে।

সংজ্ঞা (Definition): কীওয়ার্ড
সি প্রোগ্রামে ব্যবহৃত কিছু সংরক্ষিত শব্দ (Reserved Words) যার নির্দিষ্ট অর্থ ও কাজ কম্পাইলারে পূর্বনির্ধারিত থাকে, তাকে কীওয়ার্ড বলে। যেমন: int, if, while, return ইত্যাদি।
ধ্রুবক (Constant)
প্রোগ্রামে এমন কিছু মান থাকে যা শুরু থেকে শেষ পর্যন্ত একই থাকে, কখনো পরিবর্তন হয় না। এদের কনস্ট্যান্ট বা ধ্রুবক বলে। যেমন: পাই ($\pi$) এর মান ৩.১৪১৬।
সি-তে কনস্ট্যান্ট দুইভাবে ডিফাইন করা যায়:
constকীওয়ার্ড ব্যবহার করে:
const float PI = 3.1416;
#defineপ্রি-প্রসেসর ব্যবহার করে:
#define PI 3.1416
int a;), কনস্ট্যান্টের ক্ষেত্রে const বা #define ব্যবহার করতে হয়।
সংক্ষিপ্ত সারাংশ (Quick Revision)
মনে রাখার মতো পয়েন্ট:
- ডেটা টাইপ ৪ প্রকার: মৌলিক, ডিরাইভড, ইউজার ডিফাইন্ড, এমপ্টি।
- মেমোরি সাইজ: char (১ বাইট), int (২/৪ বাইট), float (৪ বাইট), double (৮ বাইট)।
- ফরম্যাট স্পেসিফায়ার: int (%d), float (%f), char (%c), double (%lf)।
- চলক নামকরণ: সংখ্যা দিয়ে শুরু করা যাবে না, স্পেস দেওয়া যাবে না, কীওয়ার্ড ব্যবহার করা যাবে না।
- কনস্ট্যান্ট: এর মান অপরিবর্তনশীল। const বা #define দিয়ে তৈরি করা হয়।
পরিভাষা (Glossary)
| পরিভাষা (Term) | সংজ্ঞা (Definition) |
|---|---|
| Data Type | ডেটার ধরন ও মেমোরি সাইজ নির্ধারণকারী নির্দেশক। |
| Variable | মেমোরিতে ডেটা রাখার নামযুক্ত স্থান যার মান পরিবর্তনশীল। |
| Keyword | কম্পাইলারের জন্য সংরক্ষিত বিশেষ শব্দ যা ভেরিয়েবল হিসেবে ব্যবহার নিষিদ্ধ। |
| Format Specifier | ইনপুট/আউটপুটে ডেটার ধরন বোঝানোর চিহ্ন (যেমন %d পূর্ণসংখ্যার জন্য)। |
| Constant | প্রোগ্রামে ব্যবহৃত এমন মান যা পরিবর্তন করা যায় না। |
| Local Variable | নির্দিষ্ট ফাংশনের ভেতরে ঘোষিত চলক যা শুধু সেখানেই কাজ করে। |
| Global Variable | ফাংশনের বাইরে ঘোষিত চলক যা পুরো প্রোগ্রামে কাজ করে। |