محمد پیمان راد
محمد پیمان راد
خواندن ۲ دقیقه·۲ سال پیش

فوت های کوزه گری در مورد Optional Chaining در جاوااسکریپت


من قبلا مقاله ای در همین ویرگول منتشر کردم و به صورت کلی در مورد این قابلیت صحبت کردم اگر مایلید از لینک زیر میتونید مطالعه کنید:

https://virgool.io/@peymanradmo/%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA-optional-chaining-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA%D8%A7%DB%8C%D9%86-%DA%86%D9%87-%D9%81%D8%A7%DB%8C%D8%AF%D9%87-%D8%A7%DB%8C-%D8%AF%D8%A7%D8%B1%D9%87-kt1pjxb0uyw0


اما این ساختار سینتکسی کاربرد های پیشرفته تری هم داره به طور مثال اینکه اگر یک متود از آبجکت وجود داشت (منظور از وجود داشتن اینه که null یا undefined نباشه) صدا زده بشه. بطور مثال ما دو آبجکت داریم به اسم های user1 و user2 که یک پراپرتی به اسم role دارن که نقش اونها رو در سایت مشخص می کنه کاربر اول نقش نویسنده رو داره و دومی یک کاربر عادیه.اونی که نویسنده هست متدی داره به اسم writeArticle:

let user1 = { role:&quotwriter&quot, writeArticle() { alert(&quotWriting&quot); } } let user2 = { role:&quotuser&quot, }


و ما اگر بخوایم متود writeArticle را برای یوزری صدا بزنیم که نویسنده نیست بی شک با ارور زیر مواجه می شویم:

user2.writeArticle is not a function

اما اگر بخوایم به جای ارور هیچ اتفاقی نیفته باز Optional Chaining به کمکون میاد:

user2.writeArticle?.()

در واقع کد بالا بررسی می کنه اگر user2 متودی به اسم writeArticle داره یا نه.اگر وجود داشت اون رو فراخوانی می کنه و اگر نه هیچ اتفاقی رخ نمی ده و دیگه اروری هم نخواهیم دید!

البته این رو هم بگم که استفاده بیش از حد از این قابلیت میتونه مشکل آفرین باشه و فقط وقتی جایز هست که وجود نداشتن چیزی مجاز باشد و وجود نداشتنش اخلالی در روند برنامه ایجاد نکند.


استفاده از Optional Chaining در هنگام خواندن پراپرتی با [ ]

غیر از نقطه ما می تونیم به پراپرتی های یک آیجکت به کمک براکت هم دسترسی داشته باشیم:

let user = { name:&quotJohn&quot } //We can write user.name //Or user[&quotname&quot]

و Optional Chaining با این سینتکس هم قابل استفاده است:

let user = { name:&quotJohn&quot } let user2 = null; console.log(user?.[&quotname&quot]) // Output : John console.log(user2?.[&quotname&quot]) // Output : undefined

و نکته آخر اینکه از این قابلیت هنگامی که داریم مقدار یک پراپرتی رو تغییر میدیم نمی تونیم استفاده کنیم و فقط در زمان خواندن و حذف کردن یک پراپرتی قابل استفاده است.



امیدوارم مفید بوده باشه. روز خوش❤❤

جاوااسکریپتبرنامه نویسی
در حال ماجراجویی در دنیای پایان ناپذیر وب
شاید از این پست‌ها خوشتان بیاید