SL3 Framework

Arrays

SL3 Framework - What is Array

We Need 9 to Count 10 Elements in Array

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


Start Conversation -

প্রেক্ষাপটঃ আজকে তামিম খুব চিল, তার খুব ভালো লাগছে। সে কন্ডিশন, লুপ, অ্যারে সব কিছুর কনসেপ্টই ভালো ভাবে বুঝতে পারছে। এখন তার বাইরে বের হওয়া দরকার, রিয়ার সাথে আড্ডা দেওয়া দরকার নতুন নতুন বাস্তব উদাহরণ খুঁজে পেতে। তাই তামিম রিয়া কে ফোন করলো -

তামিমঃ হ্যালো রিয়া।

রিয়াঃ সুর্য আজকে কোন দিকে উঠেছে? তুই আমাকে ফোন দিয়েছিস?

তামিমঃ কেন? আমি তোকে কখনো ফোন দেই না?

রিয়াঃ একদম না, সব সময় তো আমিই ফোন দেই।

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

রিয়াঃ হ তাই তো। আচ্ছা বাদ দে। এবার বল ফোন কেন দিয়েছিস?

তামিমঃ ভাবলছিলাম ঘুরতে যাব, তোকে একটু ফুসকার ট্রিট দেব।

রিয়াঃ তামিম? তুই কি সুস্থ আছিস ভাই? শরীর খারাপ লাগছে? আমি কি ডাক্তার নিয়ে আসবো?

তামিমঃ আরে আমার কি হবে? আমি তো ঠিক আছি।

রিয়াঃ তুই ঠিক থেকে আমাকে ট্রিট দেওয়ার কথা বলছিস? আমার তো মনে হচ্ছে আমি জেগে জেগে স্বপ্ন দেখছি। মতলব কি তোর?

তামিমঃ মতলব কিছুই না। দুইজন বাইরে বের হলাম, ঘুরলাম। আজকে নো টিম আসবে না, আমরা দুইজন মিলেই আলোচনা করলাম।

রিয়াঃ ওহ আচ্ছা, এবার বুঝেছি। আমার ভাইটা এত ভালো কেমনে হয়ে গেলো যে আমাকে ট্রিটের কথা বলে?

তামিমঃ তুই যাবি কি না বল?

রিয়াঃ না, আমি যাব না।

তামিমঃ তুই যাবি না? কিন্তু কেন?

রিয়াঃ আমি সকাল থেকে একটা সমস্যার সমাধান করার চেষ্টা করছি, কিন্তু কোনো ভাবেই সমাধান করতে পারছি না। এটা সমাধান না হওয়া পর্যন্ত আমি কোথাও যাব না।

তামিমঃ কি সমস্যা?

রিয়াঃ লুপের সমস্যা।

তামিমঃ লুপ না গত কালকেই আমরা বুঝতে পারলাম?

রিয়াঃ হুম, বুঝেছি। কিন্তু আমার সমস্যাটা আর একটু জটিল। কোনো ভাবেই সমাধান করা যাচ্ছে না।

তামিমঃ কি সমস্যা বলবি আমাকে?

রিয়াঃ আমার কাছে দশটা ভিন্ন ভিন্ন স্টুডেন্টের জন্য দশটা ভিন্ন ভিন্ন ভ্যারিয়েবল আছে। যা মধ্যে স্টুডেন্টের নাম রাখা আছে। আমি চাচ্ছি লুপ চালিয়ে সবার নাম প্রিন্ট করতে। কিন্তু কোনো ভাবেই লুপের মধ্যে ডাইনামিক ভাবে ভ্যারিয়েবলের নাম চেঞ্জ করতে পারছি না।

তামিমঃ হা হা হা হা হা হা

রিয়াঃ তুই হাসছিস কেন? আমার প্রব্লেম তোর কাছে হাস্যকর মনে হচ্ছে?

তামিমঃ হা হা হা, দাঁড়া আগে হাসি থামায়ে নেই। তুই যদি হাতিকে বলিস আকাশে উড়তে সে পারবে?

