من قبلا مقاله ای در همین ویرگول منتشر کردم و به صورت کلی در مورد این قابلیت صحبت کردم اگر مایلید از لینک زیر میتونید مطالعه کنید:
اما این ساختار سینتکسی کاربرد های پیشرفته تری هم داره به طور مثال اینکه اگر یک متود از آبجکت وجود داشت (منظور از وجود داشتن اینه که null یا undefined نباشه) صدا زده بشه. بطور مثال ما دو آبجکت داریم به اسم های user1 و user2 که یک پراپرتی به اسم role دارن که نقش اونها رو در سایت مشخص می کنه کاربر اول نقش نویسنده رو داره و دومی یک کاربر عادیه.اونی که نویسنده هست متدی داره به اسم writeArticle:
let user1 = { role:"writer", writeArticle() { alert("Writing"); } } let user2 = { role:"user", }
و ما اگر بخوایم متود writeArticle را برای یوزری صدا بزنیم که نویسنده نیست بی شک با ارور زیر مواجه می شویم:
user2.writeArticle is not a function
اما اگر بخوایم به جای ارور هیچ اتفاقی نیفته باز Optional Chaining به کمکون میاد:
user2.writeArticle?.()
در واقع کد بالا بررسی می کنه اگر user2 متودی به اسم writeArticle داره یا نه.اگر وجود داشت اون رو فراخوانی می کنه و اگر نه هیچ اتفاقی رخ نمی ده و دیگه اروری هم نخواهیم دید!
البته این رو هم بگم که استفاده بیش از حد از این قابلیت میتونه مشکل آفرین باشه و فقط وقتی جایز هست که وجود نداشتن چیزی مجاز باشد و وجود نداشتنش اخلالی در روند برنامه ایجاد نکند.
غیر از نقطه ما می تونیم به پراپرتی های یک آیجکت به کمک براکت هم دسترسی داشته باشیم:
let user = { name:"John" } //We can write user.name //Or user["name"]
و Optional Chaining با این سینتکس هم قابل استفاده است:
let user = { name:"John" } let user2 = null; console.log(user?.["name"]) // Output : John console.log(user2?.["name"]) // Output : undefined
و نکته آخر اینکه از این قابلیت هنگامی که داریم مقدار یک پراپرتی رو تغییر میدیم نمی تونیم استفاده کنیم و فقط در زمان خواندن و حذف کردن یک پراپرتی قابل استفاده است.
امیدوارم مفید بوده باشه. روز خوش❤❤