SL3 Framework

Loops

SL3 Framework - What is Loop

Programming Itself is A Loop, Infinity Learing Loop

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


Start Conversation -

প্রেক্ষাপটঃ তামিম কম্পিউটারের দিকে এক মনে তাকিয়ে আছে। কম্পিউটারে VSCode টা ওপেন করা, দেখে মনে হচ্ছে সে কোডের দিকে তাকিয়ে আছে। কিন্তু আসলে সে ভাবনার রাজ্যে বিরাজ করছে। রিয়া বার বার ফোন দিচ্ছে, কম করে হলেও সে ১৫ বার ফোন দিয়েছে। ফোন টেবিলের ওপরে পরে পরে বাজছে। হঠাত সে সম্বতি ফিরে পেল।

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

রিয়াঃ কই মরেছিলি? কতো বার ফোন দিচ্ছি?

তামিমঃ ও তুই?

রিয়াঃ আমি মানে? কয় বার ফোন দিয়েছি তুই জানিস? কম করে হলেও ৫০ বার ফোন দিয়েছি।

তামিমঃ ওহ।

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

তামিমঃ সত্যি কথা বলতে আমারও মনে হচ্ছে না যে আমি ইহজগতে আছি।

রিয়াঃ কি হয়েছে?

তামিমঃ সকাল থেকে কম করে হলেও ২০ টা ভিন্ন ভিন্ন টিউটোরিয়াল দেখেছি লুপের ওপরে। সি, সি++, জাভা, পাইথন, জাভাস্ক্রিপ্টে এখন লুপ ইমপ্লিমেন্টও করতে পারবো। সব প্রায় একই সিনট্যাক্স। সবাই একটা করে সিম্পল প্রবলেম সল্ভ করে দেখাচ্ছে লুপ ব্যবহার করে। কিন্তু আমি কখন কোথায় এবং কেন লুপ ব্যবহার করবো কেউ বলছে না, আর বললেও আমি বুঝতে পারছি না।

রিয়াঃ আমারও তো সেম অবস্থা। এই জন্যই তোকে ফোন দিলাম।

তামিমঃ একই কাজ বার বার করার জন্য লুপ ব্যবহার করতে হয় সেটা সবাই বলছে। কিন্তু কাজটা কি সেটা কেও বলছে না।

রিয়াঃ ১ থেকে ১০০ পর্যন্ত প্রিন্ট করার জন্য লুপ ব্যবহার করছে। হাজার বার নিজের নাম প্রিন্ট করার জন্যও লুপ ব্যবহার করছে।

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

রিয়াঃ কথা ঠিক, আমি ও বুঝতে পারছি না। এই জন্যই তো তোকে ৫০ বার ফোন দিচ্ছিলাম।

তামিমঃ কি বললি আর একবার বল তো।

রিয়াঃ আমিও বুঝতে পারছি না।

তামিমঃ এটা না, পরের কথাটা কি বললি যেন?

রিয়াঃ এই জন্যই তো তোকে ৫০ বার ফোন দিচ্ছিলাম।

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

রিয়াঃ বুঝে ফেলেছিস? কি বুঝলি কি বুঝলি আমাকে একটু বোঝা।

তামিমঃ তুই আমাকে ৫০ বার ফোন দিয়েছিস, এর জন্য তোকে কি করতে হয়েছে?

রিয়াঃ ডায়ালার থেকে তোর নাম্বার সিলেক্ট করে কল বাটনে প্রেস করতে হয়েছে।

তামিমঃ কতো বার?

রিয়াঃ যতবার কল করেছি ততবার।

তামিমঃ প্রত্যেকবার কি একই ভাবে কল করেছিস নাকি ভিন্ন কিছু করেছিস?

রিয়াঃ ভিন্ন আর কি ভাবে কল করা যায়? এগুলোই তো করতে হবে।

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

রিয়াঃ বাহ গ্রেট, সহজ তো।