রিয়াঃ আমার সমস্যাকে তোর অবাস্তব সমস্যা মনে হচ্ছে?

তামিমঃ মনে হওয়ার কি আছে? এটা তো অবাস্তব সমস্যায়।

রিয়াঃ তাহলে কালকে তোরা সবাই কেমনে বললি যে দশ জন স্টুডেন্টকে একসাথে ইমেইল পাঠাবি, রেসাল্ট বের করবি? কিভাবে করবি শুনি?

তামিমঃ ওহ আচ্ছা, তুই সেখানেই পরে আছিস। হা হা

রিয়াঃ মজা না নিয়ে বলবি? ওইটা কেমনে করবো?

তামিমঃ ওই কাজ করার জন্য শুধু লুপ যথেষ্ট না। এর জন্য লাগবে লুপ এবং অ্যারে দুটোই।

রিয়াঃ অ্যারে? অ্যারে কেন লাগবে? অ্যারে কি আসলে?

তামিমঃ বাইরে যাবি?

রিয়াঃ চল বাইরে থেকে ঘুরে আসি। তুই না ট্রিট দিবি বলছিলি?

তামিমঃ বাইরে যাচ্ছি চল, কিন্তু ট্রিট এবার তোকে দিতে হবে। না হলে অ্যারে বোঝাচ্ছি না।

রিয়াঃ তামিম...। শয়তান একটা। 👿


What is Array?

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

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

SL3 Framework - Array Index

অ্যারেকে আপনি একটা কবুতরের ঘরের সাথে কল্পনা করতে পারেন। পাশাপাশি অনেক গুলো খোপ, প্রতিটা খোপের মধ্যেই কবুতর থাকে। এখানে খোপ গুলো হচ্ছে স্টোরেজ বা মেমরি আর কবুতর গুলো হচ্ছে ডেটা। প্রতিটা খোপকে চিহ্নিত করার জন্য আবার আপনি ১, ২, ৩ করে নাম্বারিং করলেন। এই নাম্বার ধরে ধরে আপনি কিন্তু বের করে আনতে পারেন যে কোন খোপে কোন কবুতর আছে।

অ্যারের ক্ষেত্রেও ব্যাপারটা একই। অ্যারের প্রতিটা ঘরের মধ্যে ডেটা থাকে। প্রতিটা ঘরকে চিহিন্ত করার জন্য আবার একটা নাম্বারও আছে। একে আমরা বলি ইনডেক্স। অ্যারের ইনডেক্স শুরু হয় শূন্য থেকে। অর্থাৎ প্রথম ঘরের ইনডেক্স শূন্য, দ্বিতীয় ঘরের ইনডেক্স ১ এই ভাবে করে চলতে থাকবে। অ্যারে ইনডেক্স বেসড হওয়ার একটা বড় সুবিধা হচ্ছে ইনডেক্স একটা নাম্বার। আর আমরা নিশ্চয় নাম্বার এর সাথে বিভিন্ন অপারেশন ঘটাতে পারি? তার মানে, যে কোনো অপারেশন ঘটিয়ে আমরা যদি একবার ইনডেক্স এর নাম্বারটা বের করতে পারি তাহলে সেই ইনডেক্সে কি আছে তা আমরা সহজেই বের করে ফেলতে পারবো।


Continue Conversation (1)

প্রেক্ষাপটঃ তামিম আর রিয়া রিক্সাতে ঘুরতে বের হয়েছে। রিয়ার মেজাজ এখনো গরম কারণ সে তার সমস্যার সমাধান এখনো খুঁজে পাইনি। কিন্তু তামিম আজকে অনেক চিল, সে শুধু রিয়ার সাথে মজা করছে।

রিয়াঃ তামিম, তুই এখনো আমাকে ওই সমস্যাটার সমাধান করে দিলি না।

তামিমঃ কুল ম্যান, কুল। রিল্যাক্স কর।

রিয়াঃ আমি রিল্যাক্স করতে পারবো না। আগে তুই আমাকে ওই সমস্যার সমাধান দে।

