Array : সাধারণ আলোচনা

Array শব্দটি ইংরেজিতে ব্যবহার করা হয় ধারাবাহিক ভাবে সজ্জিত একটি সমাবেশকে বুঝানোর জন্য। যেমন, array of computer workstations বলতে বুঝায় পাশাপাশি সাজানো অনেকগুলি ডেস্কটপ কম্পিউটার এর একটি সমাবেশকে, ঠিক যেমন স্কুল, কলেজ বা ইউনিভার্সিটির কম্পিউটার ল্যাবে সাজানো থাকে।

প্রোগ্রামিং ল্যাংগুয়েজ এর পরিভাষায়, array হচ্ছে একই ডেটা টাইপের অনেকগুলো ডেটার একটি ধারাবাহিক সমাবেশ।

উপরের সংগা থেকে, কয়েকটা জিনিস স্পষ্ট যে,
১. array হচ্ছে একই ডেটা টাইপের ডেটার সমাবেশ
২. এই সমাবেশে বেশ কিছু ডেটা থাকবে।
৩. এই ডেটা সমূহ ধারাবাহিক ভাবে পাশাপাশি কম্পিউটার মেমরিতে সাজানো থাকে।

আমরা জানি, C ভাষায় যে কোন ডেটা কম্পিউটার মেমরিতে রাখার জন্য ভ্যারিয়েবল ডিক্লেয়ার করতে হয়। array হচ্ছে একই ধরনের অনেকগুলি ভ্যারিয়েবল এর মত।

একটি array কম্পিউটার মেমরিরে তার ডেটা টাইপ অনুযায়ী একটি নির্দিষ্ট পরিমান জায়গা দখল করে থাকে। এই জায়গার পরিমান তার ডেটা টাইপ ও আমরা কতগুলো ডেটা ঐ array তে রাখতে চাই তার উপর নির্ভর করে।

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

ডিক্লেয়ারেশন


সাধারণ ভ্যারিয়েবল এর মতই array ডিক্লেয়ার করার সময় প্রথমে তার ডেটা টাইপ উল্লেখ করতে হয় এবং তারপর তার নাম দিতে হয়। তবে নামের সাথে বিশেষ পদ্ধতিতে, ঐ array তে কতগুলি ডেটা থাকবে সেটাও উল্লেখ করে দিতে হয়। নামের সাথেই থার্ড ব্রাকেট '[]' এর মধ্যে ঐ array এর উপাদান সংখ্যা নির্ধারণ করে দিতে হয়। যেমন, আমরা যদি ১০০ জন ছাত্রছাত্রীর পরীক্ষায় প্রাপ্ত নম্বর রাখার জন্য একটি array ডিক্লেয়ার করতে চাই, তাহলে আমাদের int টাইপের একটি array ডিক্লেয়ার করতে হবে যার উপাদান সংখ্যা হবে ১০০। যদি array টির নাম marks হয়, তাহলে ডিক্লেয়ারেশন স্টেটমেন্ট হবে,

int marks[100];

