Peyman
Peyman
خواندن ۲ دقیقه·۵ ماه پیش

مهارت از طریق تجربه یا تئوری؟


وقتی که واقعا وارد دنیای برنامه نویسی میشیم مسایلی پیش میاد که ما حتی اگر استاد تئوریات هم باشیم مواجهه باهاشون خارج از انتظارات ماست و اینجاست که میگن بسوزه پدر تجربه. و این تجربیات راهی برای کسب ندارن مگر با کار کنجکاوی کردن در مورد زوایای مختلفشون.

اگر مدتی برنامه نویسی کرده باشید و مخصوصا توی جاوا اسکریپت و یا کتابخونه های مربوطش سرو کله زده باشین احتمالا با 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 استفاده کنید
ضمنا برای مثال های بیشتر میتونین به استک اور فلو مراجعه کنید.

برنامه نویسیreactتجربهفرانت اندternary if
از برنامه نویسی مینویسم،سعی میکنم مفاهیم سختش رو جوری که خودم یادمیگیرم توضیحشو بذارم شاید به درد کسی خورد.چون به جاوااسکریپت علاقمندم مثالهام بیشترشون حول جاوااسکریپت میچرخن
شاید از این پست‌ها خوشتان بیاید