তামিমঃ শুধুমাত্র ফুসকা তে ওই সমস্যার সমাধান হবে না। আর কি খাওয়াবি বল?

রিয়াঃ তুই কি আমাকে ব্ল্যাক মেইল করছিস?

তামিমঃ ব্ল্যাক মেইল কি, হোয়াইট মেইল কি আমি তো বুঝি না। আমি চালাই জিমেইল।

রিয়াঃ উউফ... কি খাবি বল তাড়াতাড়ি।

তামিমঃ ফুসকা তো খাবোই, সাথে চিকেন বল আর চিপস। এর পরে মুভি দেখতে যাবো।

রিয়াঃ আমি মরছি আমার জ্বালাই আর তুই আমার সাথে মজা নিচ্ছিস? চিকেন বল আর চিপস পর্যন্তও ঠিক ছিল। তোকে এখন আমি মুভি দেখাতে নিয়ে যাবো?

তামিমঃ যা, মুভি আমি দেখাতে নিয়ে যাবো।

রিয়াঃ তাহলে ঠিক আছে।

SL3 Framework - Chips Packets are Array

একটা দোকানের সামনে রিক্সাটা থাকলো। তামিম দোকানে গেলো চিপস কিনতে -

তামিমঃ মামা, ১২ টা চিপস দিন তো আমাকে। কিন্তু মামা চিপসের প্যাকেট গুলো একসাথে থাকতে হবে। আলাদা করে ছিঁড়ে দেওয়া যাবে না।

দোকানদারঃ ঠিক আছে মামা, সমস্যা নেই।

তামিমঃ কতো হলো?

দোকানদারঃ ১৮০ টাকা।

তামিমঃ রিয়া, ১৮০ টাকা দে।

রিয়াঃ পাগল না মাথা খারাপ? চিপস খাওয়াবো বলেছি মানে কি তোর গুষ্ঠিসুদ্ধ খাওয়াবো বলেছি? একটা চিপস এর বেশি আমি দাম দিতে পারবো না।

তামিমঃ তাহলে কিন্তু অ্যারে শেখাবো না।

রিয়াঃ রাখ তোর অ্যারে, আমি ১৮০ টাকা দিতে পারবো না।

তামিমঃ সত্যি তো? এই চিপসের প্যাকেট গুলোর ভিতরে কিন্তু তোর সমস্যার সমাধান আছে।

রিয়াঃ আমি আর তোকে কিচ্ছু খাওয়াতে পারবো না। চিপস নিয়ে বাড়িতে চল।

তামিমঃ আরে মুভি দেখবি না? আমি দেখাবো তো।

রিয়াঃ আমাকে তুই পুরা ফকির বানায়ে ছেড়ে দিয়েছিস। তাড়াতাড়ি রিক্সায় ওঠ, এর শোধ আমি নিবো।

১২ টা চিপসের থেকে ১ চিপস আলাদা করে তামিম রিয়ার হাতে দিলো -

তামিমঃ এই নে, এটা তোর।

রিয়াঃ ১২ টা চিপস কিনে তুই আমাকে একটা চিপস দিচ্ছিস? তাও চিপস গুলো আমার টাকায় কেনা।

তামিমঃ কিছুক্ষণের জন্য চুপ কর, আর আমি যা বলি তাই কর। এই নে চিপসটা ধর।

রিয়াঃ ধরলাম, বল এবার কি করবো?

তামিমঃ খেয়াল কর, এই একটা চিপস এর প্যাকেট অন্য এগারোটা চিপসের প্যাকেটের থেকে আলাদা। এগারোটা চিপস একসাথে আছে, আর এই একটা মাত্র প্যাকেট আলাদা আছে।

রিয়াঃ হুম আছে।

তামিমঃ এখন তুই যদি এই সিঙ্গেল প্যাকেটকে কিছু করিস এই এগারোটা প্যাকেটের কিছু যায় আসবে?

রিয়াঃ যায় আসবে বলতে?

তামিমঃ ধর তুই এইটা রাস্তায় ফেলে দিলি, তাহলে কয়টা প্যাকেট পরবে?