তামিমঃ এখন অনেক কিছুই ক্লিয়ার। তবে আরও দুই তিনটা এক্সাম্পল খুঁজে না পেলে মাথা ঠাণ্ডা হচ্ছে না।

রিয়াঃ চারপাশে খুঁজতে থাক, দেখ আশেপাশে কি আছে।

তামিমঃ লুপের এক্সাম্পল এত সহজ হবে বলে আমার মনে হচ্ছে না। আশে পাশে তো তেমন কিছুই দেখছি না।

রিয়াঃ তোর টেবিলের ওপরে কি আছে?

তামিমঃ কি বোর্ড, মাউস, খাতা, ল্যাপটপ, সাউন্ডবক্স, ঘড়ি ... ওয়েট। ২ মিনিট নীরবতা পালন কর।

রিয়াঃ আমার কি টাকা গা থেকে খসে খসে পরছে যে ফোন দিয়ে নীরবতা পালন করবো?

তামিমঃ প্লিজ বোন আমার একটু চুপ কর।

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

রিয়াঃ আর কতক্ষণ চুপ করে থাকতে হবে একটু বলবি?

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

রিয়াঃ কি এক্সাম্পল? কি এক্সাম্পল?

তামিমঃ ঘড়ি।

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

তামিমঃ একটা অ্যানালগ ঘড়ির কথা চিন্তা কর। সেকেন্ডের কাটাটা শূন্য থেকে শুরু করে চলা শুরু করে। এক এক করে স্টেপ নিয়ে সে আগাতে থাকে। ষাট পর্যন্ত যাওয়ার পরে সে আবার এক থেকে শুরু করে। লুপটা যখন শেষ হয়ে যায় মিনিটের কাটাটা নিজের জায়গা থেকে এক ঘর সামনে সরে যায়। একটা লুপ এক মিনিট সম্পন্ন করছে।

রিয়াঃ ওয়াও, ডিজিটাল ঘড়িতে ব্যাপারটা আরও ভালো ভাবে বোঝা যাবে। কারণ এখানে প্রতিটা আপডেট বোঝা যাচ্ছে। ০ থেকে ৫৯ পর্যন্ত যাওয়ার পরেই মিনিট এক বৃদ্ধি পাচ্ছে। ঠিক একই ভাবে মিনিটের লুপ যখন ০ থেকে ৫৯ কমপ্লিট করে ফেলছে তখন ঘণ্টা এক বৃদ্ধি পেয়ে যাচ্ছে।

তামিমঃ একদম ঠিক বলেছিস। ওয়াও, লুপের কাজ অনেকটা বুঝে ফেলেছি।

রিয়াঃ হ, এই জন্যই তো কিছু না বুঝলে তোকেই ফোন দেই।

তামিমঃ এটাও কিন্তু একটা লুপ, তুই প্রতিদিন আমাকে বিভিন্ন জিনিস বোঝার জন্য ফোন দিস।

রিয়াঃ ফোন আমি দেই আমার বোঝার জন্য, উল্টো দেখা যায় তোর কনসেপ্ট ক্লিয়ার হয়ে গেছে। আজকে আমার ফোনের বিল তুই দিবি।

তামিমঃ হ, মানুষ তো আমাকে পাগল পাইছে।

রিয়াঃ আমি আর তোকে ফোন দিবো না। আমি না পারলে নিজে নিজেই বুঝবো তাও তোকে ফোন দিবো না।

তামিমঃ দেখ, আমি বিষয়টা কখন বুঝতে পারলাম সেটা তো মূল বিষয় না। মূল বিষয় হচ্ছে আমার সাথে সাথে তোর কনসেপ্ট ক্লিয়ার হচ্ছে কি না?

রিয়াঃ তা হচ্ছে।

তামিমঃ হিসাব ক্লিয়ার। তুই আসছিস কখন?

রিয়াঃ ৩ টার দিকে।

