Peyman
Peyman
خواندن ۳ دقیقه·۲ سال پیش

اتصال کوتاه یا Short Circuit

اتصال کوتاه_short-circuit
اتصال کوتاه_short-circuit

همیشه وقتی میخوایم از عملگرهای منطقی مثل and (&&) و or (||) استفاده کنیم اینطور برداشت میشه که نتیجه خروجی یا باید false باشه یا True یا بعبارتی ما دنبال نتیجه ای با نوع داده ای Boolean میگردیم پس مهمه که بدونیم توی جاوااسکریپت کدوم مقادیر غلط یا falsy value در نظر گرفته میشن

falsy values
falsy values


حالا بیایم ببینیم اگر کد ما مثل زیر باشه نتیجه چی میشه:

const compare= 3 || 'A' ; resault ==> 3

خب طبیعتا در این حالت خروجی ما نمیتونه false یا true باشه یا بعبارتی الزامی وجود نداره که نتیجه یک عملگر منطقی همیشه Boolean باشه

سه تا ویژگی برای عملگر های منطقی وجود داره :

1) میتونن از هر نوع داده ای یا Data Type استفاده کنن=> همونطور که توی مثال ما از نوع داده ای عددی و رشته ای استفاده شده

2)میتونن هر نوع داده ای رو برگردونن یا return کنن => همونطور که خروجی مثال ما هم نوع عددی و 3 هست

primitive data types in javascript
primitive data types in javascript

3) میتونن محاسبات اتصال کوتاه یا Short Circuit Evaluation انجام بدن یعنی چی؟ یعنی اینکه برنامه میاد و میبینه که عملگر اصلی ما || هست یا && اگر || هست بررسی میکنه که آیا اولین مقدار یا value ایکه باهاش مواجه میشه یک مقدار صحیح یا truthy value هست یا نه؟اگر truthy value بود همون رو میفرسته رو خروجی و اصلا دیگه سراغ عملوند یا operand دوم نمیره

حالا مثال های زیرو درنظر بگیریم:

console.log( ' ' || 'A') =====> 'A' هست بنابراین خروجی ما اولین مقدار صحیحهfalsy value ازاونجاییکه عبارت رشته خالی یک مقدار غلط یا console.log( true || 0) =====> true عملوند اول ما یک مقدار صحیحه وبرنامه به سراغ عملوند های بعدی نمیره و همونو میفرسته به خروجی console.log( undefined || null) =====> null هردو عملوند ما مقدار غلط دارن در اینصورت آخرین مقدار به خروجی فرستاده میشه

حالا با توجه به مثال و توضیحات بالا میشه متوجه شد که اگر یک عبارتی داشته باشیم که هزارتا عملوند هم داشته باشه به محض رسیدن به اولین truthy value بقیه عبارات نادیده گرفته میشن و خروجی مشخص میشه

console.log(undefined || 0 || 'hello' || 23 || null) result ====> hello

حالا اگر بخوایم از short circuiting توی عملگر && استفاده کنیم دقیقا برعکس عملگر || کارمیکنه .یعنی چی؟یعنی اینکه توی && همیشه خروجی false هست مگر اینکه تمام عملوند ها ، True باشن پس اینجا برنامه میاد و دنبال اولین false میگرده تا به خروجی بفرسته

console.log( 0 && 'A' ) ====> 0 هست پس خروجی ما 0 خواهد بود falsy value عملوند اول یک مقدار غلط یا console.log(7 && 'A') ===>A هردو عملوند ما مقدار صحیح هستن در اینصورت آخرین مقدار به خروجی میره
Nullish coalescing
Nullish coalescing

حالا درنظر داشته باشین که ما نمیخوایم 0 و رشته خالی رو به عنوان مقادیر غلط یا falsy value در نظر بگیریم مثلا ما یک متغیری داریم که مقدار پیشفرضش 0 یا ' ' هست در اینصورت برنامه ما میاد و اونهارو false درنظر میگیره که این خلاف خواسته ماست:

let number=0; console.log(number || 10); =====> 10

برای حل این مشکل یک عملگری به اسم Nullish coalescing operator توی ES2020 تعریف شد که میاد مشکل رو حل میکنه فقط کافیه بجای علامت || از ?? استفاده کنیم :

let number=0; console.log(number ?? 10) =====> 0

امیدوارم مفید بوده باشه

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