রিয়াঃ ১ টা।

তামিমঃ গুড, এবার বল এগারোটা প্যাকেট থেকে তুই প্রথমটা ধরলি, প্যাকেট গুলো আলাদা করার দরকার নেই, একসাথেই থাকবে প্যাকেট গুলো। এবার প্রথমটা ধরে রাস্তায় ছুঁড়ে দিলি, কয়টা প্যাকেট পরবে?

রিয়াঃ ১১ টা প্যাকেটই পরবে।

তামিমঃ কেন?

রিয়াঃ কারণ প্রতিটা প্যাকেট প্রতিটা প্যাকেটের সাথে লিংকড অবস্থায় আছে।

তামিমঃ এক্সাক্টলি। এরা কেউ সিঙ্গেল অবস্থায় নেই। যদি কোনো কিছু সিঙ্গেল অবস্থাতে থাকে তাহলে তার ওপরে ঘটানো অপারেশন শুধু তার ওপরেই ঘটে। কিন্তু যদি আমি সব গুলোর ওপরে একই অপারেশন ঘটাতে চাই তাহলে আমার দরকার ডেটা গুলোর ভিতরে রিলেশন।

রিয়াঃ কি বোঝাতে চাচ্ছিস আমি এখনো বুঝতে পারছি না।

তামিমঃ মনে কর তুই এক হাতে একটা চিপসের প্যাকেটই নিতে পারিস। এবার তুই সব গুলো প্যাকেটকে আলাদা করে ফেললি। আমি তোকে এবার বললাম সব গুলো চিপসের প্যাকেট এক হাতে নিতে। তুই কি পারবি?

রিয়াঃ ১২ টা প্যাকেট?

তামিমঃ হুম, প্রত্যেকটা আলাদা আলাদা।

রিয়াঃ না কোনো ভাবেই সম্ভব না।

তামিমঃ শুধুমাত্র তখন সম্ভব যখন তারা একে অন্যের সাথে কোনো না কোনো ভাবে যুক্ত আছে। মানে প্যাকেট গুলোকে আলাদা করার পূর্বে যেই অবস্থায় ছিল সেই অবস্থায় সম্ভব।

রিয়াঃ হুম, বুঝলাম। কিন্তু এর সাথে আমার প্রব্লেম এর কি সম্পর্ক?

তামিমঃ তুই কি এটা বুঝতে পেরেছিস যে আমাদের একই টাইপের ডেটা গুলো একসাথে রাখলে আমাদের কাজ অনেক সহজ হয়ে যায়?

রিয়াঃ হুম, সেটা তো আমি জানিই। আমার সমস্ত লিপস্টিক আমি এক জায়গায় রাখি, সমস্ত মেকআপ এক জায়গায় রাখি। একসাথে রাখলে সুবিধা তো আমি জানিই।

তামিমঃ এই একসাথে রাখার উপায় হচ্ছে অ্যারে।

রিয়াঃ মানে?

তামিমঃ মানে, একই টাইপের অনেক গুলো ডেটা আমরা যখন একসাথে সিরিয়ালি রাখি তখন সেটা হচ্ছে অ্যারে। আর তোর সমস্যা সমাধান করার জন্য দরকার হচ্ছে অ্যারে।

রিয়াঃ কেমনে?

তামিমঃ দেখ, তুই যদি আলাদা আলাদা ভ্যারিয়েবলের মধ্যে আলাদা আলাদা স্টুডেন্টের ইনফরমেশন রাখিস তাহলে তো ব্যাপারটা ওই সিঙ্গেল প্যাকেটের মতোই হলো তাই না? তুই যদি ওই সিঙ্গেল স্টুডেন্টকে প্রিন্ট করিস, ডিলিট করিস বাকি স্টুডেন্টের কিছুই হবে না। এর জন্য সব স্টুডেন্টকে একটা নির্দিষ্ট জায়গায় রাখতে হবে।

রিয়াঃ অনেক গুলো প্যাকেটের মতো।

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

