مقدمه

در درس قبلی با مفهوم سازنده‌ها و ایجاد اشیاء مشابه آشنا شدیم. حالا می‌خواهیم با ابزاری مدرن و بسیار کاربردی آشنا شویم که دسترسی به پراپرتی‌های تو در تو را در اشیاء به طور ساده و ایمن ممکن می‌کند: تکنیک Optional Chaining. این تکنیک از ES2020 به جاوااسکریپت اضافه شده و نوشتن کدهای حرفه‌ای‌تر و بدون خطا را بسیار آسان‌تر می‌کند.

Optional Chaining در عمل

گاهی در پروژه‌های واقعی، مطمئن نیستید که همه بخش‌های یک شیء تو در تو مقداردهی شده‌اند یا نه. اگر مستقیماً به یک پراپرتی تو در تو دسترسی پیدا کنید و یکی از بخش‌های میانی undefined یا null باشد، برنامه با خطا متوقف می‌شود.

فرض کنید یک شیء user دارید که بخش address در آن تعریف نشده. اگر مستقیم سراغ user.address.city بروید و address مقدار نداشته باشد، خطای runtime خواهید داشت:

Copy Icon JAVASCRIPT
let user = {};
console.log(user.address.city); // Error: Cannot read property 'city' of undefined

دلیل این خطا این است که جاوااسکریپت نمی‌تواند به پراپرتی city دسترسی پیدا کند چون address وجود ندارد. در سناریوهای واقعی (مثلاً کار با داده‌های API یا فرم‌های کاربر)، این اتفاق بسیار رایج است.

استفاده از Optional Chaining

با استفاده از عملگر ?. می‌توانید به شکل امن و مختصر به پراپرتی‌های تو در تو دسترسی پیدا کنید. اگر هر بخش از مسیر وجود نداشت، جاوااسکریپت به جای خطا دادن، مقدار undefined را برمی‌گرداند:

Copy Icon JAVASCRIPT
let user = {};
console.log(user.address?.city); // undefined (بدون خطا)

می‌توانید از ?. برای دسترسی امن به متدها و عناصر آرایه هم استفاده کنید:

Copy Icon JAVASCRIPT
let user = {};
console.log(user.getProfile?.()); // undefined
let data = [10, 20, 30];
console.log(data?.[1]); // 20

مقایسه Optional Chaining با روش سنتی

پیش از ES2020 برای دسترسی امن به پراپرتی‌های تو در تو باید هر مرحله را جداگانه چک می‌کردید که کد را طولانی و ناخوانا می‌کرد:

Copy Icon JAVASCRIPT
if (user.address && user.address.city) {
  console.log(user.address.city);
}

اما با Optional Chaining، همین منطق به یک عبارت کوتاه و خوانا تبدیل می‌شود و دیگر لازم نیست همه‌جا شرط اضافی بنویسید. این تکنیک فقط زمانی undefined برمی‌گرداند که یکی از بخش‌های مسیر مقدار null یا undefined باشد.

در محموع می‌توان گفت عملگر Optional Chaining (?.) یک ابزار قدرتمند و مدرن برای نوشتن کدهای مقاوم و خوانا در پروژه‌های واقعی جاوااسکریپت است. این تکنیک دسترسی به پراپرتی‌ها و متدهای تو در تو را ساده و بی‌خطر می‌کند و شما را از بررسی دستی هر مرحله نجات می‌دهد.

در درس بعد با نوع داده Symbol و کاربردهای حرفه‌ای آن در اشیاء آشنا خواهیم شد.