তামিমঃ 'No Team' আসবে চারটার ভিতরে, তুই ২ টার ভিতরে চলে আয়। ওরা আসার আগেই আমরা লুপ নিয়ে কিছু আলোচনা করে ফেলি।

রিয়াঃ আচ্ছা, তুই রেডি থাকিস। আমি আসছি।


What is Loop?

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


Why Do We Need Loop?

আমাদের পুরো ডকুমেন্ট জুড়েই আপনি লুপের বাস্তব উদাহরণ দেখতে পারবেন। এর মধ্যেই আপনি দুইটা বাস্তব উদাহরণ দেখেও ফেলেছেন। এই সমস্ত এক্সাম্পল থেকেই আপনি খুব ভালো ভাবে বুঝে যাবেন যে কেন আমরা লুপ ব্যবহার করি। তারপরেও আরও কিছু উদাহরণ দিয়ে বোঝানো যাক যে আসলেই কেন আমাদের লুপ ব্যবহার করা দরকার?

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

সমাধান হচ্ছে লুপ। আমরা ধরে নেই ইউজার যেই সংখ্যাটা ইনপুট দিবে সেটা N নামক ভ্যারিয়েবল স্টোর করে রাখবে। SUM নামক আর একটা ভ্যারিয়েবল ১ থেকে N পর্যন্ত সংখ্যার যোগফল ধারণ করে রাখবে। লুপ শুরু হওয়ার পূর্বে SUM = 0 থাকবে। কারণ শূন্যের সাথে যা যোগ করা যায় তাই হয়। লুপ শুরু হবে ১ থেকে এবং COUNT নামক ভ্যারিয়েবল ধারণ করে রাখবে যে কতদূর লুপ চলল। যতক্ষণ পর্যন্ত COUNT এর ভ্যালু N এর থেকে ছোট অথবা সমান থাকবে ততক্ষণ পর্যন্ত লুপ চলতেই থাকবে। লুপের ভিতরে SUM এর আগের ভ্যালু এর সাথে COUNT এর বর্তমান ভ্যালু যোগ করা হবে। এই নতুন ভ্যালু আবার SUM এর ভিতরেই স্টোর করে রাখা হবে। এই ভাবে করে N পর্যন্ত লুপ চললে শেষমেষ আমরা ১ থেকে N পর্যন্ত নাম্বার যোগফল পাবো, এখানে N এর ভ্যালু যায় হোক না কেন।

আমি যেই কথা গুলো এখানে বললাম, সেই কথা গুলো সুডো কোডে রূপান্তর করলে যা হয় -

START
N = INPUT("Value Of N")
SUM = 0
COUNT = 0
LOOP COUNT <= N:
SUM = SUM + COUNT
PRINT SUM
END

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


Continue Conversation (1) -

প্রেক্ষাপটঃ বেলা ২ টা বাজে। তামিম বসে বসে টম এন্ড জেরি দেখছে। এমন সময় রিয়ার আবির্ভাব।

রিয়াঃ কিরে গাধা কি করিস?

তামিমঃ দেখতে পারছিস না কি করি? চোখে কি ছানি পরেছে?

রিয়াঃ গাধা বসে বসে বিড়াল আর ইঁদুরের মারা মারি দেখছে তো, তাই কনফিউসড হয়ে গেছি।

তামিমঃ আমি গাধা হলে তুই শাঁকচুন্নি।

রিয়াঃ আচ্ছা বাদ দে, তোর লুপের কি অবস্থা?

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

রিয়াঃ আমি তোর লুপ জানতে চাই নি, জানতে চাইছি লুপ কত দূর শিখলি?

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

রিয়াঃ বলিস কি? আমার তো তোকে দেখে হিংসে হয়।

তামিমঃ কি! হিংসে হয়? আমার মতো হতে চাও?

রিয়াঃ হ চাই। আজকের প্লান কি? 'No Team' তো আসছে।

