অপারেটরস (Operators) in Elixir
Elixir তে অপারেটরগুলি বিভিন্ন ধরণের অপারেশন করার জন্য ব্যবহৃত হয়, যেমন গাণিতিক, তুলনামূলক, যৌক্তিক, এবং নির্দিষ্ট ধরনের ডেটা স্ট্রাকচারগুলির মধ্যে মান পরিচালনা। অপারেটরগুলির মাধ্যমে আপনি সহজে ক্যালকুলেশন, শর্ত যাচাই, এবং অন্যান্য ক্রিয়াকলাপ করতে পারেন।
এখানে Elixir তে ব্যবহৃত বিভিন্ন ধরনের অপারেটরের বিস্তারিত আলোচনা করা হলো।
১. গাণিতিক অপারেটরস (Arithmetic Operators)
এগুলি সাধারণ গাণিতিক ক্যালকুলেশনের জন্য ব্যবহৃত হয়।
| অপারেটর | বর্ণনা | উদাহরণ |
|---|---|---|
+ | যোগফল | 5 + 3 = 8 |
- | বিয়োগফল | 5 - 3 = 2 |
* | গুণফল | 5 * 3 = 15 |
/ | ভাগফল (Float) | 5 / 2 = 2.5 |
div | ভাগফল (Integer) | 5 div 2 = 2 |
rem | অবশিষ্ট (Remainder) | 5 rem 2 = 1 |
উদাহরণ:
sum = 5 + 3 # 8
difference = 5 - 3 # 2
product = 5 * 3 # 15
quotient = 5 / 2 # 2.5
div_result = 5 div 2 # 2
remainder = 5 rem 2 # 1২. তুলনামূলক অপারেটরস (Comparison Operators)
তুলনামূলক অপারেটরগুলি দুটি মানের মধ্যে সম্পর্ক নির্ধারণ করতে ব্যবহৃত হয়।
| অপারেটর | বর্ণনা | উদাহরণ |
|---|---|---|
== | সমান | 5 == 5 → true |
!= | সমান নয় | 5 != 3 → true |
=== | টাইপ এবং মান সমান | 5 === 5.0 → false |
> | বড় | 5 > 3 → true |
< | ছোট | 5 < 3 → false |
>= | বড় অথবা সমান | 5 >= 5 → true |
<= | ছোট অথবা সমান | 5 <= 3 → false |
উদাহরণ:
equal = 5 == 5 # true
not_equal = 5 != 3 # true
greater = 5 > 3 # true
less_than = 5 < 3 # false
greater_or_equal = 5 >= 5 # true
less_or_equal = 5 <= 3 # false৩. যৌক্তিক অপারেটরস (Logical Operators)
এগুলি সাধারণত শর্ত পরীক্ষা এবং যৌক্তিক অপারেশন পরিচালনা করার জন্য ব্যবহৃত হয়।
| অপারেটর | বর্ণনা | উদাহরণ |
|---|---|---|
and | এবং (AND) | true and false → false |
or | অথবা (OR) | true or false → true |
not | নয় (NOT) | not true → false |
উদাহরণ:
and_result = true and false # false
or_result = true or false # true
not_result = not true # false৪. ইউনারি অপারেটরস (Unary Operators)
ইউনারি অপারেটরগুলির মাধ্যমে একটি একক মানের উপর অপারেশন করা হয়। সাধারণত একক অপারেশন পরিচালনা করা হয়।
| অপারেটর | বর্ণনা | উদাহরণ |
|---|---|---|
+ | ধনাত্মক (Positive) | +5 → 5 |
- | ঋণাত্মক (Negative) | -5 → -5 |
! | নয় (Negation) | !true → false |
উদাহরণ:
positive = +5 # 5
negative = -5 # -5
negation = !true # false৫. ইনস্ট্যান্স চেক অপারেটরস (Pattern Matching Operators)
এই অপারেটরগুলি প্যাটার্ন ম্যাচিং এবং ডেটা স্ট্রাকচারের মধ্যে মান মেলানোর জন্য ব্যবহৃত হয়।
| অপারেটর | বর্ণনা | উদাহরণ |
|---|---|---|
= | প্যাটার্ন ম্যাচিং | x = 5 → x = 5 |
^ | প্যাটার্ন ম্যাচিং (পূর্বের মান নিয়ে ম্যাচ করা) | ^x = 5 |
উদাহরণ:
x = 5 # প্যাটার্ন ম্যাচিং, x এর মান 5 হয়ে যাবে
^x = 10 # এটি একটি ত্রুটি হবে, কারণ x এর পূর্বের মান (5) পরিবর্তন করা যাবে না৬. বিটওয়াইজ অপারেটরস (Bitwise Operators)
এগুলি বিট স্তরের অপারেশন চালানোর জন্য ব্যবহৃত হয়। Elixir তে বিটওয়াইজ অপারেটরগুলির মধ্যে রয়েছে band, bor, bxor, bnot, bsl, এবং bsr।
| অপারেটর | বর্ণনা | উদাহরণ |
|---|---|---|
band | বিটওয়াইজ AND | 5 band 3 |
bor | বিটওয়াইজ OR | 5 bor 3 |
bxor | বিটওয়াইজ XOR | 5 bxor 3 |
bnot | বিটওয়াইজ NOT | bnot 5 |
bsl | বিট শিফট বাম | 5 bsl 2 |
bsr | বিট শিফট ডান | 5 bsr 2 |
উদাহরণ:
band_result = 5 band 3 # 1
bor_result = 5 bor 3 # 7
bxor_result = 5 bxor 3 # 6
bnot_result = bnot 5 # -6
bsl_result = 5 bsl 2 # 20
bsr_result = 5 bsr 2 # 1৭. লিস্ট অপারেটরস (List Operators)
Elixir তে লিস্টের উপর কিছু বিশেষ অপারেটর প্রয়োগ করা হয়, যেমন cons এবং concat অপারেটর।
| অপারেটর | বর্ণনা | উদাহরণ |
|---|---|---|
| ` | ` | লিস্টে নতুন উপাদান যোগ করা |
++ | দুটি লিস্ট যোগ করা | [1, 2] ++ [3, 4] → [1, 2, 3, 4] |
-- | একটি লিস্ট থেকে উপাদান মুছে ফেলা | [1, 2, 3] -- [2] → [1, 3] |
উদাহরণ:
list = [1, 2, 3] | 4 # [1, 2, 3, 4]
concat_list = [1, 2] ++ [3, 4] # [1, 2, 3, 4]
remove_element = [1, 2, 3] -- [2] # [1, 3]সারসংক্ষেপ
Elixir তে অপারেটরগুলি বিভিন্ন ধরনের ক্রিয়াকলাপ করার জন্য ব্যবহৃত হয়। গাণিতিক অপারেটর, তুলনামূলক অপারেটর, যৌক্তিক অপারেটর এবং বিটওয়াইজ অপারেটরগুলি আপনাকে কোডে বিভিন্ন ধরণের ক্যালকুলেশন, শর্ত যাচাই, এবং ডেট
া ম্যানিপুলেশন করতে সাহায্য করে। এই অপারেটরগুলি ব্যবহার করে আপনি আপনার Elixir অ্যাপ্লিকেশনগুলো আরও কার্যকরী এবং শক্তিশালী করতে পারবেন।
Elixir এ অ্যারিথমেটিক অপারেটরস: +, -, *, /
Elixir, অন্যান্য প্রোগ্রামিং ভাষার মতো, অ্যারিথমেটিক অপারেটরস সরবরাহ করে যা সাধারণ গণনা যেমন যোগ, বিয়োগ, গুণ এবং ভাগ করার জন্য ব্যবহার করা হয়। Elixir তে অ্যারিথমেটিক অপারেটরস বেশ সহজ এবং স্বাভাবিকভাবে কাজ করে। নিচে প্রতিটি অপারেটর এর ব্যবহার বিস্তারিতভাবে আলোচনা করা হলো।
1. যোগ (+)
+ অপারেটর দুটি মানের যোগফল বের করার জন্য ব্যবহৃত হয়।
উদাহরণ:
sum = 5 + 3 IO.puts(sum) # আউটপুট হবে 8
এখানে, 5 এবং 3 যোগ করা হয়েছে, যার ফলে 8 আউটপুট হিসেবে পাওয়া যাবে।
2. বিয়োগ (-)
- অপারেটর দুটি মানের মধ্যে বিয়োগ করতে ব্যবহৃত হয়।
উদাহরণ:
difference = 10 - 4 IO.puts(difference) # আউটপুট হবে 6
এখানে, 10 থেকে 4 বিয়োগ করা হয়েছে, যার ফলে 6 আউটপুট হিসেবে পাওয়া যাবে।
3. গুণ (*)
* অপারেটর দুটি মানের গুণফল বের করার জন্য ব্যবহৃত হয়।
উদাহরণ:
product = 6 * 7 IO.puts(product) # আউটপুট হবে 42
এখানে, 6 এবং 7 গুণ করা হয়েছে, যার ফলে 42 আউটপুট হিসেবে পাওয়া যাবে।
4. ভাগ (/)
/ অপারেটর দুটি মানের ভাগফল বের করার জন্য ব্যবহৃত হয়। Elixir তে / অপারেটরটি ফ্লোট (float) ফলাফল প্রদান করে, এমনকি যদি দুটি সংখ্যার মধ্যে পূর্ণাঙ্গ ভাগ হয়।
উদাহরণ:
quotient = 10 / 2 IO.puts(quotient) # আউটপুট হবে 5.0
এখানে, 10 ভাগ 2 করা হয়েছে, যার ফলে ফলাফল 5.0 (ফ্লোট) হিসেবে আসবে।
পূর্ণসংখ্যা ভাগ: Elixir তে পূর্ণসংখ্যা ভাগের জন্য আলাদা অপারেটর div/2 ব্যবহার করা হয়, যা শুধুমাত্র পূর্ণসংখ্যা রিটার্ন করে।
quotient_int = div(10, 2) IO.puts(quotient_int) # আউটপুট হবে 5
এখানে, div/2 ব্যবহার করে পূর্ণসংখ্যার ভাগফল 5 পাওয়া যাবে।
সারাংশ
Elixir এ +, -, *, / অপারেটরগুলি খুবই সহজ এবং স্বাভাবিকভাবে গণনা করার জন্য ব্যবহৃত হয়:
+: যোগফল বের করার জন্য-: বিয়োগফল বের করার জন্য*: গুণফল বের করার জন্য/: ভাগফল (ফ্লোট) বের করার জন্যdiv/2: পূর্ণসংখ্যার ভাগফল বের করার জন্য
এই অপারেটরগুলি ব্যবহার করে আপনি সহজেই অঙ্কের কাজ করতে পারেন এবং Elixir তে গণনার বিভিন্ন ধরনের ফলাফল পেতে পারেন।
Relational Operators: ==, !=, >, < in Elixir
Relational operators হল সেই অপারেটরগুলি যা দুইটি মানের মধ্যে তুলনা করে এবং সত্য বা মিথ্যা রিটার্ন করে। এগুলো সাধারণত শর্ত বা কন্ডিশন চেক করার জন্য ব্যবহৃত হয়, যেমন if, case, বা লুপে ব্যবহার করা হয়। Elixir তে বেশ কিছু relational operators রয়েছে, যার মধ্যে ==, !=, >, এবং < সবচেয়ে বেশি ব্যবহৃত হয়।
১. == (Equal to)
== অপারেটর দুটি মানের মধ্যে সমানতা পরীক্ষা করে। যদি দুটি মান সমান হয়, তাহলে এটি true রিটার্ন করবে, অন্যথায় **false**।
বৈশিষ্ট্য:
==অপারেটর ব্যবহার করে আমরা দেখতে পারি যে দুটি মান একই কিনা।
ব্যবহার:
1 == 1 # true
1 == 2 # false
"hello" == "hello" # trueউদাহরণ:
a = 5
b = 5
IO.puts(a == b) # Output: true
x = "Elixir"
y = "elixir"
IO.puts(x == y) # Output: false (case-sensitive)২. != (Not equal to)
!= অপারেটর দুটি মানের মধ্যে বৈষম্য পরীক্ষা করে। যদি দুটি মান সমান না হয়, তাহলে এটি true রিটার্ন করবে, অন্যথায় **false**।
বৈশিষ্ট্য:
!=অপারেটর ব্যবহার করে আমরা দেখতে পারি যে দুটি মান একে অপরের থেকে আলাদা কিনা।
ব্যবহার:
1 != 2 # true
1 != 1 # false
"hello" != "world" # trueউদাহরণ:
a = 10
b = 20
IO.puts(a != b) # Output: true
name1 = "Elixir"
name2 = "elixir"
IO.puts(name1 != name2) # Output: true (case-sensitive)৩. > (Greater than)
> অপারেটর দুটি মানের মধ্যে তুলনা করে এবং পরীক্ষা করে যে প্রথম মানটি দ্বিতীয় মানের চেয়ে বড় কিনা। যদি প্রথম মান দ্বিতীয় মানের চেয়ে বড় হয়, তাহলে এটি true রিটার্ন করবে, অন্যথায় **false**।
বৈশিষ্ট্য:
>অপারেটর ব্যবহার করে আমরা দেখতে পারি যে প্রথম মানটি দ্বিতীয় মানের চেয়ে বড় কিনা।
ব্যবহার:
3 > 2 # true
5 > 8 # false
"apple" > "banana" # false (lexicographical comparison)উদাহরণ:
x = 15
y = 10
IO.puts(x > y) # Output: true
a = 5
b = 8
IO.puts(a > b) # Output: false৪. < (Less than)
< অপারেটর দুটি মানের মধ্যে তুলনা করে এবং পরীক্ষা করে যে প্রথম মানটি দ্বিতীয় মানের চেয়ে ছোট কিনা। যদি প্রথম মান দ্বিতীয় মানের চেয়ে ছোট হয়, তাহলে এটি true রিটার্ন করবে, অন্যথায় **false**।
বৈশিষ্ট্য:
<অপারেটর ব্যবহার করে আমরা দেখতে পারি যে প্রথম মানটি দ্বিতীয় মানের চেয়ে ছোট কিনা।
ব্যবহার:
2 < 3 # true
8 < 5 # false
"apple" < "banana" # true (lexicographical comparison)উদাহরণ:
a = 7
b = 10
IO.puts(a < b) # Output: true
x = 20
y = 15
IO.puts(x < y) # Output: falseসারসংক্ষেপ
| অপারেটর | বর্ণনা | উদাহরণ |
|---|---|---|
== | সমানতা পরীক্ষা | 5 == 5 → true, "a" == "b" → false |
!= | অসমানতা পরীক্ষা | 5 != 3 → true, "hello" != "world" → true |
> | বড় হওয়া পরীক্ষা | 7 > 5 → true, 10 > 15 → false |
< | ছোট হওয়া পরীক্ষা | 2 < 5 → true, 20 < 10 → false |
এগুলো relational operators যা আপনার Elixir প্রোগ্রামে শর্তসাপেক্ষ অপারেশন, লজিক্যাল সিদ্ধান্ত এবং ডেটা তুলনা করার জন্য ব্যবহৃত হয়।
লজিক্যাল অপারেটর: &&, ||, !
Elixir তে লজিক্যাল অপারেটর &&, ||, এবং ! ব্যবহার করা হয় বুলিয়ান মানের (true/false) ওপর অপারেশন করার জন্য। এগুলি কোডের শর্তাধীন সিদ্ধান্তে (conditional statements) খুবই গুরুত্বপূর্ণ ভূমিকা পালন করে এবং ফ্লো কন্ট্রোলের জন্য ব্যবহার করা হয়।
1. && (লজিক্যাল AND)
&& অপারেটরটি দুটি শর্তের মধ্যে লজিক্যাল AND অপারেশন করে। এটি true রিটার্ন করবে তবে যদি উভয় শর্তই সত্য (true) হয়, অন্যথায় false রিটার্ন করবে।
- সিনট্যাক্স:
condition1 && condition2 - ব্রাহ্মণ:
- যদি
condition1এবংcondition2দুটি শর্তই সত্য হয়, তবে ফলাফল হবেtrue। - অন্যথায়, যদি একটিও
falseহয়, ফলাফল হবেfalse।
- যদি
উদাহরণ:
iex> true && true
true
iex> true && false
false
iex> false && true
false
iex> false && false
falseএখানে, ফলাফল শুধুমাত্র true হবে যদি উভয় শর্ত সত্য হয়, অন্যথায় false হবে।
2. || (লজিক্যাল OR)
|| অপারেটরটি দুটি শর্তের মধ্যে লজিক্যাল OR অপারেশন করে। এটি true রিটার্ন করবে যদি যেকোনো একটি শর্ত সত্য হয়। যদি উভয় শর্তই মিথ্যা (false) হয়, তবে false রিটার্ন করবে।
- সিনট্যাক্স:
condition1 || condition2 - ব্রাহ্মণ:
- যদি
condition1বাcondition2যে কোন একটি শর্ত সত্য হয়, ফলাফল হবেtrue। - যদি উভয় শর্তই মিথ্যা হয়, ফলাফল হবে
false।
- যদি
উদাহরণ:
iex> true || true
true
iex> true || false
true
iex> false || true
true
iex> false || false
falseএখানে, ফলাফল true হবে যদি যেকোনো একটি শর্ত সত্য হয়, এবং false হবে শুধুমাত্র যখন উভয় শর্তই মিথ্যা হয়।
3. ! (লজিক্যাল NOT)
! অপারেটরটি একটি লজিক্যাল NOT অপারেশন করে। এটি একটি শর্তের মান বিপরীত করে:
- যদি শর্তটি
trueহয়, তবে এটিfalseরিটার্ন করবে। - যদি শর্তটি
falseহয়, তবে এটিtrueরিটার্ন করবে। - সিনট্যাক্স:
!condition - ব্রাহ্মণ:
- যদি শর্তটি
trueহয়, তাহলে ফলাফল হবেfalse। - যদি শর্তটি
falseহয়, তাহলে ফলাফল হবেtrue।
- যদি শর্তটি
উদাহরণ:
iex> !true
false
iex> !false
trueএখানে, ! অপারেটরটি শর্তের মান উল্টে দেয়।
লজিক্যাল অপারেটরের ব্যবহার শর্তাধীন স্টেটমেন্টে
লজিক্যাল অপারেটরগুলি শর্তাধীন স্টেটমেন্টে, যেমন if এবং unless, ব্যবহার করা হয় সিদ্ধান্ত নেয়ার জন্য।
উদাহরণ && (AND) এবং || (OR) এর সাথে:
# AND (&&) ব্যবহার করে দুটি শর্ত পরীক্ষা করা
if true && true do
IO.puts "দুটি শর্তই সত্য!"
else
IO.puts "অন্যথায়, একটি শর্তও মিথ্যা!"
end
# আউটপুট: "দুটি শর্তই সত্য!"
# OR (||) ব্যবহার করে পরীক্ষা করা
if false || true do
IO.puts "অন্তত একটি শর্ত সত্য!"
else
IO.puts "দুটি শর্তই মিথ্যা!"
end
# আউটপুট: "অন্তত একটি শর্ত সত্য!"উদাহরণ ! (NOT) এর সাথে:
# NOT (!) ব্যবহার করে শর্তটি বিপরীত করা
if !false do
IO.puts "শর্তটি সত্য হয়ে গেছে!"
else
IO.puts "শর্তটি মিথ্যা!"
end
# আউটপুট: "শর্তটি সত্য হয়ে গেছে!"শর্ট সার্কুইটিং (Short-circuiting) আচরণ
Elixir তে শর্ট সার্কুইটিং ব্যবহার করা হয় && এবং || অপারেটরের জন্য, অর্থাৎ:
&&: যদি প্রথম শর্তfalseহয়, তবে দ্বিতীয় শর্ত পরীক্ষা করা হয় না।||: যদি প্রথম শর্তtrueহয়, তবে দ্বিতীয় শর্ত পরীক্ষা করা হয় না।
উদাহরণ (Short-circuiting &&):
iex> false && (IO.puts "এটি প্রিন্ট হবে না")
falseএখানে, প্রথম শর্ত false হওয়ায়, দ্বিতীয় শর্ত পরীক্ষা করা হয়নি এবং বার্তা প্রিন্ট হয়নি।
উদাহরণ (Short-circuiting ||):
iex> true || (IO.puts "এটি প্রিন্ট হবে না")
trueএখানে, প্রথম শর্ত true হওয়ায়, দ্বিতীয় শর্ত পরীক্ষা করা হয়নি এবং বার্তা প্রিন্ট হয়নি।
সারসংক্ষেপ
&&(AND): উভয় শর্ত সত্য হলেtrue, অন্যথায়false।||(OR): যেকোনো একটি শর্ত সত্য হলেtrue, এবং যদি উভয় শর্তই মিথ্যা হয়, তবেfalse।!(NOT): শর্তের মান বিপরীত করে;trueহলেfalseএবংfalseহলেtrueরিটার্ন করে।
এই লজিক্যাল অপারেটরগুলি শর্তাধীন স্টেটমেন্টে সিদ্ধান্ত গ্রহণে সাহায্য করে এবং কোডের কার্যকারিতা এবং পারফরম্যান্স উন্নত করতে সহায়ক।
Pattern Matching এর মাধ্যমে Variable Binding in Elixir
Pattern Matching Elixir এ একটি গুরুত্বপূর্ণ এবং শক্তিশালী বৈশিষ্ট্য, যা কোডের প্রক্রিয়া এবং ভেরিয়েবলগুলির সাথে কাজ করার জন্য সহজ, পরিষ্কার এবং আরও কার্যকরী উপায় প্রদান করে। এটি সাধারণত ডেটা স্ট্রাকচার (যেমন লিস্ট, টুপল, ম্যাপ ইত্যাদি) থেকে মানগুলি বাইন্ড (নির্ধারণ) করতে ব্যবহৃত হয়।
Elixir তে Pattern Matching এর মাধ্যমে আপনি ডেটা স্ট্রাকচারের বিভিন্ন অংশে সরাসরি মানের সাথে মেলান এবং তারপরে ভেরিয়েবলকে সেই মানের সাথে বাইন্ড করতে পারেন। এটি কোডের আরও সোজা এবং স্বচ্ছ করতে সহায়তা করে এবং অনেক বেশি শক্তিশালী হয়, বিশেষত যখন এটি Function Clauses বা Case Expressions এর সাথে ব্যবহৃত হয়।
Pattern Matching এর মৌলিক ধারণা
Pattern Matching ব্যবহার করে ভেরিয়েবলকে ডেটা স্ট্রাকচারের মানের সাথে বাইন্ড করা যায়। Elixir এই মেকানিজমটি খুবই শক্তিশালীভাবে সমর্থন করে, এবং এটি অনেক জটিল ডেটা স্ট্রাকচারকে সহজে যাচাই ও ব্যবহারের সুযোগ প্রদান করে।
Pattern Matching এর মূল বৈশিষ্ট্য:
- ডেটার সাথে সোজা মেলানো: কোনো ডেটা স্ট্রাকচারের মধ্যে মান খুঁজে বের করতে এবং তা ভেরিয়েবলের সাথে বাইন্ড করতে Pattern Matching ব্যবহার করা হয়।
- বাইন্ডিং: যখন কোনো ভেরিয়েবল ডেটার একটি অংশের সাথে মেলে, তখন ভেরিয়েবলটি ওই অংশের মানের সাথে বাইন্ড (নির্ধারণ) হয়ে যায়।
- মাল্টিপল ক্লজ বা প্যাটার্ন: Elixir তে একাধিক প্যাটার্নের সাথে মিলিয়ে একাধিক ক্লজের মধ্যে কাজ করা যায়। প্রথম যে ক্লজটি মেলে, সেটি কার্যকর হয়।
Pattern Matching এর মাধ্যমে Variable Binding এর উদাহরণ
1. সাধারণ Pattern Matching
# একটি টুপল যার মধ্যে দুটি মান রয়েছে
{a, b} = {10, 20}
IO.puts a # আউটপুট: 10
IO.puts b # আউটপুট: 20এখানে, {a, b} = {10, 20} এই লাইনটি Pattern Matching এর মাধ্যমে টুপল {10, 20} এর মানগুলো ভেরিয়েবল a এবং b এর সাথে বাইন্ড করে। এর ফলে a এর মান হবে 10 এবং b এর মান হবে 20।
2. লিস্টে Pattern Matching
# একটি লিস্ট থেকে প্রথম দুটি মান বের করা
[first, second | rest] = [1, 2, 3, 4, 5]
IO.puts first # আউটপুট: 1
IO.puts second # আউটপুট: 2
IO.inspect rest # আউটপুট: [3, 4, 5]এখানে, [first, second | rest] = [1, 2, 3, 4, 5] প্যাটার্নে প্রথম দুটি মান (১ এবং ২) ভেরিয়েবল first এবং second এর সাথে বাইন্ড হয়, এবং বাকি অংশ (৩, ৪, ৫) rest এ সংরক্ষিত হয়।
3. Case Expression এর মাধ্যমে Pattern Matching
case {1, 2} do
{1, 2} -> IO.puts "Matched with {1, 2}" # আউটপুট: Matched with {1, 2}
{a, b} -> IO.puts "Not a match"
endএখানে, {1, 2} এর সাথে মিলিয়ে প্রথম ক্লজটি কার্যকর হবে এবং "Matched with {1, 2}" মেসেজটি আউটপুট হবে। দ্বিতীয় ক্লজটি তখন কার্যকর হবে না কারণ প্রথম ক্লজটি মিলেছে।
4. ফাংশন ক্লজের মধ্যে Pattern Matching
defmodule Example do
def greet({name, age}) do
IO.puts("Hello #{name}, you are #{age} years old.")
end
end
Example.greet({"Alice", 30}) # আউটপুট: Hello Alice, you are 30 years old.এখানে, greet/1 ফাংশনে {name, age} প্যাটার্নের মাধ্যমে টুপলে থাকা মানগুলো ভেরিয়েবল name এবং age এর সাথে বাইন্ড করা হয়। তখন ফাংশনটি সঠিকভাবে কাজ করবে।
Pattern Matching এর শক্তিশালী দিক
- সোজা ও পরিষ্কার কোড: Pattern Matching দিয়ে আপনি কোডে সরাসরি এবং সোজাভাবে মান নির্ধারণ করতে পারেন।
- বহু ফাংশন ক্লজ: একাধিক প্যাটার্ন ব্যবহার করে একই ফাংশনে বিভিন্ন ডেটার সাথে মেলে কাজ করতে পারেন।
- কমপ্লেক্স ডেটা স্ট্রাকচার: লিস্ট, টুপল, ম্যাপের মতো কমপ্লেক্স ডেটা স্ট্রাকচারেও Pattern Matching ব্যবহার করা যায়, যা কোডের কার্যকারিতা উন্নত করে।
- মাল্টিপল প্যাটার্ন: একাধিক প্যাটার্ন বা ক্লজ দিয়ে একাধিক পরিস্থিতি পরীক্ষা করা যায়, যেটি কন্ডিশনাল লজিকের জন্য অনেক সহজ উপায়।
Pattern Matching এর কার্যকারিতা
Pattern Matching Elixir তে কোডের স্থিতিস্থাপকতা এবং নমনীয়তা বৃদ্ধিতে সাহায্য করে। এটি:
- ডেটা ডেস্ট্রাকচারিং এর জন্য সহজ উপায় প্রদান করে।
- শর্ত সাপেক্ষ কোড লেখার জন্য কার্যকর।
- কোডের পাঠযোগ্যতা এবং রক্ষণাবেক্ষণ সহজ করে।
সারসংক্ষেপ
Elixir তে Pattern Matching এর মাধ্যমে Variable Binding কোডকে আরও সোজা, পরিষ্কার এবং কার্যকরী করে তোলে। এটি বিভিন্ন ডেটা স্ট্রাকচারের সাথে সহজে কাজ করতে সহায়তা করে এবং কোডে ত্রুটির সম্ভাবনা কমিয়ে আনে। Pattern Matching এলিক্সির একটি শক্তিশালী বৈশিষ্ট্য যা ফাংশনাল প্রোগ্রামিং এর মূল ধারণাগুলোর সাথে একত্রে কাজ করে এবং কোডের গুণগত মান বাড়ায়।
Read more