খেয়াল রাখতে হবে যে নাম আর [ এর মধ্যে যেন কোন স্পেস বা ফাকা জায়গা না থাকে।

উপরের marks array টি ১০০ টি ইন্টিজার ভ্যারিয়েবল এর সমাবেশ হিসেবে কাজ করে।

এখন আমরা ইচ্ছে করলে এই array এর একটি একটি করে ডেটা বা উপাদানকে এক্সেস করতে পারবো। array এর একটি উপাদানকে এক্সেস করার পদ্ধতিকে ইন্ডেক্সিং বলে। আর ঐ array তে ঐ উপাদানের ক্রমিক নম্বরকে তার ইন্ডেক্স নম্বর বলে। ইন্ডেক্স নম্বর শুরু হয় 0 (শূন্য) থেকে। কম্পিউটার বিজ্ঞানে গণনা সাধারণত শূন্য থেকেই শুরু হয়। কাজেই, কোন array এর প্রথম উপাদানের ইন্ডেক্স নম্বর হবে শূন্য। আর শেষ উপাদানের ইন্ডেক্স নম্বর হবে array এর আকারের চেয়ে ১ কম। উপরের marks array তে  0 থেকে 99 পর্যন্ত মোট ১০০ টি ইন্ডেক্স আছে।

array এর নামের পরে থার্ড ব্রাকেট এর মধ্যে ইন্ডেক্স নম্বর দিয়ে ঐ ইন্ডেক্সে রক্ষিত ডেটা এক্সেস করা যায়। যেমন,

marks[0] বলতে বোঝায় প্রথম ইন্ডেক্সে রক্ষিত ডেটাকে, marks[50] বলতে বোঝায় ৫১তম ইন্ডেক্সে রক্ষিত ডেটাকে।

আমরা যদি এই array টির ক্ষেত্রে marks[100] লিখি, তাহলে সেটা ভুল হবে। কারণ এই array তে ১০০ নম্বর ইন্ডেক্স বলে কিছু নেই। তাই সেটি এক্সেস করাও সম্ভব না।

array নিয়ে কাজ করার সময় সর্বদা সতর্ক থাকতে হবে যেন ইন্ডেক্সিং সঠিকভাবে করা হয়। অন্যথায় প্রোগ্রাম ক্রাশ করবে।

ইনিশিয়ালাইজেশন


অন্যান্য ভ্যারিয়েবল এর মত ডিক্লেয়ারেশন এর সময় array কে এসাইনমেন্ট অপারেটর ব্যবহার করে ইনিশিয়ালাইজ করা যায়। এই ক্ষেত্রে একটি কার্লি ব্রেসের মধ্যে কমা দিয়ে আলাদা করা ডেটার তালিকা array তে এসাইন করলেই ঐ ডেটা ধারাবাহিকভাবে array এর বিভিন্ন ইন্ডেক্সে একই ক্রমে কপি হয়ে যায়।

যেমন,

int num[5]={1, 2, 3, 4, 5};

স্টেটমেন্ট টি num নামে ৫ ইন্ডেক্সের একটি ইন্টিজার array ডিক্লেয়ার করে এবং তার 0 থেকে 4 নম্বর ইন্ডেক্সে যথাক্রমে 1, 2, 3, 4, 5 জমা রাখে।

array কে মোট ইন্ডেক্স সংখ্যা ছাড়া ডিক্লেয়ার করা যায় না। যেমন,

int num[];

ডিক্লেয়ারেশন স্টেটমেন্ট টি ভুল।

তবে যদি ডিক্লেয়ার করার সময় ইনিশিয়ালাইজ করা হয় তাহলে array কে মোট ইন্ডেক্স নম্বর ছাড়াও ডিক্লেয়ার করা যায়।

যেমন,

int num[]={1, 2, 3, 4, 5, 6};

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


এসাইনমেন্ট অপারেটর ও array


 array একটি ভ্যারিয়েবল সমাবেশ মাত্র, এটি নিজে একটি ভ্যারিয়েবল নয়। তাই, দুটি array একই টাইপের ও একই আকারের হলেও একটি array কে অন্য array তে এসাইন করা যায় না। যেমন,

int num[10], odd[10];

odd=num; /* এই স্টেটমেন্টটি ভুল */

array এর একটি ইন্ডেক্স একটি ভ্যারিয়েবল এর মত কাজ করে। তাই একটি একটি করে ইন্ডেক্স এসাইনমেন্ট অপারেটর ব্যবহার করে কপি করা যায়। যেমন,

int num[5], odd[5];

num[0]=odd[0];
num[1]=odd[1];

এভাবে এসাইন করা যায়।

একটি array এর সব তথ্য অন্য একটি array তে এসাইনমেন্ট অপারেটর ব্যবহার করে কপি করতে চাইলে, একটি একটি করে সবগুলো ইন্ডেক্স এসাইন করতে হবে। এই ক্ষেত্রে দ্বিতীয় array টিকে অবশ্যই প্রথম array এর সমান বা তার চেয়ে বড় হতে হবে। কারণ, আগেই বলা হয়েছে যে ইন্ডেক্স যে array তে নাই, সেই ইন্ডেক্সে এসাইন করা বৈধ নয়।