You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/bn/2-js-basics/3-making-decisions/README.md

308 lines
28 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "90a3c32c3377f83ab750c2447c77ab98",
"translation_date": "2025-10-22T21:26:42+00:00",
"source_file": "2-js-basics/3-making-decisions/README.md",
"language_code": "bn"
}
-->
# জাভাস্ক্রিপ্টের বেসিক: সিদ্ধান্ত নেওয়া
![জাভাস্ক্রিপ্টের বেসিক - সিদ্ধান্ত নেওয়া](../../../../translated_images/webdev101-js-decisions.69e1b20f272dd1f0b1cb2f8adaff3ed2a77c4f91db96d8a0594132a353fa189a.bn.png)
> স্কেচনোট করেছেন [Tomomi Imura](https://twitter.com/girlie_mac)
আপনি কি কখনো ভেবেছেন অ্যাপ্লিকেশনগুলো কীভাবে বুদ্ধিমত্তার সাথে সিদ্ধান্ত নেয়? যেমন, একটি নেভিগেশন সিস্টেম কীভাবে দ্রুততম পথ নির্বাচন করে, অথবা একটি থার্মোস্ট্যাট কীভাবে ঠিক করে কখন তাপ চালু করতে হবে? প্রোগ্রামিংয়ে সিদ্ধান্ত নেওয়ার এটাই মূল ধারণা।
যেমন চার্লস ব্যাবেজের অ্যানালিটিক্যাল ইঞ্জিন বিভিন্ন শর্তের ভিত্তিতে বিভিন্ন অপারেশনের সিকোয়েন্স অনুসরণ করার জন্য ডিজাইন করা হয়েছিল, তেমনি আধুনিক জাভাস্ক্রিপ্ট প্রোগ্রামগুলো বিভিন্ন পরিস্থিতির উপর ভিত্তি করে সিদ্ধান্ত নিতে পারে। এই শাখা এবং সিদ্ধান্ত নেওয়ার ক্ষমতাই স্থির কোডকে রেসপন্সিভ এবং বুদ্ধিমান অ্যাপ্লিকেশনে রূপান্তরিত করে।
এই পাঠে, আপনি আপনার প্রোগ্রামে কন্ডিশনাল লজিক কীভাবে প্রয়োগ করবেন তা শিখবেন। আমরা কন্ডিশনাল স্টেটমেন্ট, কম্পারিজন অপারেটর এবং লজিক্যাল এক্সপ্রেশন নিয়ে আলোচনা করব যা আপনার কোডকে পরিস্থিতি মূল্যায়ন করতে এবং সঠিকভাবে প্রতিক্রিয়া জানাতে সাহায্য করে।
## প্রি-লেকচার কুইজ
[প্রি-লেকচার কুইজ](https://ff-quizzes.netlify.app/web/quiz/11)
সিদ্ধান্ত নেওয়া এবং প্রোগ্রামের প্রবাহ নিয়ন্ত্রণ করার ক্ষমতা প্রোগ্রামিংয়ের একটি মৌলিক দিক। এই অংশটি কভার করে কীভাবে বুলিয়ান মান এবং কন্ডিশনাল লজিক ব্যবহার করে আপনার জাভাস্ক্রিপ্ট প্রোগ্রামের এক্সিকিউশন পাথ নিয়ন্ত্রণ করবেন।
[![সিদ্ধান্ত নেওয়া](https://img.youtube.com/vi/SxTp8j-fMMY/0.jpg)](https://youtube.com/watch?v=SxTp8j-fMMY "সিদ্ধান্ত নেওয়া")
> 🎥 উপরের ছবিতে ক্লিক করুন সিদ্ধান্ত নেওয়া সম্পর্কে একটি ভিডিও দেখার জন্য।
> আপনি এই পাঠটি [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101-if-else/?WT.mc_id=academic-77807-sagibbon) এ নিতে পারেন!
## বুলিয়ান সম্পর্কে সংক্ষিপ্ত পুনরালোচনা
সিদ্ধান্ত নেওয়ার আগে, চলুন আমাদের আগের পাঠ থেকে বুলিয়ান মানগুলো পুনরায় দেখে নিই। গণিতবিদ জর্জ বুলের নামে নামকরণ করা এই মানগুলো বাইনারি অবস্থানকে উপস্থাপন করে হয় `true` অথবা `false`। এখানে কোনো দ্বিধা নেই, কোনো মধ্যম অবস্থান নেই।
এই বাইনারি মানগুলো সমস্ত কম্পিউটেশনাল লজিকের ভিত্তি গঠন করে। আপনার প্রোগ্রাম যে কোনো সিদ্ধান্ত নেয় তা শেষ পর্যন্ত একটি বুলিয়ান মূল্যায়নে পরিণত হয়।
বুলিয়ান ভেরিয়েবল তৈরি করা সহজ:
```javascript
let myTrueBool = true;
let myFalseBool = false;
```
এটি দুটি ভেরিয়েবল তৈরি করে যেগুলোতে স্পষ্ট বুলিয়ান মান রয়েছে।
✅ বুলিয়ান মানগুলো ইংরেজ গণিতবিদ, দার্শনিক এবং যুক্তিবিদ জর্জ বুল (১৮১৫–১৮৬৪) এর নামে নামকরণ করা হয়েছে।
## কম্পারিজন অপারেটর এবং বুলিয়ান
বাস্তবে, আপনি খুব কমই বুলিয়ান মানগুলো ম্যানুয়ালি সেট করবেন। বরং, আপনি শর্ত মূল্যায়ন করে সেগুলো তৈরি করবেন: "এই সংখ্যাটি ঐ সংখ্যার চেয়ে বড় কি?" অথবা "এই মানগুলো সমান কি?"
কম্পারিজন অপারেটরগুলো এই মূল্যায়নগুলো সক্ষম করে। এগুলো মানগুলো তুলনা করে এবং অপারেন্ডগুলোর সম্পর্কের উপর ভিত্তি করে বুলিয়ান ফলাফল প্রদান করে।
| প্রতীক | বিবরণ | উদাহরণ |
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| `<` | **কম**: দুটি মান তুলনা করে এবং যদি বাম পাশের মানটি ডান পাশের চেয়ে কম হয় তবে `true` বুলিয়ান ডেটা টাইপ প্রদান করে | `5 < 6 // true` |
| `<=` | **কম বা সমান**: দুটি মান তুলনা করে এবং যদি বাম পাশের মানটি ডান পাশের চেয়ে কম বা সমান হয় তবে `true` বুলিয়ান ডেটা টাইপ প্রদান করে | `5 <= 6 // true` |
| `>` | **বেশি**: দুটি মান তুলনা করে এবং যদি বাম পাশের মানটি ডান পাশের চেয়ে বেশি হয় তবে `true` বুলিয়ান ডেটা টাইপ প্রদান করে | `5 > 6 // false` |
| `>=` | **বেশি বা সমান**: দুটি মান তুলনা করে এবং যদি বাম পাশের মানটি ডান পাশের চেয়ে বেশি বা সমান হয় তবে `true` বুলিয়ান ডেটা টাইপ প্রদান করে | `5 >= 6 // false` |
| `===` | **কঠোর সমতা**: দুটি মান তুলনা করে এবং যদি ডান এবং বাম পাশের মানগুলো সমান এবং একই ডেটা টাইপ হয় তবে `true` বুলিয়ান ডেটা টাইপ প্রদান করে। | `5 === 6 // false` |
| `!==` | **অসমতা**: দুটি মান তুলনা করে এবং কঠোর সমতা অপারেটর যা প্রদান করবে তার বিপরীত বুলিয়ান মান প্রদান করে | `5 !== 6 // true` |
✅ আপনার জ্ঞান পরীক্ষা করুন ব্রাউজারের কনসোলে কিছু তুলনা লিখে। কোনো ফেরত দেওয়া ডেটা কি আপনাকে অবাক করেছে?
## ইফ স্টেটমেন্ট
`if` স্টেটমেন্টটি আপনার কোডে একটি প্রশ্ন জিজ্ঞাসা করার মতো। "যদি এই শর্তটি সত্য হয়, তবে এই কাজটি করো।" এটি সম্ভবত জাভাস্ক্রিপ্টে সিদ্ধান্ত নেওয়ার জন্য আপনি সবচেয়ে গুরুত্বপূর্ণ টুল ব্যবহার করবেন।
এটি কীভাবে কাজ করে:
```javascript
if (condition) {
// Condition is true. Code in this block will run.
}
```
শর্তটি বন্ধনীর ভিতরে যায়, এবং যদি এটি `true` হয়, জাভাস্ক্রিপ্ট বন্ধনীর ভিতরের কোডটি চালায়। যদি এটি `false` হয়, জাভাস্ক্রিপ্ট পুরো ব্লকটি এড়িয়ে যায়।
আপনি প্রায়ই এই শর্তগুলো তৈরি করতে কম্পারিজন অপারেটর ব্যবহার করবেন। চলুন একটি বাস্তব উদাহরণ দেখি:
```javascript
let currentMoney = 1000;
let laptopPrice = 800;
if (currentMoney >= laptopPrice) {
// Condition is true. Code in this block will run.
console.log("Getting a new laptop!");
}
```
যেহেতু `1000 >= 800` এর মান `true`, ব্লকের ভিতরের কোডটি চালানো হয়, এবং কনসোলে "Getting a new laptop!" প্রদর্শিত হয়।
## ইফ..এলস স্টেটমেন্ট
কিন্তু যদি আপনি চান আপনার প্রোগ্রাম শর্তটি `false` হলে অন্য কিছু করুক? তখন `else` আসে এটি একটি ব্যাকআপ প্ল্যানের মতো।
`else` স্টেটমেন্ট আপনাকে একটি উপায় দেয় বলার জন্য "যদি এই শর্তটি সত্য না হয়, তবে এই অন্য কাজটি করো।"
```javascript
let currentMoney = 500;
let laptopPrice = 800;
if (currentMoney >= laptopPrice) {
// Condition is true. Code in this block will run.
console.log("Getting a new laptop!");
} else {
// Condition is false. Code in this block will run.
console.log("Can't afford a new laptop, yet!");
}
```
এখন যেহেতু `500 >= 800` এর মান `false`, জাভাস্ক্রিপ্ট প্রথম ব্লকটি এড়িয়ে যায় এবং `else` ব্লকটি চালায়। আপনি কনসোলে "Can't afford a new laptop, yet!" দেখতে পাবেন।
✅ এই কোড এবং পরবর্তী কোডটি ব্রাউজারের কনসোলে চালিয়ে আপনার বোঝার পরীক্ষা করুন। বর্তমানMoney এবং laptopPrice ভেরিয়েবলের মান পরিবর্তন করে ফেরত দেওয়া `console.log()` পরিবর্তন করুন।
## সুইচ স্টেটমেন্ট
কখনও কখনও আপনাকে একটি মানকে একাধিক অপশনের সাথে তুলনা করতে হতে পারে। যদিও আপনি একাধিক `if..else` স্টেটমেন্ট চেইন করতে পারেন, এই পদ্ধতি ভারী হয়ে যায়। `switch` স্টেটমেন্ট একাধিক পৃথক মান পরিচালনার জন্য একটি পরিষ্কার কাঠামো প্রদান করে।
এই ধারণাটি প্রাথমিক টেলিফোন এক্সচেঞ্জে ব্যবহৃত যান্ত্রিক সুইচিং সিস্টেমের মতো একটি ইনপুট মান নির্ধারণ করে কোন নির্দিষ্ট পথটি এক্সিকিউশন অনুসরণ করবে।
```javascript
switch (expression) {
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
}
```
এটি কীভাবে গঠিত:
- জাভাস্ক্রিপ্ট একবার এক্সপ্রেশনটি মূল্যায়ন করে
- এটি প্রতিটি `case` এর মধ্য দিয়ে যায় একটি ম্যাচ খুঁজতে
- যখন এটি একটি ম্যাচ খুঁজে পায়, এটি সেই কোড ব্লকটি চালায়
- `break` জাভাস্ক্রিপ্টকে থামতে এবং সুইচ থেকে বের হতে বলে
- যদি কোনো কেসের সাথে মিল না হয়, এটি `default` ব্লকটি চালায় (যদি থাকে)
```javascript
// Program using switch statement for day of week
let dayNumber = 2;
let dayName;
switch (dayNumber) {
case 1:
dayName = "Monday";
break;
case 2:
dayName = "Tuesday";
break;
case 3:
dayName = "Wednesday";
break;
default:
dayName = "Unknown day";
break;
}
console.log(`Today is ${dayName}`);
```
এই উদাহরণে, জাভাস্ক্রিপ্ট দেখে যে `dayNumber` হল `2`, মিল খুঁজে পায় `case 2`, `dayName` কে "Tuesday" সেট করে এবং তারপর সুইচ থেকে বের হয়ে যায়। ফলাফল? "Today is Tuesday" কনসোলে প্রদর্শিত হয়।
✅ এই কোড এবং পরবর্তী কোডটি ব্রাউজারের কনসোলে চালিয়ে আপনার বোঝার পরীক্ষা করুন। ভেরিয়েবল a এর মান পরিবর্তন করে ফেরত দেওয়া `console.log()` পরিবর্তন করুন।
## লজিক্যাল অপারেটর এবং বুলিয়ান
জটিল সিদ্ধান্ত প্রায়ই একাধিক শর্ত একসাথে মূল্যায়ন করার প্রয়োজন হয়। যেমন বুলিয়ান অ্যালজেব্রা গণিতবিদদের লজিক্যাল এক্সপ্রেশনগুলো একত্রিত করতে দেয়, প্রোগ্রামিং লজিক্যাল অপারেটর প্রদান করে একাধিক বুলিয়ান শর্ত সংযোগ করার জন্য।
এই অপারেটরগুলো সহজ সত্য/মিথ্যা মূল্যায়নগুলো একত্রিত করে জটিল কন্ডিশনাল লজিক সক্ষম করে।
| প্রতীক | বিবরণ | উদাহরণ |
| ------ | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| `&&` | **লজিক্যাল AND**: দুটি বুলিয়ান এক্সপ্রেশন তুলনা করে। উভয় পাশ সত্য হলে শুধুমাত্র সত্য প্রদান করে | `(5 > 3) && (5 < 10) // উভয় পাশ সত্য। সত্য প্রদান করে` |
| `\|\|` | **লজিক্যাল OR**: দুটি বুলিয়ান এক্সপ্রেশন তুলনা করে। অন্তত একটি পাশ সত্য হলে সত্য প্রদান করে | `(5 > 10) \|\| (5 < 10) // এক পাশ মিথ্যা, অন্যটি সত্য। সত্য প্রদান করে` |
| `!` | **লজিক্যাল NOT**: একটি বুলিয়ান এক্সপ্রেশনের বিপরীত মান প্রদান করে | `!(5 > 10) // 5 10 এর চেয়ে বেশি নয়, তাই "!" এটিকে সত্য করে` |
এই অপারেটরগুলো আপনাকে শর্তগুলো কার্যকরভাবে একত্রিত করতে দেয়:
- AND (`&&`) মানে উভয় শর্ত সত্য হতে হবে
- OR (`||`) মানে অন্তত একটি শর্ত সত্য হতে হবে
- NOT (`!`) সত্যকে মিথ্যা করে এবং মিথ্যাকে সত্য করে
## লজিক্যাল অপারেটর দিয়ে শর্ত এবং সিদ্ধান্ত
চলুন এই লজিক্যাল অপারেটরগুলো একটি বাস্তব উদাহরণে দেখি:
```javascript
let currentMoney = 600;
let laptopPrice = 800;
let laptopDiscountPrice = laptopPrice - (laptopPrice * 0.2); // Laptop price at 20 percent off
if (currentMoney >= laptopPrice || currentMoney >= laptopDiscountPrice) {
// Condition is true. Code in this block will run.
console.log("Getting a new laptop!");
} else {
// Condition is false. Code in this block will run.
console.log("Can't afford a new laptop, yet!");
}
```
এই উদাহরণে: আমরা ২০% ডিসকাউন্ট মূল্য (৬৪০) গণনা করি, তারপর মূল্যায়ন করি যে আমাদের উপলব্ধ অর্থ সম্পূর্ণ মূল্য অথবা ডিসকাউন্ট মূল্যের মধ্যে কোনো একটি কভার করে কিনা। যেহেতু ৬০০ ডিসকাউন্ট মূল্যের থ্রেশহোল্ড ৬৪০ পূরণ করে, শর্তটি সত্য হয়।
### নেগেশন অপারেটর
কখনও কখনও কিছু সত্য না হলে তা ভাবা সহজ হয়। যেমন "ব্যবহারকারী লগ ইন করেছেন কি?" এর পরিবর্তে আপনি "ব্যবহারকারী লগ ইন করেননি কি?" জিজ্ঞাসা করতে পারেন। বিস্ময়বোধক চিহ্ন (`!`) অপারেটর আপনার জন্য লজিকটি উল্টে দেয়।
```javascript
if (!condition) {
// runs if condition is false
} else {
// runs if condition is true
}
```
`!` অপারেটরটি "এর বিপরীত..." বলার মতো যদি কিছু `true` হয়, `!` এটিকে `false` করে এবং এর বিপরীত।
### টার্নারি এক্সপ্রেশন
সহজ কন্ডিশনাল অ্যাসাইনমেন্টের জন্য, জাভাস্ক্রিপ্ট **টার্নারি অপারেটর** প্রদান করে। এই সংক্ষিপ্ত সিনট্যাক্স আপনাকে একটি কন্ডিশনাল এক্সপ্রেশন এক লাইনে লিখতে দেয়, যা তখন কার্যকর হয় যখন আপনাকে একটি শর্তের উপর ভিত্তি করে দুটি মানের মধ্যে একটি অ্যাসাইন করতে হয়।
```javascript
let variable = condition ? returnThisIfTrue : returnThisIfFalse;
```
এটি একটি প্রশ্নের মতো পড়ে: "এই শর্তটি কি সত্য? যদি হ্যাঁ, এই মানটি ব্যবহার করুন। যদি না, ঐ মানটি ব্যবহার করুন।"
নিচে একটি বাস্তব উদাহরণ দেওয়া হলো:
```javascript
let firstNumber = 20;
let secondNumber = 10;
let biggestNumber = firstNumber > secondNumber ? firstNumber : secondNumber;
```
✅ এই কোডটি কয়েকবার পড়ুন। আপনি কি বুঝতে পারছেন এই অপারেটরগুলো কীভাবে কাজ করছে?
এই লাইনটি যা বলছে তা হলো: "`firstNumber` কি `secondNumber` এর চেয়ে বেশি? যদি হ্যাঁ, তাহলে `firstNumber` কে `biggestNumber` এ রাখুন। যদি না, তাহলে `secondNumber` কে `biggestNumber` এ রাখুন।"
টার্নারি অপারেটরটি এই ঐতিহ্যবাহী `if..else` স্টেটমেন্ট লেখার একটি সংক্ষিপ্ত উপায়:
```javascript
let biggestNumber;
if (firstNumber > secondNumber) {
biggestNumber = firstNumber;
} else {
biggestNumber = secondNumber;
}
```
উভয় পদ্ধতি একই ফলাফল প্রদান করে। টার্নারি অপারেটর সংক্ষিপ্ততা প্রদান করে, যেখানে ঐতিহ্যবাহী ইফ-এলস স্ট্রাকচার জটিল শর্তের জন্য আরও পাঠযোগ্য হতে পারে।
---
## 🚀 চ্যালেঞ্জ
প্রথমে লজিক্যাল অপারেটর ব্যবহার করে একটি প্রোগ্রাম তৈরি করুন, তারপর এটি টার্নারি এক্সপ্রেশন ব্যবহার করে পুনরায় লিখুন। কোন সিনট্যাক্সটি আপনার পছন্দ?
---
## গিটহাব কোপাইলট এজেন্ট চ্যালেঞ্জ 🚀
এজেন্ট মোড ব্যবহার করে নিম্নলিখিত চ্যালেঞ্জটি সম্পূর্ণ করুন:
**বর্ণনা:** এই পাঠ থেকে একাধিক সিদ্ধান্ত নেওয়ার ধারণা প্রদর্শন করে একটি সম্পূর্ণ গ্রেড ক্যালকুলেটর তৈরি করুন, যার মধ্যে থাকবে if-else স্টেটমেন্ট, switch স্টেটমেন্ট, লজিক্যাল অপারেটর এবং টার্নারি এক্সপ্রেশন।
**প্রম্পট:** একটি জাভাস্ক্রিপ্ট প্রোগ্রাম লিখুন যা একটি শিক্ষার্থীর সংখ্যাগত স্কোর (-১০০) গ্রহণ করে এবং নিম্নলিখিত মানদণ্ড অনুযায়ী তাদের লেটার গ্রেড নির্ধারণ করে:
- A: ৯০-১০০
- B: ৮০-৮৯
- C: -৭৯
- D: ৬০-৬৯
- F: ৬০ এর নিচে
প্রয়োজনীয়তা:
1. লেটার গ্রেড নির্ধারণ করতে একটি if-else স্টেটমেন্ট ব্যবহার করুন
2. শিক্ষার্থী পাস করেছেন কিনা (grade >= 60) এবং সম্মান পেয়েছেন কিনা (grade >= 90) তা পরীক্ষা করতে লজিক্যাল অপারেটর ব্যবহার করুন
3. প্রতিটি লেটার গ্রেডের জন্য নির্দিষ্ট ফিডব্যাক প্রদান করতে একটি switch স্টেটমেন্ট ব্যবহার করুন
4. শিক্ষার্থী পরবর্তী কোর্সের জন্য যোগ্য কিনা তা নির্ধারণ করতে একটি টার্নারি অপারেটর ব্যবহার করুন (grade >= 70)
5. স্কোরটি থেকে ১০০ এর মধ্যে আছে কিনা তা নিশ্চিত করতে ইনপুট যাচাই অন্তর্ভুক্ত করুন
বিভিন্ন স্কোর দিয়ে আপনার প্রোগ্রাম পরীক্ষা করুন, যেমন ৫৯, ৬০, ৮৯, ৯০ এবং অকার্যকর ইনপুট।
এজেন্ট মোড সম্পর্কে আরও জানুন [এখানে](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode)।
## পোস্ট-লেকচার কুইজ
[পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/web/quiz/12)
## পর্যালোচনা এবং স্ব-অধ্যয়ন
ব্যবহারকারীর জন্য উপলব্ধ বিভিন্ন অপারেটর সম্পর্কে আরও পড়ুন [MDN-এ](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators)।
জোশ কমিউর অসাধারণ [অপারেটর লুকআপ](https://joshwcomeau.com/operator-lookup/) দেখুন!
## অ্যাসাইনমেন্ট
[অপারেটর](assignment.md)
---
**অস্বীকৃতি**:
এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। এর মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না।