তামিমঃ কোনো প্লান নেই। তারা আসুক, দেখি আজকের আলোচনায় কি শেখা যায়?

রিয়াঃ তুই কি কোনো কারণে কোনো কিছুর ওপরে বিরক্ত? নাকি তোর শরীর খারাপ।

তামিমঃ আমার শরীর মন সব ঠিক আছে। কিন্তু লুপ শেখার পর থেকে আমি দেখছি, আমার চারপাশে যা আছে সবই তো লুপ। লুপের বাইরে তো কিছুই দেখতে পারছি না।

রিয়াঃ একটু পরিষ্কার করে বলবি?

তামিমঃ একটা করে দিন যাচ্ছে, নতুন একটা দিন শুরু হচ্ছে একই নিয়মে। এটা একটা লুপ। দিন, সপ্তাহ, মাস, বছর সব লুপ।

রিয়াঃ হুম।

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

রিয়াঃ যা ঘুরছে সবই লুপ?

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

রিয়াঃ শরীরের ভিতরে? কিভাবে?

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

রিয়াঃ আমার মনে হচ্ছে তোর আর পৃথিবীতে থাকা ঠিক হবে না।

তামিমঃ তুই আমাকে মেরে ফেলতে চাইছিস?

রিয়াঃ না না, আমি বলছিলাম পৃথিবী ছেড়ে একটু অন্যান্য গ্রহ নক্ষত্র থেকেও ঘুরে আয়। পৃথিবীর সব লুপতো উদ্ঘাটন করেই ফেলেছিস।

তামিমঃ তুই কি আমার সাথে মজা নিচ্ছিস?

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

তামিমঃ কারণ এটাও একটা লুপ। আমি যখনই কোনো কিছু তোর থেকে ভালো বুঝতে পারি তুই তখনই মজা নিস।

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

তামিমঃ এই খুশিতে এক কাপ কফি বানায়ে খাওয়াবি?

রিয়াঃ হ আমি তো তোর কাজের লোক, নিজে বানায়ে খা।

তামিমঃ এমন করিস কেন আপা? একটু বানায়ে দিলে কি হয়? এখনই 'No Team' চলে আসবে। আমার খুব মাথা ধরেছে।

রিয়াঃ আচ্ছা, তুই বস আমি কফি বানায়ে নিয়ে আসছি।


Type of Loop:

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

  • ফর (For) লুপ: লুপের কথা মাথায় আসলেই যে নামটা সবার প্রথমে মনে পরে সেটাই হচ্ছে ফর লুপ। ফর লুপ কাজ করে তিনটা ভিন্ন ভিন্ন বিষয়ের ওপরে নির্ভর করে। প্রথমত এর একটা এন্ট্রি পয়েন্ট থাকতে হবে যেখান থেকে লুপটা শুরু হবে। দ্বিতীয়ত একটা কন্ডিশন থাকতে হবে যার ওপরে নির্ভর করে লুপটা কখন থামবে। আর তৃতীয়ত ইনিশিয়াল ভ্যালু আপডেট করার সিস্টেম। সঠিক ভাবে ইনিশিয়াল ভ্যালু আপডেট করতে না পারলে লুপটা সারা জীবনের জন্য চলতেই থাকবে যাকে আমরা ইনফিনিটি লুপ বলে থাকি। ফর লুপ ব্যবহার করা হয় নির্দিষ্ট সময় পর্যন্ত লুপ চালানোর জন্য। যেমনঃ ১ থেকে ১০০ পর্যন্ত নাম্বার এর যোগফল করা। এই ক্ষেত্রে আমরা জানি আমাদের শুরু করতে হবে ১ থেকে এবং ১০০ তে গিয়ে শেষ হয়ে যাবে। সহজ কথায় বললে আমরা যদি লুপের রেঞ্জ জানি তাহলে ফর লুপ ব্যবহার করতে হবে।
  • হোয়াইল (While) লুপঃ দ্বিতীয় আর একটা লুপ হচ্ছে হোয়াইল লুপ। আপনি যদি শুধুমাত্র হোয়াইল লুপ ব্যবহার করেই লুপের সমস্ত কাজ করতে চান তাহলে সেটা সম্ভব। হোয়াইল লুপের ক্ষেত্রে লুপ চালানোর জন্য আপনার শুধুমাত্র একটা কন্ডিশন দরকার। কন্ডিশন সত্য হলে লুপ চলবে, কন্ডিশন মিথ্যা হয়ে গেলে লুপ থেমে যাবে। যখন আমরা জানি না যে ঠিক কতবার আমাদের লুপটা চলবে তখন আমরা হোয়াইল লুপ ব্যবহার করে থাকি। যেমনঃ আপনি ইউজারের কাছে থেকে ইনপুট নিতে চাচ্ছেন 'yes', ইউজার যতক্ষণ না 'yes' ইনপুট করবে ততক্ষণ বার বার ইউজারের কাছে ইনপুট দিতে বলবে। ইউজার যদি প্রথম বারেই 'yes' ইনপুট দিয়ে দেই তাহলে প্রথম বারেই লুপ থেমে যাবে। যদি ইউজার ৫৭ বারে ইনপুট 'yes' দেয় তাহলে ঠিক ৫৭ বারই লুপটা চলবে। এই ক্ষেত্রে লুপ চলার নির্দিষ্ট কোনো রেঞ্জ নেই।