রিয়াঃ সেটা তো বুঝলাম, কিন্তু একটা ভ্যারিয়েবলের ভিতরে এত গুলো স্টুডেন্টের ডেটা কেমনে রাখবো। একটার পরে আর একটা রাখলেই তো আগেরটা আপডেট হয়ে যাবে।

তামিমঃ হবে না, কারণ তুই এখানে সরাসরি ডেটাটা রাখবি না। রাখবি অ্যারে এর ভিতরে। অ্যারে হচ্ছে অনেক গুলো ডেটার সমষ্টি যা একটা ভ্যারিয়েবলের ভিতরে রাখা যায়।

রিয়াঃ একটা ভ্যারিয়েবলের ভিতরে যদি অনেক গুলো ডেটা রাখি তাহলে আমার যেই ডেটাটা দরকার সেটা আমি কেমনে বের করে আনবো?

তামিমঃ এই বার লাইনে এসেছিস। প্রতিটা ভ্যালুর একটা করে নাম্বার আছে, সেই নাম্বার ধরে ধরে তোকে ডেটা খুঁজে বের করতে হবে।

রিয়াঃ লে হালুয়া, এর ভিতরে আবার নাম্বার কোথা থেকে আসলো?

তামিমঃ ১২ টা চিপসের প্যাকেটের কথা চিন্তা কর, একটা আর একটার সাথে কানেক্টেড। এখন তোকে যদি বলি ৩ নাম্বার চিপসের প্যাকেট কোনটা? তুই বের করতে পারবি না?

রিয়াঃ পারবো না কেন? এটা তো সহজ।

তামিমঃ কি করে পারবি?

রিয়াঃ গুণবো, প্রথম থেকে গুণতে থাকবো। তিন নাম্বারে গিয়ে থেমে যাবো।

তামিমঃ ইয়েস, অ্যারেও এই একই ভাবে কাজ করে। একই রকম অনেক গুলো ডেটা পাশাপাশি বসিয়ে রাখে। এই গুলোকে এক একটা ঘর মনে করতে পারিস। প্রথম ঘরের নাম্বার শূন্য, দ্বিতীয় ঘরের নাম্বার ১, তৃতীয় ঘরের নাম্বার ২। এই ভাবে শেষ পর্যন্ত চলতে থাকবে। আর ঘরের নাম্বার গুলোকে ইনডেক্স নাম্বার বলে।

রিয়াঃ ওহ আচ্ছা, এইবার বুঝতে পেরেছি। তারমানে আমি দশটা ভ্যারিয়েবল নিয়ে কখনোই লুপ চালাতে পারবো না। লুপ চালাতে হবে একটা ভ্যারিয়েবলের ওপরে। তাই না?

তামিমঃ হ্যাঁ তাই। তাহলে লুপ চালিয়ে কি কতে হবে? আর কেন চালাবি?

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

তামিমঃ ১০০% সঠিক বলেছিস। দেখেছিস তোর টাকা দিয়ে এমনি এমনি চিপস কিনি নি। কেনার পেছনে কারণ আছে।

রিয়াঃ হুম বুঝলাম। তার মানে চিকেন বলও একটা অ্যারে। কারণ এক সাথে একটা কাঠির ভিতরে অনেক গুলো বল থাকে।

তামিমঃ তোকে অ্যারে শেখানোর জন্যই মূলত চিকেন বল খেতে চেয়েছিলাম।

রিয়াঃ গুড আমি বুঝতে পেরেছি। ফুচকা গুলোকে একটা সারিতে সাজায়ে রাখলে সেটাও একটা অ্যারে হয়ে যায়। আবার বাসের সিট গুলোও একটা অ্যারে। ওয়েট ওয়েট, এই জন্যই কি তুই আমাকে সিনেমা হলে নিয়ে যেতে চেয়েছিলি? কারণ সেখানে তো অনেক অ্যারে দেখতে পাচ্ছি আমি?

তামিমঃ হুম, বুদ্ধিমান মেয়ে। চেয়েছিলাম, কিন্তু এখন আর যাবো না। তুই তো বুঝেই ফেলেছিস।

