وقتی که واقعا وارد دنیای برنامه نویسی میشیم مسایلی پیش میاد که ما حتی اگر استاد تئوریات هم باشیم مواجهه باهاشون خارج از انتظارات ماست و اینجاست که میگن بسوزه پدر تجربه. و این تجربیات راهی برای کسب ندارن مگر با کار کنجکاوی کردن در مورد زوایای مختلفشون.
اگر مدتی برنامه نویسی کرده باشید و مخصوصا توی جاوا اسکریپت و یا کتابخونه های مربوطش سرو کله زده باشین احتمالا با ternary expression یا short circuiting آشنا هستید و همونطور که میدونید دونستن اینکه truthy یا falsy بودن یعنی چی از بدیهیات هست.
و احتمالا هر کسی که به تازگی وارد دنیای برنامه نویسی شده هم میدونه که خروجی یک عبارت شرطی با && در شرایطی که یکی از متغیر های درگیر false باشه همیشه false خواهد بود:
false && true === false
حالا اگر برنامه نویس سمت فرانت اند باشین خیلی پیش میاد که شرط رندر شدن یک کامپوننت رو truthy بودن عملوند و operand دیگری قرار بدین یعنی چی؟
let a= true; a && <p> Every thing is all right </div>
ازونجایی که a یک مقدار truthy هست تگ p در خروجی رندر میشه و ما با جمله Every thing is all right روبرو میشیم.
در حالیکه اگر مقدار a برابر با false, undefined و یا هر مقدار falsy دیگه ای بود تگ p برای ما رندر نمیشد.
اما آیا واقعا تمام مقادیر falsy شرط بالا رو در همه موقعیت ها دارند؟
جواب تئوریک : بله
جواب مبتنی بر خبرگی و تجربه: خیر
اما در چه موقعیت هایی تجربه با تئوری متناقض درمیاد؟ مثال زیر رو در نظر بگیرید؟
{numberOfPeople && <loadSocietySection />}
بافرض اینکه اگر numberOfPeople عددی بجز صفر بود انتظار داریم <loadSocietySection /> رندر شه و در غیر این صورت هیچ چیزی رندر نشه (که با فرضیات تئوریک ما، انتظاری جز این هم نمیره).
ولی توی React همچین کدی در خروجی مقدار 0 رو رندر میکنه. درحالیکه 0 یک مقدار falsy هست.
چرا؟ چون React تمام مقادیر عددی و رشته ای رو توی خروجی نمایش میده
بنابراین اگر numberOfPeople مقدار false و یا undefined برمیگردوند همه چیز طبق انتظار ما پیش میرفت ولی چون داره 0 برمیگردونه، حتی با اینکه 0 مقدار falsy هست ولی چون نوعش عددی و number هست در خروجی 0 برای ما نمایش داده میشه.
برای بررسی بیشتر این مورد و راه های جایگزین میتونین بجای short-circuiting از ternary expression ها استفاده کنید و یا از boolean cast استفاده کنید
ضمنا برای مثال های بیشتر میتونین به استک اور فلو مراجعه کنید.