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

অনেক সময় এমন হয় যে প্রোগ্রামে একই কাজ বা একই ধরনের কাজ বার বার করা লাগতেসে। আমরা চাইলে কাজগুলোকে বার বার লিখে দিতেই পারি কিন্তু সমস্যা হয় যখন আগে থেকে আমাদের জানা থাকে না ঠিক কতোবার এগুলো করবো। আর বার বার একই জিনিস লেখার মাঝে আসলে কোন মজা নেই।  এ ঝামেলা থেকে মুক্তির জন্যই এই লুপ (loop)।  লুপের কন্সেপ্ট টা অনেকটা এরকম - কোন কাজ যদি আমাদের নির্দিষ্ট বার (যেমন ১০ বার) করা লাগে, অথবা কোন একটা range এর মধ্যে করা লাগে তাহলে সেটাকে চাইলে আমরা লুপ দিয়ে করতে পারবো।  এবং লুপ এর খুবই গুরুত্ত পূর্ণ  একটা কাজ হল লুপটা শেষ হওয়া।

লুপ এর মোটামুটি ৪টা অংশ থাকেঃ

  • এক বা একাধিক কাজ থাকবে যেটা আমরা করবো
  • এক বা একাধিক শর্ত (condition) থাকবে যেটার উপর ভিত্তি করে লুপ decision নিবে যে উপরের কাজগুলো আবার করবে কি না
  • একটা initialization অংশ থাকবে যেখানে আমরা condition এর জন্য যেসব variable লাগবে সেগুলো define করবো
  • এটা আসলে মুল কাজেরই একটা অংশ, condition এর  variable গুলোকে update করা। এই অংশটা যদি আমরা না করি তাহলে আমাদের condition একই থাকবে এবং condition যদি সত্য হয় তাহলে আমাদের কাজ গুলো আজীবন চলতেই থাকবে বন্ধ হবে না। কারন যেহেতু আমরা variable update করতেসি না, condition-ও  মিথ্যা হবে না।

উপরের ৪টি অংশের initialization পার্টটা শুরুতে হয়ে থাকে, তারপর condition পার্ট, তারপর আসল যে কাজ গুলো যেটা আমরা করবো সেটা এবং সব শেষে condition এর variable গুলো update হবে।

উদাহরণ হিসেবে ছোটবেলার বেশ বোরিং একটা সৃতি মনে করাই দেই সেটা হল সন্ধ্যা বেলা ৬টা থেকে ৮টা যখন আমাদের পড়াশুনা করতে হতো, এটাকে আমরা লুপ দিয়ে চিন্তা করে দেখি। এখানে আমাদের কাজটা হল পড়াশুনা করা এবং একটা সময় range এর মধ্যে (৬টা থেকে ৮টা) করা। আমরা কাজটা পেয়ে গেছি এবং একটা range পেয়েছি জেটাকে condition এ ব্যাবহার করবো। পড়াশুনার condition হচ্ছে -

current_time = 6:00 // যেহেতু ৬টা থেকে শুরু করবো
if current_time < 8:00 // এখনও ৮টা বেজে না থাকলে
	keep reading // পড়াশুনা চলতে থাকবে :(

শুরুতে current_time যে বলে দিয়েছি সেটা হচ্ছে initialization পার্ট এবং current_time টা হল condition এর variable।  পড়তে বসে টেবিলে আমরা (আসলে আমি) যেটা করতাম সেটা হল কিছুক্ষন পর পর ঘড়ি দেখা - এখন কয়টা বাজে ৬:১০, ও আচ্ছা পড়াশুনা ... এখন কয়টা বাজে ৬:২০, হুম ঠিক আছে আবার পড়াশুনা ... এখন কয়টা বাজে ৬:৩০, মাত্র !!! আবারও পড়াশুনা ... এভাবে চলতো আরকি।  এখানে এইযে কিছুক্ষন পর পর ঘড়ি দেখতেসি আর নতুন সময়টা জেনে নিতেসি এটাই হল condition variable বা current_time টা update করা।

এখন জিনিসটা হল এরকম -

current_time = 6:00 // যেহেতু ৬টা থেকে শুরু করবো
if current_time < 8:00 // এখনও ৮টা বেজে না থাকলে
	keep reading // পড়াশুনা
	current_time = current_time + 10 minitue

হুম ঠিক আছে কিন্তু এটা তো condition যেটা আমরা আগের লেখাতে দেখে আসছি, লুপ কোথায়? খুবই সোজা আমরা এখানে if টাকে while দিবো তাহলেই  সেটা লুপ হয়ে যাবে।

current_time = 6:00 // যেহেতু ৬টা থেকে শুরু করবো
while current_time < 8:00 // এখনও ৮টা বেজে না থাকলে
	keep reading // পড়াশুনা
	current_time = current_time + 10 minute

while loop

প্রোগ্রামিং ল্যাঙ্গুয়েজ ভেদে বেশ কয়েক রকমের লুপিং থাকে তার মধে একটি হল while loop। while loop এ  initialization শুরুতে হয়

current_time = 6:30

এরপর condition চেকিং

while current_time < 8:00 // ঘড়ির কাটা ৮টার কম হলে