রিয়াঃ শয়তান, আমাকে নিয়ে যেতেই হবে।

তামিমঃ আচ্ছা যাবো, তার আগে অ্যারে নিয়ে একটা স্টোরি শোন। আজকে তো নো টিম আসবে না, তাই আমিই স্টোরি লিখেছি।

রিয়াঃ বাহ বাহ, তুই তো দেখছি রাইটার হয়ে গেছিস।

তামিমঃ প্রতিটা প্রোগ্রামারই একজন রাইটার বুঝলি, সারা দিন কোড লিখেও কি রাইটার এর খেতাব পাবো না?

রিয়াঃ তা ঠিক, তা ঠিক। আচ্ছা তোর গল্প শোনা।


Story Time

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

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

তার ইচ্ছে নূন্যতম ৪০০ বই ধরবে এই রকম একটা সেলফ বানাবে। সেলফটাকে সর্বমোট ৪০ টা ভিন্ন ভিন্ন ভাগে ভাগ করবে। প্রতিটা ভাগের জন্য আলাদা করে নাম্বারিং করবে। আর নাম্বারিং টা শুরু হবে ০ থেকে। প্রতিটা ছোট বক্সের ভিতরে থাকবে আরও দশটা করে বই। ভিন্ন ভিন্ন টাইপের বই ভিন্ন ভিন্ন বক্সের মধ্যে রাখবে যেন খুব সহজেই বই গুলোকে খুঁজে পাওয়া যায়। প্রায় ৪০০ বই থেকে হুট করেই তো একটা বই খুঁজে পাওয়া যায় না, তাই না? এর জন্য বই গুলো সুন্দর করে সাজাতে হয়।

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


Continue Conversation (2)

রিয়াঃ বাহ, তুই তো খুব ভালো গল্প লিখেছিস। শিক্ষণীয় গল্প, আমাদের সবারই লাইব্রেরী তৈরি করা উচিৎ।

তামিমঃ মজা নিস না, এখান থেকে কোথায় কোথায় অ্যারে দেখতে পারছিস তাই বল।

রিয়াঃ আমি তো কেবল অ্যারে শিখতে পারলাম। আমি শুধু এত টুকুই জানি অনেক গুলো একই ধরনের ডেটা একসাথে রাখলে কাজ সহজ হয়। আর অনেক ডেটা এক সাথে রাখার জন্য দরকার অ্যারে। লুপ ব্যবহার করে আমরা সব গুলো ডেটার এক এক করে এক্সেস নিতে পারি। কারণ লুপের সাথে অ্যারের ইনডেক্স এর একটা সম্পর্ক আছে।

তামিমঃ তুই কি বুঝেছিস তা আমি জানতে চেয়েছি? এতোই যদি বুঝে থাকিস তাহলে বল আমার গল্পে অ্যারে কোথায় আছে?

রিয়াঃ হুহ, যেই না আমার গল্প তার ভিতরে আবার নাকি অ্যারে খুঁজতে হবে, যা ফোট।

তামিমঃ মেজাজ গরম করিস না রিয়া, এর পরে সমস্যায় পরলে আমি কিন্তু আর তোকে হেল্প করবো না।

রিয়াঃ আচ্ছা বাবা বলছি বলছি।

তামিমঃ বল, তাড়াতাড়ি বল।

রিয়াঃ আচ্ছা কি বলবো বলতো? সব জায়গায় তো অ্যারে।

তামিমঃ সব জায়গায় অ্যারে কই পেলি তুই?

রিয়াঃ দেখ, লাইব্রেরী মানেই তো একটা অ্যারে, বই এর অ্যারে। তারপরে অনেক গুলো বক্স করেছিস বই রাখার জন্য। এই গুলোও অ্যারে। বক্সের ভিতরেও বই থাকবে সেটাও অ্যারে। তুই গল্পের ভিতরে সব জায়গায় অ্যারে রেখেছিস। আমার মতো সদ্যজাত বাচ্চা যে কিনা কেবল অ্যারে সম্পর্কে জানলো সে তোর গল্পে সব জায়গায় অ্যারে পাচ্ছে। তাহলে তুই কি গল্প বানাইলি বল?

