Guard Clauses এবং তাদের ব্যবহার
Guard Clauses Elixir তে একটি শক্তিশালী কনসেপ্ট, যা শর্তাধীন বিবৃতির মধ্যে অতিরিক্ত শর্ত বা কন্ডিশন যুক্ত করতে সাহায্য করে। এটি মূলত cond, case, if, receive ইত্যাদি স্টেটমেন্টে ব্যবহৃত হয় এবং নির্দিষ্ট শর্তের অধীনে ফাংশন বা এক্সপ্রেশন কীভাবে আচরণ করবে তা নিয়ন্ত্রণ করে।
Guard Clauses সাধারণত কন্ডিশনাল গার্ড হিসেবে ব্যবহৃত হয়, যা একটি নির্দিষ্ট শর্তকে হ্যান্ডেল করে এবং যদি শর্তটি সঠিক হয়, তখন সেই শর্তের জন্য নির্ধারিত কার্যক্রম চালানো হয়।
Guard Clauses এর ধারণা
Guard Clause মূলত একটি শর্ত (condition) যা কিছু নির্দিষ্ট ফাংশন বা এক্সপ্রেশনকে পরীক্ষা করে। এই শর্তটি কোডের মধ্যে অন্য কোন শর্তের সাথে যুক্ত করা হয়। এটি এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে আপনি একাধিক শর্তে একটি ফাংশনকে কাস্টমাইজ করতে চান।
Elixir তে guard clauses সাধারণত when কিওয়ার্ড দিয়ে ব্যবহার করা হয়, যা pattern matching এর সাথে যুক্ত হয়।
Syntax:
def function_name(parameter) when condition do
# code to execute if condition is true
endএখানে when এর পর যে শর্তটি দেওয়া হবে, তা parameter এর সাথে মেলে এবং যদি শর্তটি সত্য হয়, তবে নির্দিষ্ট কোড ব্লকটি রান হবে।
Guard Clauses এর ব্যবহার
১. Pattern Matching এর সাথে Guard Clauses
Elixir তে pattern matching এর সাথে guard clauses ব্যবহার করে শর্তানুসারে কোড চালানো যায়। এটি ব্যবহার করা হয় যখন একটি ফাংশন অনেকগুলো ভিন্ন শর্তের মধ্যে কাজ করে এবং প্রতিটি শর্তে আলাদা আলাদা কার্যকলাপ করতে হয়।
উদাহরণ:
defmodule MyModule do
def check_number(x) when x > 0 do
IO.puts "#{x} is a positive number."
end
def check_number(x) when x < 0 do
IO.puts "#{x} is a negative number."
end
def check_number(0) do
IO.puts "The number is zero."
end
endএখানে, check_number/1 ফাংশনটি তিনটি ভিন্ন শর্তে কাজ করছে:
- যদি সংখ্যা ধনাত্মক (positive) হয়, তবে
x > 0শর্তটি সঠিক হবে এবং সেই অনুযায়ী কোড চালানো হবে। - যদি সংখ্যা ঋণাত্মক (negative) হয়, তবে
x < 0শর্তটি সঠিক হবে। - এবং, যদি সংখ্যা শূন্য (zero) হয়, তবে ০ এর জন্য আলাদা শর্ত দেওয়া হয়েছে।
ব্যবহার:
iex> MyModule.check_number(5)
5 is a positive number.
iex> MyModule.check_number(-3)
-3 is a negative number.
iex> MyModule.check_number(0)
The number is zero.এখানে, when গার্ড শর্তের মাধ্যমে আমরা নিশ্চিত করছি যে প্রতিটি শর্তে আলাদা কাজ হবে।
২. Mathematical Operations এর Guard Clause
আপনি গার্ড ক্লজ ব্যবহার করে গাণিতিক বা লজিক্যাল শর্ত নির্ধারণ করতে পারেন এবং সেগুলির ওপর ভিত্তি করে আলাদা আলাদা কোড এক্সিকিউট করতে পারেন।
উদাহরণ:
defmodule MathModule do
def classify_number(x) when x == 0 do
IO.puts "The number is zero."
end
def classify_number(x) when rem(x, 2) == 0 do
IO.puts "#{x} is an even number."
end
def classify_number(x) when rem(x, 2) != 0 do
IO.puts "#{x} is an odd number."
end
endএখানে, আমরা গার্ড ক্লজ ব্যবহার করে সংখ্যা even বা odd হিসেবে শ্রেণীভুক্ত করছি। এছাড়া, শূন্য (zero) চেকের জন্য আলাদা গার্ড ক্লজ ব্যবহার করা হয়েছে।
ব্যবহার:
iex> MathModule.classify_number(4)
4 is an even number.
iex> MathModule.classify_number(7)
7 is an odd number.
iex> MathModule.classify_number(0)
The number is zero.৩. Multiple Conditions with Guard Clauses
একটি গার্ড ক্লজে একাধিক শর্ত একসাথে পরীক্ষা করতে পারেন। এর মাধ্যমে আপনি বেশি জটিল শর্ত তৈরি করতে পারেন।
উদাহরণ:
defmodule CheckModule do
def check_value(x) when x > 0 and rem(x, 2) == 0 do
IO.puts "#{x} is a positive even number."
end
def check_value(x) when x > 0 and rem(x, 2) != 0 do
IO.puts "#{x} is a positive odd number."
end
def check_value(x) when x < 0 do
IO.puts "#{x} is a negative number."
end
endএখানে, আমরা multiple conditions ব্যবহার করেছি, যেমন:
- একটি সংখ্যা ধনাত্মক এবং সন্নিবদ্ধ (even) হলে, আমরা একটি বিশেষ বার্তা প্রিন্ট করব।
- একটি সংখ্যা ধনাত্মক এবং বিজোড় (odd) হলে, আমরা আলাদা বার্তা প্রিন্ট করব।
- যদি সংখ্যা ঋণাত্মক (negative) হয়, আমরা সেটি আলাদাভাবে হ্যান্ডেল করব।
ব্যবহার:
iex> CheckModule.check_value(6)
6 is a positive even number.
iex> CheckModule.check_value(5)
5 is a positive odd number.
iex> CheckModule.check_value(-3)
-3 is a negative number.Guard Clauses এবং Pattern Matching
Elixir তে গার্ড ক্লজ সাধারণত Pattern Matching এর সাথে ব্যবহার করা হয়। এটি আপনাকে আরও সরলভাবে এবং পরিষ্কারভাবে শর্তাবলী এবং কন্ডিশনাল লজিক লেখার সুযোগ দেয়।
উদাহরণ:
defmodule NumberChecker do
def check(x) when x > 0 do
IO.puts "Positive number"
end
def check(x) when x == 0 do
IO.puts "Zero"
end
def check(x) when x < 0 do
IO.puts "Negative number"
end
endএখানে, check/1 ফাংশনে প্রতিটি শর্তের জন্য একটি গার্ড ক্লজ রয়েছে যা pattern matching এর মাধ্যমে x এর মান পরীক্ষা করে এবং সংশ্লিষ্ট বার্তা প্রদর্শন করে।
সারসংক্ষেপ
Guard Clauses Elixir তে ফাংশনাল প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ। এগুলি when কিওয়ার্ডের মাধ্যমে ব্যবহৃত হয় এবং pattern matching এর সাথে যুক্ত থাকে। গার্ড ক্লজের মাধ্যমে আপনি একটি ফাংশনে একাধিক শর্ত পরীক্ষা করতে পারেন এবং প্রতিটি শর্তের জন্য আলাদা কাজ করতে পারেন। এই কনসেপ্টটি কোডের কাঠামো পরিষ্কার এবং সহজবোধ্য করে তোলে, বিশেষত যখন আপনার একাধিক শর্ত বা পরিস্থিতির মধ্যে কার্যকরভাবে সিদ্ধান্ত নিতে হয়।
Read more