Continue Conversation (2) -

প্রেক্ষাপটঃ তামিম আর রিয়া ঝগড়া করছে। তামিমের ছোট ভাই জুবায়ের মেঝেতে বসে খেলনা ট্রেইন নিয়ে খেলছে। ঠিক এমন সময় কলিং বেলের আওয়াজ শোনা গেলো। নো টিম চলে এসেছে -

তামিমঃ রিয়া গেটটা খোল, দেখতো কে এসেছে।

রিয়াঃ আমি খুলবো কেন? এটা তোর বাড়ি, তুই খুলবি।

তামিমঃ এই লুপটা সারা দিন আমার ওপরেই চলে, একটু খোল না বোন।

রিয়াঃ হুহ, যাচ্ছি।

সেতুঃ হাই রিয়া আপু।

রিয়াঃ নো টিম ইস হেয়ার? প্লিজ ওয়েলকাম।

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

তামিমঃ ওহ ভাই জান সবাই চলে এসেছেন। কেমন আছেন সবাই?

বিকেঃ আমি ভালো আছি, তুমি কেমন আছো? স্টাডি কেমন চলছে?

রিয়াঃ ওর কথা আর বলেন না। ও তো পৃথিবীর সব লুপই শেষ করে ফেলেছে। যেখানে তাকাই সেখানেই নাকি লুপ দেখে।

মাহিরঃ তাই নাকি? ও তো জিনিয়াস। আমিই এক মাত্র গাধা মনে হয়।

তামিমঃ না ভাই, কি যে বলেন না। রিয়া একটু বাড়ায়ে বলছে।

তামিমঃ রিজুয়ান ভাই যে কোনো কথায় বলছেন না।

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

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

মাহিরঃ আপনি যদি কঠিন বলেন তাহলে আমাদের গল্প শোনাবে কে?

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

বিকেঃ আপনি ঠিকই বলেছেন ভাই, সব থেকে সমস্যার ব্যাপার হচ্ছে লুপের কাজ খুঁজে বের করা। বার বার রিপিট করলেই তো হবে না, একটা কাজ তো করতে হবে। ঠিক কোন কাজটা লুপ দিয়ে করা যাবে এটাই বোঝাটা একটু কষ্টকর।

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

বিকেঃ একটু ভেঙ্গে বলবেন প্লিজ?

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

