جلسه ۸ - منطق بولین و مقادیر درست و نادرست

بخش ۶: منطق بولین: مقادیر Truthy و Falsy (Boolean Logic: Truthy and Falsy Values)

این مفهوم یکی از پایه‌ای‌ترین و در عین حال قدرتمندترین مفاهیم در جاوااسکریپت است که درک آن برای نوشتن کدهای تمیز و بهینه ضروری است.

مفاهیم کلیدی:

۱. مقادیر Falsy (نادرست‌نما): این مقادیر وقتی در context بولین استفاده شوند، معادل false در نظر گرفته می‌شوند. فقط ۶ مقدار falsy در جاوااسکریپت وجود دارد:

false
0
"" یا '' (رشته خالی)
null
undefined
NaN

مثال:

if ("") {
    console.log("این اجرا نمی‌شود");
} else {
    console.log("رشته خالی falsy است"); // این اجرا می‌شود
}

۲. مقادیر Truthy (درست‌نما): هر مقداری که جزو ۶ مورد بالا نباشد، truthy است و معادل true در نظر گرفته می‌شود.

// نمونه‌هایی از مقادیر truthy
if ("hello") console.log("رشته غیرخالی"); // اجرا می‌شود
if (42) console.log("اعداد غیرصفر"); // اجرا می‌شود
if ([]) console.log("آرایه خالی"); // اجرا می‌شود
if ({}) console.log("شیء خالی"); // اجرا می‌شود
if (function() {}) console.log("تابع"); // اجرا می‌شود

۳. عملگرهای منطقی و رفتار آنها:

عملگر AND (&&):

  • اولین falsy value را برمی‌گرداند
  • اگر همه truthy باشند، آخرین value را برمی‌گرداند
console.log("hello" && 42); // 42
console.log(0 && "world"); // 0

عملگر OR (||):

  • اولین truthy value را برمی‌گرداند
  • اگر همه falsy باشند، آخرین value را برمی‌گرداند
console.log("" || "fallback"); // "fallback"
console.log(0 || null || "value"); // "value"

عملگر Nullish Coalescing (??):

  • اولین value که null یا undefined نباشد را برمی‌گرداند
console.log(0 ?? "default"); // 0
console.log(null ?? "default"); // "default"
console.log(undefined ?? "fallback"); // "fallback"

۴. کاربردهای عملی:

// مقدار پیش‌فرض برای متغیرها
let username = "";
let displayName = username || "میهمان";
console.log(displayName); // "میهمان"
 
// اعتبارسنجی ورودی
function validateInput(input) {
    if (!input) {
        return "ورودی نامعتبر است";
    }
    return "ورودی معتبر است";
}
 
// شرط‌های کوتاه
isLoggedIn && showDashboard();

ارزیابی بخش ۶:

سؤال ۱: پیش‌بینی خروجی خروجی هر خط از کد زیر چیست؟

console.log(Boolean(""));
console.log(Boolean("0"));
console.log(Boolean(0));
console.log(Boolean(null));
console.log(Boolean([]));
console.log(Boolean({}));

سؤال ۲: تحلیل عملگرهای منطقی خروجی هر عبارت زیر چیست؟

console.log("hello" && 42);
console.log(0 && "world");
console.log("" || "fallback");
console.log("value" || "fallback");
console.log(null ?? "default");
console.log(0 ?? "default");

سؤال ۳: نوشتن تابع کاربردی تابعی بنویسید که یک پارامتر دریافت کند و اگر پارامتر falsy بود، مقدار پیش‌فرض “مقدار نامعتبر” را برگرداند، در غیر این صورت خود پارامتر را برگرداند.

پاسخ‌های شما:

  1. خروجی کد: false, true, false, false, true, true
  2. عملگرهای منطقی: 42, 0, fallback, value, default, 0
  3. تابع: function isFulsy(a) { if(a) return a; else return "مقدار نامعتبر"; }

بازخورد و تحلیل پاسخ‌های شما:

سؤال ۱: پیش‌بینی خروجی (کاملاً صحیح ✅)

console.log(Boolean(""));     // ✅ false (صحیح)
console.log(Boolean("0"));    // ✅ true (صحیح - رشته غیرخالی)
console.log(Boolean(0));      // ✅ false (صحیح)
console.log(Boolean(null));   // ✅ false (صحیح)
console.log(Boolean([]));     // ✅ true (صحیح - آرایه خالی truthy است)
console.log(Boolean({}));     // ✅ true (صحیح - شیء خالی truthy است)

پاسخ‌های شما کاملاً درست است! شما به خوبی مفهوم truthy و falsy را درک کرده‌اید.


سؤال ۲: تحلیل عملگرهای منطقی (کاملاً صحیح ✅)

console.log("hello" && 42);      // ✅ 42 (صحیح - آخرین truthy)
console.log(0 && "world");       // ✅ 0 (صحیح - اولین falsy)
console.log("" || "fallback");   // ✅ "fallback" (صحیح - اولین truthy)
console.log("value" || "fallback"); // ✅ "value" (صحیح - اولین truthy)
console.log(null ?? "default");  // ✅ "default" (صحیح - اولین non-null/undefined)
console.log(0 ?? "default");     // ✅ 0 (صحیح - 0 جزو null/undefined نیست)

شما رفتار عملگرهای منطقی را به طور کامل و دقیق درک کرده‌اید!


سؤال ۳: نوشتن تابع کاربردی (صحیح با امکان بهبود ✅)

تابع شما کاملاً درست کار می‌کند، اما می‌توان آن را به صورت حرفه‌ای‌تر نوشت:

// نسخه فعلی شما (صحیح):
function isFulsy(a) {
    if(a) return a;
    else return "مقدار نامعتبر";
}
 
// نسخه بهبود یافته با عملگر منطقی:
function validateValue(value) {
    return value || "مقدار نامعتبر";
}
 
// یا با شرط ternary:
function validateValue(value) {
    return value ? value : "مقدار نامعتبر";
}
 
// تست توابع
console.log(validateValue("test"));     // "test"
console.log(validateValue(""));         // "مقدار نامعتبر"
console.log(validateValue(0));          // "مقدار نامعتبر"
console.log(validateValue(null));       // "مقدار نامعتبر"

نکات بهبود:

  • استفاده از عملگر منطقی || برای کوتاه‌تر شدن کد
  • نام‌گذاری واضح‌تر تابع (validateValue به جای isFulsy)
  • توجه: تابع شما برای مقدار 0 و "" نیز “مقدار نامعتبر” برمی‌گرداند

جمع‌بندی نهایی بخش ۶:

شما مفاهیم مهم truthy/falsy و عملگرهای منطقی را به طور کامل فرا گرفته‌اید:

  • ✅ تشخیص دقیق ۶ مقدار falsy
  • ✅ درک رفتار عملگرهای &&، || و ??
  • ✅ توانایی نوشتن توابع کاربردی با استفاده از این مفاهیم

نکات مهم برای توسعه‌دهنده ارشد:

  • از عملگر ?? زمانی استفاده کنید که فقط می‌خواهید null و undefined را فیلتر کنید
  • از عملگر || زمانی استفاده کنید که همه مقادیر falsy را می‌خواهید فیلتر کنید
  • همیشه به رفتار خاص آرایه‌ها و اشیای خالی (که truthy هستند) توجه داشته باشید