از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
اپراتور Null Coalescing در جاوا اسکریپت با ECMAScript 2020 هنگام کار در چرخه عمر درخواست-پاسخ، میخواهید مطمئن شوید که یک پاسخ با بدن مورد نظر – یا حداقل یک پاسخ آموزنده دریافت میشود تا کلاینت درخواست کننده داده در حلقه باقی بماند. در صورت وجود مقادیر تهی، احتمالاً می خواهید نتیجه متفاوتی را برگردانید.
سرفصلهای مطلب
معرفی
هنگام کار در a چرخه عمر درخواست-پاسخ، می خواهید مطمئن شوید که یک پاسخ با بدن مورد نظر – یا حداقل یک پاسخ آموزنده می رسد تا مشتری که داده را درخواست کرده در حلقه بماند. در صورت مقادیر تهی، احتمالاً می خواهید نتیجه متفاوتی را برگردانید.
جاوا اسکریپت مطمئن شد که می توان با آن این کار را انجام داد عملگر باطل همچنین به عنوان شناخته شده است اپراتور Null Coalescing، که با اضافه شدن به زبان ECMAScript 2020. با آن، می توانید مقداری را برگردانید یا بسته به مقدار دیگری، آن را به مقدار دیگری اختصاص دهید روی یک عبارت بولی
اگر مقدار دیگری وجود نداشته باشد، می توان از این برای برگرداندن مقادیر پیش فرض استفاده کرد. یا برای برگرداندن مقادیر مختلف بر اساس روی هر عبارت بولی دیگر
را اپراتور Null Coalescing متعلق به گروه است اپراتورهای منطقی اتصال کوتاه، که در یک لحظه نگاهی به آن خواهیم داشت.
تا حدودی شبیه به اپراتور مشروط، که گاهی اوقات به آن معروف است اپراتور سه تایی:
// Null Coalescing Operator
// If the left-hand side is null, the right-hand side is returned
result = nullValue ?? defaultValue
// Conditional Operator
// If the condition is true, the left side is assigned, otherwise, the right side is assigned
condition ? value : value2
در این راهنما، نگاهی به این خواهیم داشت nullish/Null Coalescing Operator، اتصال کوتاه و مقادیر درست و نادرست – از طریق مثال های عملی
اتصال کوتاه چیست؟
جاوا اسکریپت اپراتورها را از چپ به راست ارزیابی می کند. با اپراتورهای انحصاری که در آن نیاز داریم هر دو مقادیر برای ارزیابی صحیح، گاهی اوقات کافی است فقط اولین عبارت ارزیابی را بررسی کنید.
اگر سمت چپ اپراتور باشد false
، صرف نظر از سمت راست، اپراتور نتیجه می دهد false
بنابراین ارزشیابی طرف مقابل فایده ای ندارد و برای حفظ قدرت محاسباتی از آن صرف نظر می شود.
این process نامیده میشود اتصال کوتاه.
قبل از ES2020، جاوا اسکریپت تنها دو عملگر منطقی اتصال کوتاه داشت:
- عملگر منطقی و –
&&
- عملگر منطقی یا –
||
با آپدیت جدید، جاوا اسکریپت یکی دیگر را معرفی کرد:
- ادغام پوچ اپراتور –
??
اتصال کوتاه به خودی خود کد را کارآمدتر میکند، زیرا ارزیابیهای کمتری نیاز است، هرچند، از طریق عملگر Null Coalescing، میتوانیم منطق کد را نیز بر اساس تغییر دهیم. روی یک عملیات اتصال کوتاه
برای مثال:
let x = 10;
let y = 20;
let result;
if (x+y > 20){
result = "x+y is greater than 20";
}
console.log(result);
این کد نتیجه خواهد داد:
x+y is greater than 20
اگرچه، ما همچنین میتوانیم آن را کنار بگذاریم if
عبارت را به طور کامل بیان کنید و به جای آن از عملگر اتصال کوتاه و برای کوتاه کردن عبارات استفاده کنید:
let x = 10;
let y = 20;
(x+y) > 20 && console.log("x+y is greater than 20");
(x+y) > 20
ارزیابی می کند true
بنابراین بلوک بعدی وارد می شود و پیام چاپ می شود.
اتصال کوتاه اینجا کجاست؟
اگر (x+y) > 20
بود دروغین (در یک ثانیه در مورد این صحبت خواهیم کرد)، مفسر جاوا اسکریپت حتی به قسمت دوم عبارت نگاه نمی کند، و بلوک هرگز اجرا نمی شود.
به طور مشابه، می توانیم از عملگر منطقی OR به روشی مشابه استفاده کنیم:
let x = 10;
let y = 20;
(x-y) > 0 || console.log("x+y is lesser than 0");
به طور طبیعی، این نتیجه می شود:
x+y is lesser than 0
این مثال ها بسیار ساده هستند، اما عملگرهای منطقی می توانند بسیاری از مشکلات عملی را حل کنند و کد شما را بسیار تمیزتر کنند. با این حال، اگر به درستی استفاده نشود، ممکن است برای خود سردرد ایجاد کنید.
ارزش های درست و نادرست
وقتی با عملگرهای منطقی کار می کنید، با این شرایط آشنا خواهید شد ارزش واقعی و ارزش کاذب.
آ ارزش واقعی هر ارزشی است این نیست:
null
undefined
0
''
– رشته خالیfalse
NaN
– یک عدد نیست
همه این مقادیر در نظر گرفته شده است دروغین.
در جاوا اسکریپت، همه ارزش های غلط به عنوان ارزیابی می شوند false
زمانی که در حلقه ها یا if
بیانیه ها و همه ارزش های واقعی به عنوان ارزیابی می شوند true
.
اکنون که پیش نیازها را پوشش داده ایم، در نهایت اجازه دهید نگاهی به آن بیاندازیم اپراتور باطل.
اپراتور ادغام ناقص
اپراتور پوچ بررسی می کند که آیا مقدار است باطل کردن، نه دروغین. آ ارزش باطل است undefined
یا null
.
این به ما اجازه می دهد تا زمانی که از نتایج مطمئن نیستیم، مقادیر غیر تهی پیش فرض را به متغیرها اختصاص دهیم.
به عنوان مثال، بیایید سرویس کاربری را مسخره کنیم که کاربر را از پایگاه داده بازیابی می کند و نام او را برمی گرداند. احتمال اینکه کاربر وجود نداشته باشد 10 درصد است که توسط a تنظیم می شود Math.random()
زنگ زدن. در 10 تماس با پایگاه داده، ما به احتمال زیاد حداقل یک کاربر گم شده را خواهیم دید – که با علامت نشان داده شده است. null
نتیجه:
class DbConnection {
find(id) {
if (Math.random() > 0.9) {
return null;
} else {
return `John Doe ${id}`;
}
}
}
const db = new DbConnection();
for (let i = 0; i < 10; i++) {
let user = db.find(i);
if (user != null){
console.log(user);
} else {
console.log('User not found');
}
}
کد خروجی یا نام یا پیامی را نشان می دهد که نشان دهنده عدم وجود کاربر در پایگاه داده است، اگرچه این امر مستلزم انجام بررسی های تهی در پایگاه داده است. if
بیانیه.
این نتیجه در:
John Doe 0
John Doe 1
User not found
John Doe 3
John Doe 4
John Doe 5
User not found
User not found
John Doe 8
John Doe 9
به طور اتفاقی، به نظر می رسد این یک اجرا عجیب و غریب است – 3 null
نتایج! این کد به خوبی کار می کند و کار می کند null
موارد اگر پایگاه داده a را برگرداند null
ارزش.
از طرف دیگر، میتوانیم از چیز بسیار مختصرتری استفاده کنیم:
class DbConnection {
find(id) {
return Math.random() > 0.9 ? null : `John Doe ${id}`
}
}
const db = new DbConnection();
for (let i = 0; i < 10; i++) {
let user = db.find(i) ?? "User not found"
console.log(user)
}
با استفاده از a عملگر شرطی، ما هم برگشتیم null
یا John Doe
با شناسه مربوطه خود اگر Math.random() > 0.9
، null
برگردانده شده است، بنابراین به احتمال 10٪ بازگردانده می شود روی هر تماس با پایگاه داده
سپس با فرض امکان null
مقادیر – ما از آن استفاده کرده ایم اپراتور باطل برای اختصاص یک مقدار جدید به user
نتیجه اگر معلوم شود null
. اگر db.find()
برمی گرداند null
، مقدار سمت راست وارد می شود و به جای آن برگردانده می شود.
این کد بسیار تمیزتر و کوتاهتر از کد است if-else
اظهارات، و if-else
عبارات تمایل بیشتری به آبشار دارند و حتی پیچیده تر می شوند. اگرچه، خواندن چندین اپراتور اتصال کوتاه زنجیر شده نیز دشوار است، بنابراین جایگزین کردن آن واقعاً توصیه نمی شود. همه if-else
بلوک ها:
let s1 = (Math.random() > 0.5 ? 1 : null) ?? (Math.random() > 0.5 ? 4 : (Math.random() > 0.5 ? null : 1))
console.log(s1)
میدونی این چی میشه print? با در نظر گرفتن احتمالات تصادفی، احتمالاً کمی طول می کشد تا این را به صورت دستی تجزیه کنید و ببینید کدام مقادیر را می توانید پیش بینی کنید. این کد تمایل به نتیجه دارد 1
با null
و 4
در برخی موارد، به عنوان مقدار پیش فرض بازگشتی برای عملگر تهی در این مورد است تهی دیگر. به طور معمول، در مواردی مانند این، از بیش از یک یا دو عملگر استفاده نخواهید کرد.
نتیجه
برای جمع بندی این، تنها هدف از عملگر باطل این است که به شما اجازه می دهد همیشه نوعی مقدار پیش فرض را برگردانید، به جای برگرداندن چیزی که وجود ندارد – که در جاوا اسکریپت، همان چیزی است که null
و undefined
منظور داشتن.
منتشر شده در 1403-01-15 17:01:06