তামিমঃ হুহ, থাক তুই। আমি ফাংশন নিয়ে পড়া শুরু করবো। ফাংশন নিয়ে দেখিস কি গল্প বানায়!

রিয়াঃ তোর আর কষ্ট করতে হবে না, আমি অ্যারে নিয়ে আর একটু রিসার্স করি। তারপরে ফাংশন নিয়ে গল্প আমি বানাবো।

তামিমঃ হা হা হা, তুই লিখবি গল্প? তাহলেই হয়ছে।

রিয়াঃ কেন? একটু আগে না তুইই বললি যে সমস্ত প্রোগ্রামারই এক একজন রাইটার।

তামিমঃ হুম বলেছিলাম, কিন্তু তুই তো প্রোগ্রামারই না। হা হা হা

রিয়াঃ এখন হাসতে থাক। আগে অ্যারেটা ভালো মতো শেষ করি, তারপরে তোর সাথে কথা হচ্ছে।


Story Breakdown

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

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

তাহলে সহজ সমাধান কি? একটা নির্দিষ্ট খাতা যেখানে রোল অনুযায়ী সবার সিরিয়াল করা থাকবে। একটা খাতা থেকেই শিক্ষক সমস্ত শিক্ষার্থীর উপস্থিতি চেক করতে পারবেন। যেহেতু রোল নাম্বার দিয়ে এখানে সিরিয়াল করা আছে তাই শিক্ষক চাইলেই যে কোনো রোল থেকে বের করে আনতে পারবেন ওই শিক্ষার্থী কোন কোন দিন ক্লাসে এসেছে আর কোন দিন ক্লাসে আসে নি। এখানে যেই উপস্থিতি খাতার কথা বলা হচ্ছে সেটাই হচ্ছে অ্যারে। আর রোল নাম্বার দিয়ে যে শিক্ষার্থীদের সিরিয়াল করে রাখা হচ্ছে সেটা হচ্ছে ইনডেক্স নাম্বার। অ্যারের ইনডেক্স নাম্বার আর রোল নাম্বারের মধ্যে শুধু একটাই পার্থক্য। আর সেটা হচ্ছে রোল নাম্বার শুরু হয় ১ থেকে, অ্যারে ইনডেক্স নাম্বার শুরু হয় ০ থেকে।

যদি আপনার কাছে একটা অ্যারে থাকে এবং সেখানে ৩ টা ডেটা থাকে তাহলে ০ নাম্বার ইনডেক্সে আছে প্রথম ডেটা, ১ নাম্বার ইনডেক্সে আছে দ্বিতীয় ডেটা আর ২ নাম্বার ইনডেক্সে আছে তৃতীয় ডেটা। এই ইনডেক্স নাম্বার ব্যবহার করে আমরা যে কোনো ডেটা বের করে আনতে পারি। আর যেহেতু সব ডেটা একটা অ্যারের ভিতরে আছে তাই আমাদের শুধু একটা ভ্যারিয়েবলের দরকার হবে। ভ্যারিয়েবল অন্যান্য ডেটার মতো অ্যারেও ধারণ করে রাখতে পারে।

আমরা একটু মাহির সাহেবের কাছে ফিরে যায়। মাহির সাহেবের গল্পে আমরা অনেক গুলো অ্যারে নিয়ে কথা বলেছি। একটু ভালো করে লক্ষ্য করলেই আপনি সব গুলো অ্যারেই খুঁজে পাবেন। সবার প্রথমে যেই অ্যারেটা আছে এবং যেটা নিশ্চিত ভাবেই আপনার দৃষ্টিগোচর হবে না সেটা হচ্ছে একটা বই। আপনি হয়তো ভাবছেন বই কিভাবে একটা অ্যারে হতে পারে? এটা তো একটা সিঙ্গেল ডেটা, আমরা চাইলেই ভ্যারিয়েবলের ভিতরে একটা বইকে রাখতে পারি। অনেক গুলো বই যদি হতো তাহলে সেটা অ্যারে হতে পারতো।

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