এরপর কাজ

	keep reading // পড়াশুনা চলবে

variable update

	current_time = current_time + 10 minute // ১০ মিনিট পর পর যেহেতু সময় দেখতেসি

এর পর আবার while এ current_time টা চেক হবে। এভাবে চলতে থাকবে যতক্ষণ না while এর condition টা মিথ্যা না হয়। আমাদের উদাহরনে current_time টা ৮টার বেশি হলে while এর condition মিথ্যা হবে, তখন লুপ থেকে বের হয়ে পরের কাজ গুলো হবে। (পড়াশুনা শেষ এখন টিভি দেখা + রাতের খাবার :D )

আমরা while loop এর structure টা আর একবার দেখে নেই -

initialize condition variable
while condition is true
	do the work
	update condition variable

for loop

for loop খুব সম্ভবত সব থেকে বেশি ব্যাবহার করা হয় এবং এটা বেশ কয়েকভাবে লেখা যায়। বেসিক structure টা এরকম -

for initialization part; condition check; update variable
	do the work

দেখতে একটু জটিল তাই না? লুপের ৪টা অংশ খুজে বের করা যাক! এখানে for লেখা দিয়ে শুরু হয় তারপর ৩টা অংশ থাকে যেটা দুটি সেমিকোলন ; দিয়ে আলাদা থাকে। প্রথমটি initialization পার্ট, দ্বিতীয়টি condition চেকিং পার্ট আর শেষটি update পার্ট। তারপর নিচে কাজটা যেটা আমরা করতে চাই।
এখানে একটা কিন্তু আছে সেটা হল কোনটার পর কোনটা হবে? একেবারে while loop এর মতো হয়, প্রথমে initialization, পরে condition চেক, তারপর কাজটা, তারপর variable update, তারপর আবার condition চেক ... এবং চলতে থাকবে যতক্ষণ না condition মিথ্যা হয়।

এখন যদি পড়াশুনা করার লুপটা আমরা for loop দিয়ে লিখি তাহলে এরকম হবে -

for current_time = 6:30; current_time < 8:30; current_time = current_time + 10 minute
	keep reading

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

আবারও বোনাস

নতুন জিনিস দেখালাম, আমাদের ক্যাল্কুলেটরকে আবারও আপডেট করা যাক। এখন পর্যন্ত ক্যালকুলেটর যেটা করে সেটা হল user কে জিজ্ঞেস করে কি করতে চাই, যোগ, বিয়োগ না কি? এরপর সেটা করে user কে উত্তর print করে দেয় তারপর প্রোগ্রাম শেষ!!! কিন্তু user যদি আরও কয়েক বার কাজ করতে চাই তাহলে?

আহা ... কয়েকবার (বারবার, আবারও) কথাটা চলে আসছে মানেই লুপ :D
আমরা যেটা করতে পারি সেটা হল পুরো ক্যাল্কুলেটরকে loop এর ভিতরে দিয়ে দিতে পারে তাহলে প্রোগ্রাম বার বার চলবে। এবং condition পার্টে ঠিক করবো প্রোগ্রাম বন্ধ হবে কি না।

ব্যাপারটা অনেকটা এরকম -

run_program = True // প্রথমে বলে নিলাম যে প্রোগ্রাম রান করতে চাই
while run_program is True
	run calculator program // আমাদের পুরো ক্যাল্কুলেটর পার্ট এখানে হবে, মানে কাজটা
	update run_program // user ঠিক করবে যে সে আবার প্রোগ্রাম রান করবে কি না

এবার পুরোটা দেখি কেমন হয় -

run_program = True
while run_program is True

	[1] যোগ
	[2] বিয়োগ
	[3] গুন
	[4] ভাগ
	[5] ভাগশেষ
	[0] বন্ধ করবো

	অই ভাই, কোনটা করবেন?

	choise = user choise input

	if choise = 0 // user প্রোগ্রাম বন্ধ করতে চাই
		run_program = False

	else // বন্ধ না হলে ক্যাল্কুলেটর চলত থাকবে
		x = users first input data
		y = users second input data

		if choise = 1 // যোগ
			z = x + y
			print z

		else if choise = 2 // বিয়োগ
			z = x - y
			print z

		else if  choise = 3 // গুন
			z = x * y
			print z

		else if choise = 4 // ভাগ
			z = x / y
			print z

		else if choise = 5 // ভাগশেষ
			z = x % y
			print z

এখানে user প্রোগ্রাম বন্ধ করতে চাই কিনা সেটা জানার জন্য একটা শূন্য 0 input হিসেবে নিতেসি এবং সেটা শুরুতে চেক করতেসি যে user শূন্য 0 দিসে কি না। দিলে run_program কে আমরা False করে দিতেসি। ফলে পরের বার যখন while এর condition এ run_program চেক হবে তখন False পাবে এবং প্রোগ্রাম বন্ধ হবে।

আমাদের ছোট্ট ক্যাল্কুলেটরের পুরো কাজ কিন্তু শেষ! :D


আগের লেখা: প্রোগ্রামিং কনসেপ্ট ১০১ - কন্ডিশন
পরবর্তী লেখা: প্রোগ্রামিং কনসেপ্ট ১০১ - ফাংশন