সেতুঃ এটা তো খুব সহজ ব্যাপার, একটা লুপ চালিয়ে দিলেই তো হয়ে গেলো।

মাহিরঃ জ্বি, এখানে লুপ লাগবে। কিন্তু আমাদের বুঝতে হবে কেন লুপ লাগবে।

সেতুঃ একটু ক্লিয়ার করেন তো ভাই।

মাহিরঃ এখানে দশ জন স্টুডেন্ট প্রত্যেকের কাছে ইমেইল পাঠাতে হবে, একই ধরনের কাজ। এটা একটা লুপের মধ্যে আমরা ফেলতে পারি। কিন্তু মেইল করা, রেসাল্ট দেখা বা অ্যাকাউন্ট চেক করার কাজ কিন্তু এক না। তাই এখানে আমরা লুপ চালাতে পারি না।

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

মাহিরঃ একটা লুপ দিয়ে কিভাবে?

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

মাহিরঃ বাহ দারুণ তো।

রিয়াঃ কিন্তু এই তিনটা কাজ যদি একই সময় একই জায়গায় দরকার না হয়ে ভিন্ন ভিন্ন সময় ভিন্ন ভিন্ন জায়গায় দরকার হয় তখন?

বিকেঃ সিম্পল, তখন তিনটা ভিন্ন কাজের জন্য তিনটা ভিন্ন লুপের দরকার হবে। যখন যেই কাজ দরকার হবে, তার জন্য একটা লুপ চালাবেন। এই ক্ষেত্রে মাহির ভাইয়ের কথাটায় মাথায় রাখতে হবে, একই প্যাটার্নের কাজের জন্য একটা লুপ।

রিয়াঃ এবার বুঝতে পেরেছি।

রিজুয়ানঃ আপনারা কি এইগুলো নিয়েই আলোচনা করবেন? নাকি আমি গল্প শুরু করবো?

সেতুঃ ভাই আপনি শুরু করেন শুরু করেন।

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

বিকেঃ না ভাই, আমরা আপনার গল্প শোনার জন্য বসে আছি।

রিজুয়ানঃ ওকে তাহলে গত কালকের গল্পটাই এক্সটেন্ড করি -


Story Time

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

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

লাঞ্চ শেষে কফির কাপ হাতে নিয়ে সে আবার তার কিউবিক্যালসে ফিরে আসে। কিছু সময় ফেসবুকে স্ক্রোল করার পরে আবার কাজে বসে পরে। তার গানের প্লেলিস্টটা ওপেন করে দিয়ে হেডফোনেটা কানে লাগিয়ে হেলে দুলে কাজ শুরু করে। ৩:৩০ এর সময় সে কাজ বন্ধ করে এক কাপ ক্যাপাসিনো নিয়ে ক্রিয়েটিভ রুমে গিয়ে কিছুক্ষণ বসে থাকে। ৬ টার সময় সে অফিস থেকে বের হয়। কিন্তু বাড়ির উদ্দেশ্যে নয়।

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

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


Continue Conversation (3) -

রিজুয়ানঃ এবার বলেন, কোথায় কোথায় লুপ আছে?

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

রিজুয়ানঃ আপনি তো ভাই অনেক অ্যাবস্ট্রাকট ভাবে চিন্তা করলেন। আরও স্পেসিফিক ভাবে কে বলবে?

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

বিকেঃ গুড এক্সাম্পল।

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

মাহিরঃ সবাই তো সব কিছু বলে দিতেছেন, আমি কি বলবো?

সেতুঃ আপনি একা না, আমি ও এখনো কিছু বলতে পারি নি।

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

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

রিয়াঃ হুম, তা ঠিক। আমরা তো শুধু কনসেপ্ট বুঝবো এবং বাস্তব এক্সাম্পল খুঁজে বের করবো।

জুবায়েরঃ ভাইয়া, ভাইয়া।