মাহির সাহেব তার সেলফে ৪০ টা বক্স চাচ্ছেন। এই ক্ষেত্রে পুরো সেলফটা একটা অ্যারে হয়ে গেলো। এখন আমরা বলতে পারি সেলফ হচ্ছে বক্সের অ্যারে এবং বক্স নাম্বার ধরে ধরে কোন বক্সে কি আছে তা আমরা বের করে আনতে পারবো। আবার প্রতিটা বক্সের ভিতরে ১০ টা করে বই থাকবে। এই জন্য প্রতিটা বক্স নিজেও একটা অ্যারে, বই এর অ্যারে। আসলে আমরা যেদিকে তাকাবো সেদিকেই অ্যারে দেখতে পারবো। ক্লাসরুমে একটি বেঞ্চে ৩ জন বসতে পারে, তাহলে বেঞ্চ একটা অ্যারে। ক্লাসরুমে আবার ১২ টা বেঞ্চ আছে, তাহলে আমরা বলতেই পারি ক্লাসরুম হচ্ছে বেঞ্চের অ্যারে। একটা ক্লাসে ৩০ জন শিক্ষার্থী আছে, তাহলে ক্লাস হচ্ছে শিক্ষার্থীর অ্যারে। একটা ট্রেনে ১০ টা বগি আছে, ট্রেন হচ্ছে বগির অ্যারে। দোকানে একসাথে ১২ টা চিপসের প্যাকেট ঝুলিয়ে রাখে, এটাও একটা অ্যারে। আপনি যদি এখন চার পাশে একটু ভালো করে তাকান তাহলে আপনি সব জায়গাতেই অ্যারে খুঁজে পাবেন। আর বাস্তব জীবনে যদি আপনি অ্যারে খুঁজে পান তাহলে প্রোগ্রামিং এও আপনি অ্যারে নিয়ে কাজ করতে পারবেন। কারণ প্রোগ্রামিং হচ্ছে বাস্তব জীবনের প্রতিচ্ছবি।


Ending Conversation -

প্রেক্ষাপটঃ রিয়া অ্যারের কনসেপ্ট বুঝতে পেরে খুবই খুশি। সে অ্যারের কনসেপ্ট এর সাথে সাথে লুপের কাজও খুব ভালো ভাবে বুঝে ফেলেছে। সে এখন সব জায়গায় অ্যারে খুঁজে পাচ্ছে। এই সময় তামিম তাকে ফোন দিলো -

তামিমঃ হ্যালো

রিয়াঃ হুম বল।

তামিমঃ কিরে অ্যারে বোঝা শেষ?

রিয়াঃ হুম, শেষ। এখন পৃথিবী পুরো অ্যারে ময়।

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

রিয়াঃ হুম সেটাই। সারা জীবন তো শুধু কোড শেখার চেষ্টা করেছি, কোনো দিন বুঝতে পারিনি যে কোডের থেকে বেশি গুরুত্বপূর্ণ বিষয় হচ্ছে কনসেপ্ট ক্লিয়ার হওয়া।

তামিমঃ সেটাই, এখন কনসেপ্ট ক্লিয়ার হওয়াতে কোডও অনেক ইজি মনে হচ্ছে।

রিয়াঃ তুই ফাংশন শুরু করেছিস?

তামিমঃ না, একটু পরেই শুরু করবো। তোর গল্প লেখার কি হলো?

রিয়াঃ লিখবো লিখবো। কেবল তো অ্যারে শেষ করলাম। মাথায় সেট হওয়ার মতো সময় তো দিবি?

তামিমঃ ওকে ওকে, তুই মাথায় অ্যারে সেট কর আর আমি ফাংশন নিয়ে চিন্তা করতে বসে পরি।

রিয়াঃ ওকে বাই।

তামিমঃ রেডি থাকিস, কালকে তোকে পচাবো।

রিয়াঃ 👿

Edit this page on GitHub