ভূমিকা
একটি অ্যারে থেকে খালি স্ট্রিং (`''`) এবং `null` বাদে অন্যান্য ভ্যালুগুলোর সংখ্যা গণনা করার পদ্ধতি। `forEach()` লুপ ব্যবহার করে ইটারেশন করা হয়েছে।
সম্পূর্ণ কোড
let subjectNames = ['JavaScript', 'Angular', 'AngularJS', 'Java'];
var count = 0;
subjectNames.forEach(subject => {
if (subject != '' || subject != null) {
count += 1;
}
});
console.log("Number of subject==" + count); // 4
⚠️ লজিক্যাল বাগ সনাক্তকরণ
মূল কোডে একটি **লজিক্যাল এরর** আছে:
if (subject != '' || subject != null)
এই শর্ত **সবসময় true** হবে, কারণ:
- যদি `subject === ''` হয়, তবে `subject != null` → true
- যদি `subject === null` হয়, তবে `subject != ''` → true
- দুটোই false হতে পারে না
সঠিক শর্ত
// AND (&&) ব্যবহার করুন - দুটোই নয়
if (subject !== '' && subject !== null)
// অথবা !== (strict inequality)
if (subject != '' && subject != null)
// অথবা truthy চেক (সাধারণ ক্ষেত্রে)
if (subject)
সঠিক কোড
let subjectNames = ['JavaScript', 'Angular', 'AngularJS', 'Java', '', null];
let count = 0;
subjectNames.forEach(subject => {
if (subject !== '' && subject !== null) {
count += 1;
}
});
console.log("Number of subject==" + count); // 4
আউটপুট
Number of subject==4
আধুনিক ও উন্নত পদ্ধতিগুলো
১. filter + length (সংক্ষিপ্ত ও ফাংশনাল)
const count = subjectNames.filter(s => s !== '' && s !== null).length;
// অথবা truthy ফিল্টার
const count = subjectNames.filter(Boolean).length; // '', null, undefined, 0, false বাদ
২. Reduce (এক পাস)
const count = subjectNames.reduce((acc, val) =>
acc + (val !== '' && val !== null ? 1 : 0), 0);
৩. for...of লুপ (আধুনিক, ব্রেক সাপোর্ট)
let count = 0;
for (const subject of subjectNames) {
if (subject !== '' && subject !== null) count++;
}
Truthy/Falsy চিট শিট
| ভ্যালু | Truthy? | Filter(Boolean) রাখবে? |
|---|---|---|
| "" (খালি স্ট্রিং) | Falsy | না |
| null | Falsy | না |
| undefined | Falsy | না |
| 0 | Falsy | না |
| false | Falsy | না |
| "0" | Truthy | হ্যাঁ |
| "false" | Truthy | হ্যাঁ |
| [] | Truthy | হ্যাঁ |
| {} | Truthy | হ্যাঁ |
সারাংশ
মূল কোডে লজিক্যাল বাগ ছিল (`||` বদলে `&&` ব্যবহার করতে হতো)। আধুনিক কোডে `filter(Boolean)` বা `filter(s => s != null && s !== '')` ব্যবহার করুন। `forEach` বদলে `for...of` বা অ্যারে মেথড চেইনিং বেশি পঠনযোগ্য।