তামিমঃ জুবায়ের ডিস্টার্ব করিস না, ওই ঘরে গিয়ে খেল।

জুবায়েরঃ শোনো না ভাইয়া।

তামিমঃ বল কি বলবি?

জুবায়েরঃ এই খেলনা ট্রেইন টাও কি তাহলে লুপ? এটা তো বার বার শুধু ঘুরছে।

সবাইঃ হা হা হা

রিজুয়ানঃ জুবায়ের, তুমি তো প্রোগ্রামার হয়ে গেছ। লুপ বুঝে ফেলেছ মানে তুমি অনেক কিছুই বুঝে ফেলেছ।


Story Breakdown

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

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

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

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

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

LOOP 1 TO 1000:
print "আমি আমার দেশকে ভালোবাসি"

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


Ending Conversation:

বিকেঃ লুপ নিয়ে আলোচনা শেষ, এখন মনে হয় সবার লুপের কনসেপ্ট ক্লিয়ার।

রিয়াঃ সবার ক্লিয়ার, এমনকি জুবায়েরও বুঝতে পেরেছে।

সেতুঃ শুধু লুপ না, কন্ডিশন লুপ দুটোই একদম পানির মত পরিষ্কার।

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

রিয়াঃ একদম মিথ্যা কথা বলিস না। তুই বাসায় একা একাও অনেক স্টাডি করেছিস।

তামিমঃ একা একা তো স্টাডি করবোই, গ্রুপ স্টাডি মানে কি শুধু গ্রুপেই স্টাডি করতে হবে?

সেতুঃ তুমি ঠিক বলেছ তামিম। গ্রুপ স্টাডি হচ্ছে আমরা কি শিখবো, কিভাবে শিখবো, যা শিখছি তা সঠিক শিখছি কি না সেগুলো ভ্যালিডেট করার জায়গা। গ্রুপে কন্ট্রিবিউট করতে হলেও তো অনেক বেশি নিজের স্টাডি করতে হয়।

মাহিরঃ এর বাস্তব উদাহরণ হচ্ছে রিজুয়ান ভাই। গল্প লিখে নিয়ে চলে আসছে প্রতি দিন।

রিজুয়ানঃ আরে না ভাই, আমি আর কি স্টাডি করছি। আসলে স্টাডির কি কোনো শেষ আছে?

বিকেঃ স্টাডি এমন একটা জিনিস, যে যত বেশি স্টাডি করবে তার মনে হবে তার জ্ঞান তত কম। কারণ সে সামনের অনেক অজানা বিষয় সম্পর্কে নতুন করে জানতে পারবে।

রিজুয়ানঃ একদন ঠিক বলেছেন। তবে ভাই আমার দেরি হয়ে যাচ্ছে, আজকে উঠতে হবে।

মাহিরঃ আপনাদের সাথে আড্ডা দিতে দিতে কখন সময় চলে যায় বোঝায় যায় না। আমারও খুব ভালো লাগছে আড্ডা দিতে, কিন্তু আমারও যেতে হবে।

তামিমঃ তাহলে কালকে কি একই সময় আসছেন?

বিকেঃ না ভাই, কালকে থেকে তো আর আসতে পারছি না। কালকে থেকে অফিস। আবার পরের শুক্রবারে চেষ্টা করবো।

মাহিরঃ সমস্যা নেই, আমরা গুগল মিটে জয়েন করে আড্ডা দিবো।

রিয়াঃ কালকে তাহলে আমাদের একা একা স্টাডি করতে হবে?

তামিমঃ হুম, তাও আবার অ্যারে নিয়ে।

সেতুঃ সমস্যা নেই, তোমরা দুই জন আগে আগে অ্যারেটা শিখে ফেলো, আমরা শুক্রবারে এসে তোমাদের থেকে ভালো করে শিখবো।

রিজুয়ানঃ আজকের মতো তাহলে বিদায়, সবাই ভালো থাকবেন।

Edit this page on GitHub