Groovy তে নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস (Control Flow Statements) প্রোগ্রামের ভিতরে কোডের কার্যক্রম নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এগুলি শর্তাধীন সিদ্ধান্ত (Conditional Statements), লুপ (Loops), এবং ব্রেক/কন্টিনিউ (Break/Continue) এর মতো গুরুত্বপূর্ণ স্টেটমেন্টস নিয়ে গঠিত। এই স্টেটমেন্টগুলির মাধ্যমে আমরা কোডের কার্যক্রম পরিবর্তন করতে পারি।
Groovy তে ব্যবহারযোগ্য প্রধান নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস গুলি হলঃ
if-else
স্টেটমেন্ট শর্তের উপর ভিত্তি করে কোডের একটি নির্দিষ্ট অংশ চালাতে ব্যবহৃত হয়।
if
স্টেটমেন্ট শর্ত পূর্ণ হলে কিছু কাজ করে।
def x = 10
if (x > 5) {
println "x is greater than 5"
}
এখানে, যেহেতু x
এর মান 10, শর্ত পূর্ণ হবে এবং "x is greater than 5" আউটপুট হবে।
if
শর্ত পূর্ণ না হলে else
ব্লকটি চালানো হয়।
def x = 3
if (x > 5) {
println "x is greater than 5"
} else {
println "x is less than or equal to 5"
}
এখানে, x
এর মান 3, তাই else
ব্লকটি রান হবে এবং আউটপুট হবে "x is less than or equal to 5"।
যদি একাধিক শর্ত পরীক্ষা করতে হয়, তাহলে else if
ব্যবহার করা হয়।
def x = 8
if (x > 10) {
println "x is greater than 10"
} else if (x == 8) {
println "x is equal to 8"
} else {
println "x is less than 8"
}
এখানে, x
এর মান 8 হওয়ায় "x is equal to 8" আউটপুট হবে।
switch
স্টেটমেন্টে একাধিক শর্ত পরীক্ষা করা হয়, এবং যেটি পূর্ণ হয়, সেই ব্লকটি রান হয়।
def x = 2
switch (x) {
case 1:
println "x is 1"
break
case 2:
println "x is 2"
break
case 3:
println "x is 3"
break
default:
println "x is not 1, 2, or 3"
}
এখানে, x
এর মান 2, তাই "x is 2" আউটপুট হবে।
Groovy তে তিন ধরনের লুপ রয়েছে: for
লুপ, while
লুপ এবং do-while
লুপ। এগুলি বিভিন্ন শর্তে কোড রিপিট করার জন্য ব্যবহৃত হয়।
for
লুপ সাধারণত নির্দিষ্ট সংখ্যক বার কোন কাজ পুনরাবৃত্তি করতে ব্যবহৃত হয়।
for (int i = 0; i < 5; i++) {
println "Iteration $i"
}
এখানে, i
0 থেকে 4 পর্যন্ত ইটারেট করে এবং "Iteration 0", "Iteration 1" ইত্যাদি আউটপুট হবে।
Groovy তে each
মেথডের মাধ্যমে একটি লিস্ট বা অ্যারের উপর লুপ করা যায়।
def numbers = [1, 2, 3, 4, 5]
numbers.each { println it }
এখানে, each
লুপ numbers
লিস্টের প্রতিটি উপাদানকে it
পরিবর্তনশীলের মাধ্যমে অ্যাক্সেস করে আউটপুট প্রদান করবে।
while
লুপ তখন পর্যন্ত চলবে যতক্ষণ না শর্ত পূর্ণ হয়।
def x = 1
while (x <= 5) {
println "x is $x"
x++
}
এখানে, x
1 থেকে 5 পর্যন্ত বৃদ্ধি পাবে এবং আউটপুট হবে "x is 1", "x is 2" ইত্যাদি।
do-while
লুপ প্রথমে কোড ব্লক চালায় এবং পরে শর্ত পরীক্ষা করে।
def x = 1
do {
println "x is $x"
x++
} while (x <= 5)
এখানে, প্রথমে x
এর মান 1 প্রিন্ট হবে এবং তারপর শর্ত পরীক্ষা করা হবে। যতক্ষণ না শর্ত পূর্ণ হয়, লুপ চলতে থাকবে।
break
ব্যবহার করে লুপ বা switch-case থেকে বেরিয়ে আসা যায়।
for (int i = 1; i <= 5; i++) {
if (i == 3) {
break // loop will terminate when i is 3
}
println i
}
এখানে, যখন i
এর মান 3 হবে, break
স্টেটমেন্ট লুপ বন্ধ করে দেবে এবং আউটপুট হবে 1
, 2
।
continue
ব্যবহার করে লুপের পরবর্তী ইটারেশনে চলে যাওয়া যায়, যা বর্তমান ইটারেশনকে স্কিপ করে।
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue // skip when i is 3
}
println i
}
এখানে, যখন i
এর মান 3 হবে, continue
স্টেটমেন্ট চালু হবে এবং 3 স্কিপ হবে। আউটপুট হবে 1
, 2
, 4
, 5
।
Groovy তে, একলাইন শর্ত যাচাই করার জন্য ternary operator
ব্যবহৃত হয়। এটি if-else
এর একটি ছোট সংস্করণ।
def result = (5 > 3) ? "True" : "False"
println result // Output: True
এখানে, শর্ত 5 > 3
সঠিক হওয়ায়, "True" রিটার্ন হবে।
Groovy তে নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস (Control Flow Statements) কোডের কার্যক্রম নিয়ন্ত্রণ করতে ব্যবহৃত হয়, যেমন if-else
, switch-case
, লুপ, break
এবং continue
। এই স্টেটমেন্টগুলির মাধ্যমে আমরা শর্তাধীন সিদ্ধান্ত গ্রহণ করতে পারি, কোড পুনরাবৃত্তি করতে পারি, এবং লুপ বন্ধ করতে বা কিছু স্কিপ করতে পারি। Groovy এর সহজ এবং পরিষ্কার সিনট্যাক্স এসব নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস ব্যবহার করা আরও সহজ এবং দক্ষ করে তোলে।
if
, else
, এবং switch
স্টেটমেন্টGroovy তে শর্তযুক্ত স্টেটমেন্টগুলো Java এর মতোই ব্যবহৃত হয়, তবে Groovy এর সরল ও সংক্ষিপ্ত সিনট্যাক্সের কারণে এটি আরও দ্রুত এবং সহজে লেখা যায়। Groovy তে শর্তাবলী প্রয়োগ করার জন্য if
, else
, এবং switch
স্টেটমেন্ট ব্যবহার করা যায়। নিচে প্রতিটি স্টেটমেন্টের উদাহরণসহ আলোচনা করা হলো।
if
এবং else
স্টেটমেন্ট সাধারণত শর্ত সাপেক্ষে কোড এক্সিকিউট করার জন্য ব্যবহৃত হয়। if
স্টেটমেন্টের শর্ত true
হলে এর ভিতরের কোড এক্সিকিউট হবে। যদি if
স্টেটমেন্ট false
হয় এবং else
ব্লক থাকে, তবে else
ব্লকের কোড এক্সিকিউট হবে।
def age = 18
if (age >= 18) {
println "You are eligible to vote."
} else {
println "You are not eligible to vote."
}
Groovy তে if-else
স্টেটমেন্ট সংক্ষেপে লিখতে Ternary Operator ব্যবহার করা যায়। এটি if-else
এর মতোই কাজ করে।
def age = 20
def eligibility = (age >= 18) ? "Eligible" : "Not Eligible"
println eligibility // Output: Eligible
Java এর তুলনায় পার্থক্য: Groovy তে Ternary অপারেটর এবং ব্রেস ({}
) ছাড়াও কাজ করা যায়, যা কোডিংকে আরও সহজ করে তোলে।
if-else if-else
স্টেটমেন্ট ব্যবহার করে একাধিক শর্ত পরীক্ষা করা যায়। যখন একাধিক শর্ত থাকে, তখন এই স্ট্রাকচার ব্যবহার করা হয়।
def score = 85
if (score >= 90) {
println "Grade: A"
} else if (score >= 80) {
println "Grade: B"
} else if (score >= 70) {
println "Grade: C"
} else {
println "Grade: F"
}
এই উদাহরণে একাধিক শর্ত আছে এবং প্রতিটি শর্ত অনুযায়ী আলাদা ফলাফল প্রদান করে।
Groovy তে switch
স্টেটমেন্ট ব্যবহার করে একাধিক মানের ভিত্তিতে শর্ত পরীক্ষা করা যায়। এটি অনেকটা if-else
এর মতো কাজ করে, তবে যখন নির্দিষ্ট মানের উপর ভিত্তি করে সিদ্ধান্ত নেওয়া হয়, তখন এটি আরও কার্যকরী।
Groovy তে switch
এর কেসগুলিতে ক্লোজার, রেঞ্জ, লিস্ট এবং টাইপও ব্যবহার করা যায়, যা Java তে নেই। এই কারণে Groovy তে switch
আরও শক্তিশালী এবং নমনীয়।
def grade = 'B'
switch (grade) {
case 'A':
println "Excellent!"
break
case 'B':
println "Good job!"
break
case 'C':
println "Needs improvement."
break
default:
println "Invalid grade."
}
def score = 75
switch (score) {
case 90..100:
println "Grade: A"
break
case 80..89:
println "Grade: B"
break
case 70..79:
println "Grade: C"
break
default:
println "Grade: F"
}
def fruit = "Apple"
switch (fruit) {
case ["Apple", "Banana", "Orange"]:
println "It's a fruit."
break
case ["Carrot", "Potato"]:
println "It's a vegetable."
break
default:
println "Unknown item."
}
Java এর তুলনায় পার্থক্য: Java তে সাধারণত switch
স্টেটমেন্টে শুধু নির্দিষ্ট মান (ইন্টিজার, স্ট্রিং, ইত্যাদি) ব্যবহার করা যায়। Groovy তে switch
আরও শক্তিশালী এবং এটি রেঞ্জ, লিস্ট এবং ক্লোজার সমর্থন করে।
Groovy তে if
, else
, এবং switch
স্টেটমেন্ট Java এর মতোই কাজ করে, তবে Groovy এর সংক্ষিপ্ত এবং নমনীয় সিনট্যাক্সের কারণে কোড লেখা আরও সহজ হয়। Groovy এর switch
স্টেটমেন্ট আরও শক্তিশালী এবং এটি রেঞ্জ, লিস্ট এবং টাইপ চেকিংয়ের সুবিধা প্রদান করে।
for
, while
, do-while
in GroovyGroovy, like many other programming languages, provides various looping constructs that allow you to execute a block of code multiple times based on certain conditions. The three main types of loops in Groovy are for
, while
, and do-while
. These loops are used to repeat actions, making them fundamental to control flow in programming.
Below is a detailed explanation of these loops in Groovy.
for
LoopThe for
loop is used when you know the number of iterations beforehand. It allows you to repeat a block of code a fixed number of times. In Groovy, the for
loop has two common forms:
for
loop:The basic for
loop structure in Groovy works like in other languages, with initialization, condition, and increment.
Syntax:
for (initialization; condition; increment) {
// Code to be executed
}
Example:
for (int i = 0; i < 5; i++) {
println "Iteration number: $i"
}
Here, the loop will print the iteration number from 0 to 4. The loop runs as long as the condition i < 5
is true. After each iteration, i
is incremented by 1.
for
loop (foreach loop):Groovy provides an enhanced for
loop to iterate through collections (arrays, lists, etc.) in a more readable way.
Syntax:
for (item in collection) {
// Code to be executed
}
Example:
def numbers = [1, 2, 3, 4, 5]
for (num in numbers) {
println "The number is: $num"
}
Here, the loop iterates over each item in the numbers
list and prints it.
while
LoopThe while
loop is used when you want to repeat a block of code as long as a specified condition is true. The condition is checked before each iteration.
Syntax:
while (condition) {
// Code to be executed
}
Example:
int i = 0
while (i < 5) {
println "Current value of i: $i"
i++
}
In this example, the loop will continue to execute as long as the condition i < 5
remains true. After each iteration, i
is incremented by 1.
do-while
LoopThe do-while
loop is similar to the while
loop, but with one key difference: the condition is checked after the code block executes. This means the code block will run at least once, even if the condition is false from the start.
Syntax:
do {
// Code to be executed
} while (condition)
Example:
int i = 0
do {
println "Current value of i: $i"
i++
} while (i < 5)
Here, the loop will print the value of i
from 0 to 4. The condition i < 5
is checked after each iteration, so the loop will run until i
reaches 5.
for
loop: Used when the number of iterations is known beforehand. It can be used for iterating over collections as well.while
loop: Executes the block of code as long as the condition is true. The condition is checked before entering the loop body.do-while
loop: Executes the block of code at least once and then checks the condition. The condition is checked after the code block is executed.These looping structures are essential for managing repetitive tasks and implementing efficient algorithms in Groovy programs.
break
, continue
, এবং Labels
এর ব্যবহারGroovy তে break
, continue
, এবং labels
ব্যবহার করা হয় লুপ (loop) নিয়ন্ত্রণের জন্য। এই নির্দেশাবলী কোডের প্রবাহ পরিবর্তন করতে সাহায্য করে, বিশেষত যখন আপনি একটি নির্দিষ্ট লুপ বা ব্লক থেকে দ্রুত প্রস্থান করতে চান বা কিছু নির্দিষ্ট শর্তে লুপ চালিয়ে যেতে চান।
break
নির্দেশাবলীbreak
একটি লুপ বা সুইচ স্টেটমেন্ট থেকে বের হয়ে যেতে ব্যবহৃত হয়। যখন break
এক্সিকিউট হয়, তখন এটি বর্তমান লুপ বা সুইচ ব্লক থেকে প্রস্থান করে এবং পরবর্তী নির্দেশাবলীতে চলে যায়। এটি সাধারণত শর্ত অনুসারে লুপের মধ্যে এক্সিকিউশন বন্ধ করতে ব্যবহৃত হয়।
break
):for (int i = 1; i <= 5; i++) {
if (i == 3) {
break // যখন i 3 হবে, তখন লুপটি থেকে বেরিয়ে যাবে
}
println "i = $i"
}
আউটপুট:
i = 1
i = 2
এখানে, যখন i == 3
, তখন break
এক্সিকিউট হয় এবং লুপটি বন্ধ হয়ে যায়।
continue
নির্দেশাবলীcontinue
একটি লুপের বর্তমান ইটারেশন বাদ দিয়ে পরবর্তী ইটারেশনে চলে যায়। এটি শর্তানুযায়ী লুপের মধ্যে বর্তমান ইটারেশনটি বাদ দেওয়ার জন্য ব্যবহৃত হয় এবং পরবর্তী ইটারেশনে চলে যায়। অর্থাৎ, এটি লুপটি চলতে থাকলেও কিছু নির্দিষ্ট শর্তে নির্দিষ্ট কাজ বাদ দেয়।
continue
):for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue // যখন i 3 হবে, তখন শুধুমাত্র 3 কে বাদ দিয়ে পরবর্তী লুপে চলে যাবে
}
println "i = $i"
}
আউটপুট:
i = 1
i = 2
i = 4
i = 5
এখানে, i == 3
হলে continue
এক্সিকিউট হয় এবং ৩ বাদ দিয়ে পরবর্তী মানগুলো প্রিন্ট হয়।
Groovy তে labels ব্যবহার করে আপনি লেবেলযুক্ত লুপ বা ব্লক তৈরি করতে পারেন এবং সেই লেবেলের জন্য break
বা continue
নির্দেশাবলী ব্যবহার করতে পারেন। এটি বিশেষভাবে ব্যবহার করা হয় যখন নেস্টেড লুপ (nested loops) থাকে এবং আপনি একাধিক লুপ বা ব্লক থেকে বের হতে চান।
break
এবং continue
:break
লেবেল: আপনি একটি নির্দিষ্ট লেবেলযুক্ত লুপ বা ব্লক থেকে বের হওয়ার জন্য break
ব্যবহার করতে পারেন।continue
লেবেল: একইভাবে, একটি নির্দিষ্ট লেবেলযুক্ত লুপের বর্তমান ইটারেশনকে বাদ দিতে continue
ব্যবহার করতে পারেন।break
):outerLoop: // লেবেল
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
break outerLoop // লেবেলযুক্ত লুপ থেকে বেরিয়ে যাবে
}
println "i = $i, j = $j"
}
}
আউটপুট:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
এখানে, যখন i == 2
এবং j == 2
, তখন break outerLoop
এক্সিকিউট হয় এবং লেবেলযুক্ত outerLoop
লুপ থেকে বেরিয়ে আসে।
continue
):outerLoop: // লেবেল
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
continue outerLoop // লেবেলযুক্ত লুপে ফিরে যাবে
}
println "i = $i, j = $j"
}
}
আউটপুট:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3
এখানে, যখন i == 2
এবং j == 2
, তখন continue outerLoop
এক্সিকিউট হয় এবং এটি বাইরের লুপে চলে যায়, যার ফলে ভিতরের লুপটি বাদ দেয়া হয় এবং বাইরের লুপের পরবর্তী ইটারেশনে চলে যায়।
break
: একটি লুপ বা সুইচ থেকে প্রস্থান করতে ব্যবহৃত হয়।continue
: বর্তমান ইটারেশনটি বাদ দিয়ে পরবর্তী ইটারেশনে চলে যায়।labels
: নেস্টেড লুপ বা ব্লকগুলির মধ্যে নির্দিষ্ট লেবেল ব্যবহার করে break
বা continue
নির্দেশাবলীর কার্যকারিতা নির্দিষ্ট করতে ব্যবহৃত হয়।এই তিনটি কন্ট্রোল স্টেটমেন্টের মাধ্যমে Groovy তে লুপ বা কোড ব্লকের প্রবাহ নিয়ন্ত্রণ করা যায়, যা কোডকে আরও কার্যকরী এবং সংক্ষিপ্ত করে তোলে।
Groovy তে exception handling একটি গুরুত্বপূর্ণ বিষয়, যা কোডের রানটাইম ত্রুটিগুলি সঠিকভাবে ধরতে এবং তা মোকাবেলা করতে সাহায্য করে। Groovy এর exception handling Java এর মতোই try
, catch
, এবং finally
ব্লক ব্যবহার করে কাজ করে। এই ব্লকগুলো ব্যবহার করে আমরা ত্রুটিগুলো ধরতে, সেগুলি মোকাবেলা করতে এবং কিছু কার্যক্রম চালিয়ে যেতে পারি।
try
ব্লক ব্যবহার করা হয় যেখানে আপনি কোড চালানোর সময় যে কোনো ত্রুটি (exception) হতে পারে, এমন কোড লিখেন। যদি try
ব্লকের মধ্যে কোনো ত্রুটি ঘটে, তাহলে তা catch
ব্লক দ্বারা ধরা হয়।
try {
def result = 10 / 0 // Divide by zero, which will throw an exception
} catch (ArithmeticException e) {
println "An error occurred: ${e.message}"
}
এখানে, Divide by zero ত্রুটির কারণে একটি ArithmeticException
ঘটবে।
catch
ব্লকটি ত্রুটি ঘটলে try ব্লকের পরপরই চলে আসে এবং ত্রুটির ধরন অনুযায়ী এটি কাজ করে। আপনি এখানে Exception এর ধরন স্পেসিফাই করতে পারেন, যাতে শুধু নির্দিষ্ট ধরনের ত্রুটি ধরা হয়।
try {
def result = 10 / 0 // Divide by zero error
} catch (ArithmeticException e) {
println "Caught an exception: ${e.class.simpleName}"
} catch (Exception e) {
println "Caught a general exception: ${e.message}"
}
এখানে, ArithmeticException প্রথমে ধরা হবে এবং যদি অন্য কোনো ত্রুটি ঘটে, তাহলে সেকেন্ড catch
ব্লক কাজ করবে।
finally
ব্লকটি এমন একটি ব্লক যা try এবং catch ব্লক শেষ হওয়ার পর অবশ্যই চালানো হয়, चाहे ত্রুটি ঘটুক বা না ঘটে। এটি সাধারণত সংস্থান মুক্তি (resource release), লগিং অথবা ক্লিনআপ অপারেশন করার জন্য ব্যবহার করা হয়।
try {
println "Trying to open a file"
// Some code that could throw an exception
} catch (Exception e) {
println "Caught exception: ${e.message}"
} finally {
println "This will always run, regardless of exception"
}
এখানে, finally
ব্লকটি কোডের সব পরিস্থিতিতে চলবে, ত্রুটি ঘটুক বা না ঘটুক।
Groovy তে আপনি একাধিক catch
ব্লক ব্যবহার করতে পারেন, যাতে আপনি বিভিন্ন ধরনের exception আলাদা ভাবে হ্যান্ডল করতে পারেন।
try {
// Some code that could throw multiple exceptions
def result = 10 / 0 // Division by zero
def file = new File("nonexistentfile.txt")
file.text = "Writing to a nonexistent file"
} catch (ArithmeticException e) {
println "Arithmetic error: ${e.message}"
} catch (FileNotFoundException e) {
println "File not found error: ${e.message}"
} catch (Exception e) {
println "General error: ${e.message}"
}
এখানে, যদি ArithmeticException বা FileNotFoundException ঘটে, তখন সেই ধরনের ত্রুটি হ্যান্ডল হবে। যদি অন্য কোনো ত্রুটি ঘটে, তবে তা সাধারণ Exception
ব্লক দ্বারা ধরা হবে।
Groovy তে, আপনি যদি কোনো ত্রুটি throw করতে চান, তবে তা throw
স্টেটমেন্ট ব্যবহার করে করা যেতে পারে। এটি একটি exception তৈরি করে এবং সেটি caller method বা code block এ propagate (পাঠানো) করে।
def divide(a, b) {
if (b == 0) {
throw new ArithmeticException("Division by zero is not allowed")
}
return a / b
}
try {
def result = divide(10, 0)
println "Result: $result"
} catch (ArithmeticException e) {
println "Caught exception: ${e.message}"
}
এখানে, divide
মেথডের মধ্যে যদি শূন্য দিয়ে ভাগ করার চেষ্টা করা হয়, তবে একটি ArithmeticException
থ্রো হবে, এবং তা catch
ব্লক দ্বারা ধরা হবে।
Groovy তে exception handling একটি শক্তিশালী ফিচার, যা কোডের ত্রুটিগুলি সঠিকভাবে ধরতে এবং তা মোকাবেলা করতে সাহায্য করে। আপনি try
, catch
, এবং finally
ব্লক ব্যবহার করে ত্রুটির ধরন অনুযায়ী সঠিক ব্যবস্থা নিতে পারেন। Groovy এর exception handling সহজ এবং কার্যকরী, যা ডেভেলপারদের কোডে ত্রুটি মোকাবেলা করতে দ্রুত এবং সুবিধাজনক উপায় প্রদান করে।
common.read_more