রুবি প্রোগ্রামিং ভাষায় নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস (Control Flow Statements) হল সেই নির্দেশনা যা প্রোগ্রামের চলাচল নিয়ন্ত্রণ করে, অর্থাৎ কোন অংশটি এক্সিকিউট হবে এবং কখন তা নির্ধারণ করে। নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস-এর মধ্যে রয়েছে if, else, elsif, while loop, for loop, case/when, এবং break/next/redo ইত্যাদি।
নিচে রুবির নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস গুলি বিস্তারিতভাবে আলোচনা করা হলো।
১. if, else, elsif স্টেটমেন্ট (if, else, elsif Statements)
if স্টেটমেন্টটি সাধারণ শর্ত পরীক্ষা করে এবং যদি শর্ত সত্য (true) হয়, তবে নির্দিষ্ট কোড ব্লক এক্সিকিউট হয়। else এবং elsif শর্তের বিকল্প হিসেবে ব্যবহার করা হয়।
উদাহরণ:
age = 20
if age >= 18
puts "You are an adult"
else
puts "You are a minor"
endএখানে, যদি age ১৮ বা তার বেশি হয়, তবে "You are an adult" মেসেজটি প্রিন্ট হবে। অন্যথায়, "You are a minor" প্রিন্ট হবে।
elsif ব্যবহার:
age = 17
if age >= 18
puts "You are an adult"
elsif age >= 13
puts "You are a teenager"
else
puts "You are a child"
endএখানে, যদি age ১৮ বা তার বেশি না হয়, তবে elsif চেক করবে যদি age ১৩ বা তার বেশি হয়, তাহলে "You are a teenager" প্রিন্ট হবে।
২. while লুপ (while Loop)
while লুপ ব্যবহার করা হয় একটি শর্ত পূর্ণ না হওয়া পর্যন্ত কোড ব্লকটি পুনরায় এক্সিকিউট করার জন্য।
উদাহরণ:
i = 0
while i < 5
puts "i is #{i}"
i += 1
endএখানে, i ৫ এর কম হলে puts স্টেটমেন্টটি পুনরায় এক্সিকিউট হবে এবং i এর মান ১ করে বাড়ানো হবে।
৩. for লুপ (for Loop)
for লুপ ব্যবহার করা হয় একটি নির্দিষ্ট রেঞ্জ বা অ্যারে বা অন্য কোনো কালেকশন বা সিরিজের উপাদানগুলোতে লুপ চালানোর জন্য।
উদাহরণ:
for i in 0..4
puts "i is #{i}"
endএখানে i ০ থেকে ৪ পর্যন্ত এর মান পরিবর্তন করবে এবং প্রতি ইটারেশনে puts এক্সিকিউট হবে।
অ্যারে বা হ্যাশের জন্য:
fruits = ["Apple", "Banana", "Orange"]
for fruit in fruits
puts "Fruit: #{fruit}"
endএখানে, অ্যারের প্রতিটি উপাদানের জন্য লুপ এক্সিকিউট হবে এবং প্রিন্ট হবে।
৪. case/when স্টেটমেন্ট (case/when Statement)
case/when স্টেটমেন্ট একটি বিকল্প নিয়ন্ত্রণ প্রবাহ স্টেটমেন্ট যা একাধিক শর্ত পরীক্ষা করতে ব্যবহৃত হয়। এটি if/elsif/else স্টেটমেন্টের তুলনায় আরও ক্লিন এবং পাঠযোগ্য।
উদাহরণ:
day = "Monday"
case day
when "Monday"
puts "Start of the week"
when "Wednesday"
puts "Midweek"
when "Friday"
puts "End of the week"
else
puts "It’s the weekend"
endএখানে day এর মান অনুযায়ী when স্টেটমেন্টে উপযুক্ত ব্লক এক্সিকিউট হবে। যদি কোন শর্ত মিল না হয়, তবে else ব্লক এক্সিকিউট হবে।
৫. break, next, redo স্টেটমেন্টস (break, next, redo Statements)
রুবি বিভিন্ন নিয়ন্ত্রণ প্রবাহ স্টেটমেন্ট প্রদান করে যা লুপের কার্যক্রম নিয়ন্ত্রণ করতে সাহায্য করে।
- break: লুপকে প্রস্থান করতে ব্যবহৃত হয়।
- next: বর্তমান লুপের বর্তমান ইটারেশন স্কিপ করে পরবর্তী ইটারেশনে চলে যায়।
- redo: লুপের বর্তমান ইটারেশন আবার শুরু করতে ব্যবহৃত হয়।
উদাহরণ:
# break উদাহরণ
for i in 0..5
if i == 3
break # যখন i == 3 হবে, লুপ থামবে
end
puts i
endএখানে, যখন i এর মান ৩ হবে, break স্টেটমেন্টটি কার্যকর হবে এবং লুপ থেমে যাবে।
# next উদাহরণ
for i in 0..5
if i == 3
next # যখন i == 3 হবে, সেই ইটারেশন স্কিপ হবে
end
puts i
endএখানে, যখন i এর মান ৩ হবে, next স্টেটমেন্টটি কার্যকর হবে এবং ওই ইটারেশনটি স্কিপ হবে।
# redo উদাহরণ
i = 0
while i < 5
i += 1
if i == 3
redo # যখন i == 3 হবে, সেই ইটারেশন আবার শুরু হবে
end
puts i
endএখানে, যখন i এর মান ৩ হবে, redo স্টেটমেন্টটি কার্যকর হবে এবং ইটারেশন আবার শুরু হবে।
সারসংক্ষেপ
রুবিতে নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টগুলি প্রোগ্রামকে একটি নির্দিষ্ট শর্ত বা পরিসরের মধ্যে কার্যকর করার ক্ষমতা দেয়। if, else, elsif, while, for, case/when, এবং break/next/redo রুবির অন্যতম শক্তিশালী নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস। এগুলি ব্যবহার করে আপনি প্রোগ্রামের লজিক পরিচালনা করতে পারবেন এবং কোডের কার্যকারিতা উন্নত করতে পারবেন।
রুবি ভাষায় if, else, এবং elsif স্টেটমেন্টগুলি কোডের মধ্যে শর্ত (condition) চেক করার জন্য ব্যবহৃত হয়। এগুলি প্রোগ্রামটি ভিন্ন ভিন্ন শর্তের উপর ভিত্তি করে ভিন্ন আউটপুট বা একশন নির্ধারণ করতে সহায়ক। এই স্টেটমেন্টগুলির মাধ্যমে কোডে লজিকাল সিদ্ধান্ত নেওয়া যায়।
১. if স্টেটমেন্ট
if স্টেটমেন্টটি একটি শর্ত পরীক্ষা করে এবং শর্তটি সত্য (true) হলে কোডের কিছু অংশ কার্যকর হয়। যদি শর্তটি মিথ্যা (false) হয়, তবে কোডটি স্কিপ করা হয়।
সিনট্যাক্স:
if condition
# block of code
endউদাহরণ:
age = 20
if age > 18
puts "You are an adult."
endএখানে, যদি age ১৮ এর বেশি হয়, তাহলে "You are an adult." আউটপুট হবে। যদি শর্ত মিথ্যা হয়, তবে কিছু আউটপুট হবে না।
২. else স্টেটমেন্ট
else স্টেটমেন্টটি if স্টেটমেন্টের পরে ব্যবহৃত হয় এবং এটি if এর শর্ত মিথ্যা হলে কার্যকর হয়। অর্থাৎ, যদি if এর শর্তটি মিথ্যা হয়, তবে else এর ব্লকটি চালানো হয়।
সিনট্যাক্স:
if condition
# block of code if condition is true
else
# block of code if condition is false
endউদাহরণ:
age = 16
if age > 18
puts "You are an adult."
else
puts "You are a minor."
endএখানে, কারণ age ১৮ এর কম, "You are a minor." আউটপুট হবে।
৩. elsif স্টেটমেন্ট
elsif স্টেটমেন্টটি একাধিক শর্ত পরীক্ষা করার জন্য ব্যবহৃত হয়। এটি একাধিক শর্তের মধ্যে প্রথম সত্য শর্তটি পূর্ণ হলে তার ব্লকটি কার্যকর করে। যদি কোনো শর্ত মিথ্যা হয়, তবে পরবর্তী elsif শর্তটি পরীক্ষা করা হয়।
সিনট্যাক্স:
if condition1
# block of code if condition1 is true
elsif condition2
# block of code if condition2 is true
else
# block of code if none of the conditions are true
endউদাহরণ:
age = 25
if age < 18
puts "You are a minor."
elsif age >= 18 && age <= 35
puts "You are a young adult."
else
puts "You are an adult."
endএখানে:
- যদি
age১৮ এর কম হয়,"You are a minor."আউটপুট হবে। - যদি
age১৮ এবং ৩৫ এর মধ্যে হয়,"You are a young adult."আউটপুট হবে। - যদি উপরের কোনো শর্ত সত্য না হয়, তবে
"You are an adult."আউটপুট হবে।
সারসংক্ষেপ
if: শর্তটি সত্য হলে কোডের ব্লকটি কার্যকর হয়।else: যদিifএর শর্ত মিথ্যা হয়, তবেelseএর কোডটি কার্যকর হয়।elsif: একাধিক শর্ত পরীক্ষা করতে ব্যবহৃত হয়, এবং প্রথম সত্য শর্তটি পূর্ণ হলে তার কোড ব্লকটি কার্যকর হয়।
এই স্টেটমেন্টগুলো একসাথে ব্যবহার করে কোডে শর্তানুযায়ী বিভিন্ন একশন নির্ধারণ করা যায়।
Case স্টেটমেন্ট রুবি প্রোগ্রামিং ভাষায় একটি গুরুত্বপূর্ণ কন্ট্রোল ফ্লো স্টেটমেন্ট, যা নির্দিষ্ট শর্ত বা মানের উপর ভিত্তি করে একাধিক শাখায় বিভক্ত হতে সহায়তা করে। এটি সাধারণত switch বা select কন্ডিশনের মতো কাজ করে, যেখানে একাধিক বিকল্পের মধ্যে নির্বাচন করা হয়। রুবি ভাষায় case স্টেটমেন্টটি কন্ডিশনাল লজিককে আরও সহজ এবং পঠনযোগ্য করে তোলে।
১. Case স্টেটমেন্টের কাঠামো
রুবিতে case স্টেটমেন্টটি এমনভাবে লেখা হয়:
case variable
when condition1
# condition1 পূর্ণ হলে এখানে কোড
when condition2
# condition2 পূর্ণ হলে এখানে কোড
else
# উপরের কোনো শর্ত না পূর্ণ হলে এখানে কোড
endএখানে, variable হলো সেই মান বা ভেরিয়েবল যেটি আপনি চেক করতে চান। when ব্লকের মধ্যে আপনি একাধিক শর্ত দিতে পারেন, এবং যদি কোনো শর্ত মিলে যায়, তখন সেই শর্তের কোডটি চালিত হবে। যদি কোনো শর্ত পূর্ণ না হয়, তবে else ব্লকটি কার্যকর হবে।
২. Case স্টেটমেন্টের উদাহরণ
উদাহরণ ১: সাধারন Case স্টেটমেন্ট
number = 3
case number
when 1
puts "Number is One"
when 2
puts "Number is Two"
when 3
puts "Number is Three"
else
puts "Number is not between 1 and 3"
endআউটপুট:
Number is Threeএখানে, number ভেরিয়েবলের মান 3 হওয়ায় when 3 শর্তটি পূর্ণ হয় এবং "Number is Three" মুদ্রিত হয়।
উদাহরণ ২: else ব্লক ব্যবহার
day = "Monday"
case day
when "Monday"
puts "Start of the week"
when "Friday"
puts "End of the week"
else
puts "Midweek"
endআউটপুট:
Start of the weekএখানে, day এর মান "Monday" হওয়ায় when "Monday" শর্তটি পূর্ণ হয় এবং "Start of the week" আউটপুট হয়।
উদাহরণ ৩: Range ব্যবহার করে Case স্টেটমেন্ট
রুবিতে range ব্যবহার করে case স্টেটমেন্টে শর্ত দেওয়া যেতে পারে, যেমন সংখ্যার একটি পরিসর চেক করা:
number = 15
case number
when 0..10
puts "Number is between 0 and 10"
when 11..20
puts "Number is between 11 and 20"
else
puts "Number is greater than 20"
endআউটপুট:
Number is between 11 and 20এখানে, number ভেরিয়েবলের মান ১৫, যা 11..20 রেঞ্জে পড়ে, তাই "Number is between 11 and 20" আউটপুট হয়।
৩. Case স্টেটমেন্টে মাল্টিপল শর্ত
একটি case স্টেটমেন্টে একাধিক শর্ত দেয়া যেতে পারে। উদাহরণস্বরূপ, যদি কোনো ভেরিয়েবল একাধিক মানের মধ্যে পড়ে, তবে সব শর্তের জন্য একটি একক when ব্যবহার করা যেতে পারে।
fruit = "apple"
case fruit
when "apple", "banana"
puts "It's a fruit"
when "carrot"
puts "It's a vegetable"
else
puts "Unknown item"
endআউটপুট:
It's a fruitএখানে, fruit ভেরিয়েবলটি "apple" হলে, প্রথম when শর্তটি পূর্ণ হয় এবং "It's a fruit" মুদ্রিত হয়।
৪. Case স্টেটমেন্টে রিটার্ন ব্যবহার
এটি একটি ফাংশন বা মেথডে ব্যবহার করতে হলে, return স্টেটমেন্টও ব্যবহার করা যেতে পারে। ফাংশনের মধ্যে কেস স্টেটমেন্ট দিয়ে সিদ্ধান্ত নেওয়া যেতে পারে।
def check_day(day)
case day
when "Monday"
return "Start of the week"
when "Friday"
return "End of the week"
else
return "Midweek"
end
end
puts check_day("Friday")আউটপুট:
End of the weekএখানে, check_day মেথডে day ভেরিয়েবলের মান "Friday" থাকলে, when "Friday" শর্তটি পূর্ণ হয় এবং "End of the week" রিটার্ন করা হয়।
সারসংক্ষেপ
Case স্টেটমেন্ট রুবি প্রোগ্রামিং ভাষায় একটি শক্তিশালী কন্ট্রোল ফ্লো স্টেটমেন্ট, যা একাধিক শর্তের মধ্যে থেকে একটি নির্বাচন করার জন্য ব্যবহৃত হয়। এটি কোডকে আরও পরিষ্কার এবং পঠনযোগ্য করে তোলে, বিশেষত যখন একাধিক শর্তের মধ্যে থেকে একটি নির্বাচন করা হয়। when ব্লক ব্যবহার করে একাধিক শর্ত দেওয়া যায় এবং else ব্লকটি ব্যবহার করে ডিফল্ট আচরণ নির্ধারণ করা যায়।
রুবিতে Loops (লুপ) এমন একটি কৌশল যা ব্যবহার করে আমরা একাধিক বার কোনো কাজ বা কোড ব্লক চালাতে পারি। রুবি ভাষায় বেশ কিছু লুপ আছে, যার মধ্যে for, while, এবং until লুপ প্রধান। এগুলি কোডের কার্যকারিতা বাড়াতে এবং কোডের পুনরাবৃত্তি (repetition) করতে ব্যবহৃত হয়।
১. for Loop (ফর লুপ)
for লুপ একটি পূর্বনির্ধারিত সংখ্যক পুনরাবৃত্তি করার জন্য ব্যবহৃত হয়। এটি সাধারণত একটি রেঞ্জ বা অ্যারে থেকে মানগুলি পুনরায় গ্রহণ করতে ব্যবহৃত হয়।
Syntax:
for variable in collection
# Code to be executed
endউদাহরণ:
for i in 1..5
puts "This is iteration number #{i}"
endআউটপুট:
This is iteration number 1
This is iteration number 2
This is iteration number 3
This is iteration number 4
This is iteration number 5এখানে, 1..5 একটি রেঞ্জ প্রদান করেছে, এবং i ভেরিয়েবলটি ১ থেকে ৫ পর্যন্ত মান ধারণ করে একে একে কোড ব্লকটি চালিয়েছে।
২. while Loop (ওয়াইল লুপ)
while লুপ একটি নির্দিষ্ট শর্ত পূর্ণ না হওয়া পর্যন্ত কোড ব্লকটি চালিয়ে যায়। এই লুপটি সাধারণত তখন ব্যবহার করা হয় যখন আপনি জানেন না কয়বার লুপটি চলবে, কিন্তু শর্তটি পূর্ণ না হওয়া পর্যন্ত চলতে থাকবে।
Syntax:
while condition
# Code to be executed
endউদাহরণ:
i = 1
while i <= 5
puts "Iteration number #{i}"
i += 1
endআউটপুট:
Iteration number 1
Iteration number 2
Iteration number 3
Iteration number 4
Iteration number 5এখানে, while লুপটি তখন পর্যন্ত চলবে যতক্ষণ না i এর মান ৫ এর বেশি হবে। প্রতিবার লুপের মধ্যে i += 1 দ্বারা i এর মান বৃদ্ধি পাচ্ছে।
৩. until Loop (এntil লুপ)
until লুপ while লুপের বিপরীত। এটি তখন পর্যন্ত কোড ব্লকটি চালাবে যখন পর্যন্ত শর্তটি মিথ্যা থাকবে। এক কথায়, এটি একটি শর্ত পূর্ণ না হওয়া পর্যন্ত কোড চালানোর জন্য ব্যবহৃত হয়।
Syntax:
until condition
# Code to be executed
endউদাহরণ:
i = 1
until i > 5
puts "Iteration number #{i}"
i += 1
endআউটপুট:
Iteration number 1
Iteration number 2
Iteration number 3
Iteration number 4
Iteration number 5এখানে, until লুপটি তখন পর্যন্ত চলবে যতক্ষণ না i এর মান ৫ এর বেশি হবে। এটি while লুপের মতোই কাজ করে, তবে শর্তটি মিথ্যা হওয়া পর্যন্ত চালায়।
Loop Break এবং Next
break: লুপটি যখন একটি নির্দিষ্ট শর্ত পূর্ণ হলে একেবারে বন্ধ করতে ব্যবহার করা হয়।next: বর্তমান পুনরাবৃত্তি সারণী থেকে পরবর্তী পুনরাবৃত্তিতে চলে যাওয়ার জন্য ব্যবহৃত হয়।
উদাহরণ:
for i in 1..5
if i == 3
break # লুপটি ৩ এর পর বন্ধ হয়ে যাবে
end
puts i
endআউটপুট:
1
2এখানে, লুপটি ৩ আসার পর বন্ধ হয়ে যাবে, কারণ break কমান্ডটি ৩ পূর্ণ হলে কার্যকর হবে।
সারসংক্ষেপ
forলুপ: একটি নির্দিষ্ট রেঞ্জ বা অ্যারে থেকে মান নিয়ে একাধিকবার কোড চালানোর জন্য ব্যবহার হয়।whileলুপ: শর্তটি পূর্ণ না হওয়া পর্যন্ত কোড চালিয়ে যায়। এটি তখন ব্যবহৃত হয় যখন শর্তটি পূর্ণ হওয়ার আগে লুপটি চলতে থাকবে।untilলুপ: শর্তটি মিথ্যা না হওয়া পর্যন্ত কোড চালিয়ে যায়, এটিwhileলুপের বিপরীত।
এই তিনটি লুপ রুবি প্রোগ্রামিং ভাষায় পুনরাবৃত্তি কাজ সহজ করে দেয় এবং কোডের কার্যকারিতা উন্নত করে।
রুবি একটি অবজেক্ট-অরিয়েন্টেড এবং ডাইনামিক প্রোগ্রামিং ভাষা, যা ইনবিল্ট iterators প্রদান করে। Iterators হল এমন মেথডস যা কোনো সংগ্রহ বা সিকোয়েন্সের উপর একটি নির্দিষ্ট কাজ করে একে একে সমস্ত উপাদানকে প্রক্রিয়া করে। রুবি তে কিছু সাধারণ iterator রয়েছে, যেমন each, times, এবং upto।
১. each (প্রতি উপাদান)
each হল রুবির সবচেয়ে সাধারণ এবং জনপ্রিয় iterator। এটি কোনো সংগ্রহ (যেমন, অ্যারে বা হ্যাশ) এর প্রতিটি উপাদানের উপর কাজ করতে ব্যবহার করা হয়। each প্রতিটি উপাদানের উপর ব্লক বা কোডের একটি অংশ প্রক্রিয়া করে।
Syntax:
collection.each do |element|
# Code to execute for each element
endউদাহরণ:
# অ্যারে ব্যবহার করে each
[1, 2, 3, 4, 5].each do |number|
puts number * 2
end
# আউটপুট:
# 2
# 4
# 6
# 8
# 10
# হ্যাশ ব্যবহার করে each
person = { name: "John", age: 30, city: "New York" }
person.each do |key, value|
puts "#{key}: #{value}"
end
# আউটপুট:
# name: John
# age: 30
# city: New York২. times (নির্দিষ্ট সংখ্যক বার)
times iterator ব্যবহার করে আপনি একটি নির্দিষ্ট সংখ্যক বার একটি কোড ব্লক চালাতে পারেন। এটি একটি সংখ্যার উপর ভিত্তি করে কাজ করে এবং প্রতিবার 0 থেকে শুরু হওয়া একটি ইনডেক্সকে প্রদান করে।
Syntax:
number.times do
# Code to execute for each iteration
endউদাহরণ:
5.times do
puts "Hello, Ruby!"
end
# আউটপুট:
# Hello, Ruby!
# Hello, Ruby!
# Hello, Ruby!
# Hello, Ruby!
# Hello, Ruby!এখানে 5.times মানে কোড ব্লকটি ৫ বার রান করবে।
৩. upto (একটি মান থেকে আরেকটি মান পর্যন্ত)
upto iterator ব্যবহার করে আপনি একটি নির্দিষ্ট সংখ্যা থেকে আরেকটি সংখ্যার মধ্যে সকল সংখ্যা প্রক্রিয়া করতে পারেন। এটি একটি সংখ্যা থেকে শুরু করে অন্য একটি সংখ্যা পর্যন্ত চলতে থাকে এবং প্রতিটি সংখ্যার জন্য কোড ব্লক চালায়।
Syntax:
start.upto(end) do |number|
# Code to execute for each number from start to end
endউদাহরণ:
1.upto(5) do |i|
puts i
end
# আউটপুট:
# 1
# 2
# 3
# 4
# 5এখানে 1.upto(5) মানে ১ থেকে ৫ পর্যন্ত প্রতিটি সংখ্যার জন্য কোড ব্লক চালানো হবে।
সারসংক্ষেপ
- each: একটি সংগ্রহের (যেমন অ্যারে বা হ্যাশ) প্রতিটি উপাদানকে প্রক্রিয়া করতে ব্যবহৃত হয়।
- times: একটি নির্দিষ্ট সংখ্যক বার কোড ব্লকটি চালানোর জন্য ব্যবহৃত হয়।
- upto: একটি সংখ্যা থেকে শুরু করে অন্য একটি সংখ্যা পর্যন্ত কোড ব্লক চালাতে ব্যবহৃত হয়।
এই iterators রুবি প্রোগ্রামিং ভাষার শক্তিশালী টুল, যা ডেটা সংগ্রহ বা সংখ্যা নিয়ে কাজ করতে সহজ এবং কার্যকরী উপায় প্রদান করে।
Read more