Nested Conditions এবং Guards এর প্রয়োগ
Elm এ Nested Conditions এবং Guards দুটি শক্তিশালী কনসেপ্ট, যা কোডে শর্ত ভিত্তিক সিদ্ধান্ত গ্রহণ করতে ব্যবহৃত হয়। এই দুটি বৈশিষ্ট্য একে অপরের সাথে সম্পর্কিত হলেও তাদের ব্যবহারের পদ্ধতি এবং প্রয়োগ আলাদা। এখানে আমরা Nested Conditions এবং Guards এর ধারণা, তাদের ব্যবহার এবং প্রয়োগ নিয়ে আলোচনা করব।
১. Nested Conditions (নেস্টেড কন্ডিশন)
Nested Conditions হল শর্তের মধ্যে শর্ত। একাধিক শর্তের ভিত্তিতে কোডের ভিন্ন ভিন্ন অংশে সিদ্ধান্ত নিতে হলে আমরা nested conditions ব্যবহার করি। একেকটি শর্তের মধ্যে আবার নতুন শর্ত থাকতে পারে, অর্থাৎ যদি প্রথম শর্তটি সঠিক না হয়, তাহলে দ্বিতীয় শর্তটি চেক করা হয়।
উদাহরণ: Nested Conditions
ধরা যাক, আমাদের একটি ফাংশন আছে যা পরীক্ষা করবে একটি নম্বর সঠিক পরিসরে আছে কিনা, এবং সেই অনুযায়ী বার্তা দেখাবে:
checkNumber : Int -> String
checkNumber x =
if x > 0 then
if x < 10 then
"Positive number less than 10"
else
"Positive number 10 or more"
else
if x == 0 then
"Zero"
else
"Negative number"এখানে, প্রথম if শর্তটি চেক করছে যে x 0 এর চেয়ে বড় কি না। যদি সঠিক হয়, তখন দ্বিতীয় if শর্ত চেক করা হবে, যা নির্ধারণ করবে যে x 10 এর চেয়ে ছোট কি না। যদি প্রথম শর্তটি মিথ্যা হয়, তবে দ্বিতীয় শর্তে গিয়ে জানাবে x শূন্য নাকি নেতিবাচক সংখ্যা।
এই ধরনের শর্তের মধ্যে শর্ত পদ্ধতি Nested Conditions নামে পরিচিত।
২. Guards (গার্ডস)
Guards হল শর্তবিশেষ যা সাধারণত ফাংশন ডিফিনিশনে ব্যবহৃত হয় এবং এগুলির সাহায্যে ফাংশনটির নির্দিষ্ট অংশ চালানোর জন্য শর্ত দেয়া হয়। Guards ব্যবহৃত হয় Pattern Matching এর সাথে এবং এর মাধ্যমে আমরা কোডের প্রবাহ নিয়ন্ত্রণ করতে পারি। এই ধরনের শর্ত সহজে স্পষ্ট এবং পরিষ্কার কোড লেখা সম্ভব করে।
Guards এর সিনট্যাক্স:
functionName argument
| condition1 = result1
| condition2 = result2
| condition3 = result3এখানে, প্রতিটি শর্ত (guard) আলাদা করে লেখা হয় এবং একেকটি শর্তের জন্য আলাদা রেজাল্ট নির্ধারণ করা হয়।
উদাহরণ: Guards এর ব্যবহার
checkNumber : Int -> String
checkNumber x
| x > 0 = "Positive number"
| x == 0 = "Zero"
| x < 0 = "Negative number"এখানে, Guards ব্যবহৃত হয়েছে যাতে x এর মান অনুযায়ী উপযুক্ত বার্তা ফিরিয়ে দেওয়া যায়। প্রথম শর্তে চেক করা হয়েছে যে x ধনাত্মক কিনা, দ্বিতীয় শর্তে শূন্য কিনা এবং তৃতীয় শর্তে নেতিবাচক কিনা। Guards এর সাহায্যে কোডটি অনেক বেশি পরিষ্কার এবং সংক্ষিপ্ত হয়েছে।
৩. Nested Conditions বনাম Guards
এখন, আসুন দেখি Nested Conditions এবং Guards এর মধ্যে পার্থক্য কেমন:
| বৈশিষ্ট্য | Nested Conditions | Guards |
|---|---|---|
| কোডের পাঠযোগ্যতা | কোডের স্ট্রাকচার জটিল হতে পারে যখন শর্তগুলো একে অপরের মধ্যে嵯 | Guards বেশি পরিষ্কার এবং সহজে পড়া যায়, কারণ শর্তগুলো আলাদা সেকশনে থাকে। |
| স্টাইল | স্ট্যাটিক শর্ত দিয়ে লজিক তৈরি হয় | Pattern matching ভিত্তিক শর্ত এবং লজিক তৈরি হয়। |
| ব্যবহারযোগ্যতা | ছোট এবং সহজ শর্তের জন্য উপযুক্ত | অনেক শর্ত একসাথে বা বড় কোডের জন্য Guards ব্যবহার করা ভালো। |
৪. Guards এর আরো উদাহরণ
isPrime : Int -> String
isPrime n
| n < 2 = "Not prime"
| n == 2 = "Prime"
| n % 2 == 0 = "Not prime"
| otherwise = "Prime"এখানে, আমরা একটি prime number চেক করার জন্য গার্ড ব্যবহার করেছি। প্রথম গার্ড চেক করে যে n ২ এর কম কি না, দ্বিতীয় গার্ড চেক করে n কি ২, তৃতীয় গার্ড চেক করে যে এটি ২ এর গুণফল কি না, এবং শেষের গার্ডটি ডিফল্টভাবে "Prime" ফেরত দেয়।
উপসংহার
Nested Conditions এবং Guards উভয়ই শর্তভিত্তিক কোড নিয়ন্ত্রণের জন্য ব্যবহৃত হয়, তবে Guards বেশিরভাগ সময় পরিষ্কার এবং আরো কার্যকরী কারণ এটি কোডকে আরো সুসংগঠিত করে। Guards সাধারণত ফাংশনাল প্রোগ্রামিং ভাষায় ব্যবহৃত হয় এবং Pattern Matching এর সাথে মিলে। যখন আপনি Pattern Matching বা Multiple conditions নিয়ে কাজ করবেন, তখন Guards সবচেয়ে কার্যকরী পদ্ধতি হিসেবে কাজ করে।
Read more