زنجیره سازی اختیاری در جاوا اسکریپت – با مثال توضیح داده شده است
توسعه جاوا اسکریپت اغلب شامل پیمایش در میان اشیاء تو در تو می شود، که می تواند دست و پا گیر و مستعد خطا باشد، به خصوص زمانی که با مقادیر null
یا undefined
سروکار داریم. Chaining اختیاری را وارد کنید - یک تغییر دهنده بازی در نحو مدرن جاوا اسکریپت.
در این مقاله، ما زنجیرهسازی اختیاری را از طریق مثالهای عملی تحلیل میکنیم و نشان میدهیم که چگونه کد را ساده میکند و توسعه را کارآمدتر میکند.
می توانید تمام کد منبع را از اینجا دریافت کنید.
فهرست مطالب
نحوه دسترسی به ویژگی های تودرتو
دسترسی پویا به اموال
زنجیربندی اختیاری ( ?.
) چیست؟
زنجیرهسازی اختیاری، که در ECMAScript 2020 معرفی شد، ویژگیای است که فرآیند دسترسی به ویژگیها و روشهای اشیاء یا آرایههای تودرتو را در زمانی که آپشن های میانی ممکن است null
یا undefined
باشند، ساده میکند.
عملگر اختیاری زنجیره ای ( ?.
) به شما امکان می دهد بدون نیاز به تحلیل های null
یا undefined
صریح به ویژگی ها یا روش ها دسترسی داشته باشید. اگر هر یک از ویژگی های میانی در زنجیره null
یا undefined
باشد، عبارت اتصال کوتاه می کند و نتیجه روی undefined
تنظیم می شود.
در برنامه نویسی، "اتصال کوتاه" به رفتاری اطلاق می شود که ارزیابی یک عبارت به محض مواجه شدن با یک مقدار null
یا undefined
در طول زنجیره ویژگی ها یا روش های مورد دسترسی، متوقف می شود. به جای ادامه ارزیابی عبارت، نتیجه فوراً روی undefined
تنظیم می شود و هر ویژگی یا روش بعدی دسترسی نادیده گرفته می شود.
حال، بیایید به مثالهای عملی بپردازیم تا ببینیم زنجیرهسازی اختیاری چگونه در سناریوهای دنیای واقعی کار میکند.
نحوه دسترسی به ویژگی های تودرتو
در این مثال، یک شی جاوا اسکریپت داریم که نشان دهنده یک کاربر با اطلاعات آدرس تو در تو است.
const user = { name: "John", address: { city: "New York", zipcode: "10001" } };
رویکرد سنتی
روش سنتی برای دسترسی به دارایی city
در آدرس کاربر شامل تحلیل های متعدد برای اطمینان از وجود ویژگی ها و null
وجود یا undefined
است.
let city; if (user && user.address && user.address.city) { city = user.address.city; } else { city = "Unknown"; } console.log("Traditional Approach:", city); // Output: New York
این کد تحلیل می کند که آیا شی کاربر وجود دارد، آیا دارای ویژگی address
است یا خیر، و آیا ویژگی address
دارای ویژگی city
است یا خیر. اگر هر یک از این شرایط ناموفق باشد، متغیر city
روی "ناشناخته" تنظیم می شود.
رویکرد زنجیرهای اختیاری
با زنجیرهسازی اختیاری، دسترسی به ویژگی شهر تودرتو بسیار سادهتر میشود:
const city = user?.address?.city || "Unknown"; console.log("Optional Chaining Approach:", city); // Output: New York
?.
اپراتور برای دسترسی به ویژگی city
آدرس کاربر استفاده می شود. اگر هر یک از ویژگی های میانی ( user
یا address
) null
یا undefined
باشد، عبارت اتصال کوتاه می کند و نتیجه بلافاصله روی "ناشناخته" تنظیم می شود.
نحوه فراخوانی روشهای تودرتو
در این مثال، یک شی کاربر با متد getAddress()
داریم که آدرس کاربر را برمی گرداند.
const user = { name: "Alice", getAddress() { return { city: "San Francisco", zipcode: "94105" }; } };
رویکرد سنتی
روش سنتی برای فراخوانی متد getAddress()
و دسترسی به ویژگی city
شامل تحلیل های اضافی برای اطمینان از وجود متد و برگرداندن یک مقدار غیر تهی است.
let city; if (user && user.getAddress) { const address = user.getAddress(); if (address) { city = address.city; } } console.log("Traditional Approach:", city); // Output: San Francisco
این کد ابتدا تحلیل می کند که آیا شی کاربر وجود دارد یا خیر و آیا دارای متد getAddress
است یا خیر. سپس متد را فراخوانی می کند و تحلیل می کند که آیا شی address
برگشتی قبل از دسترسی به ویژگی city
آن وجود دارد یا خیر.
رویکرد زنجیرهای اختیاری
با زنجیرهسازی اختیاری، فراخوانی متد تودرتو و دسترسی به ملک city
را میتوان به صورت مختصرتر انجام داد:
const city = user?.getAddress?.().city || "Unknown"; console.log("Optional Chaining Approach:", city); // Output: San Francisco
در اینجا، عملگر اختیاری زنجیره ای برای فراخوانی متد getAddress()
و دسترسی به ویژگی city
آن استفاده می شود. اگر متد getAddress
یا هر ویژگی میانی در زنجیره null
یا undefined
باشد، عبارت اتصال کوتاه میکند و نتیجه بلافاصله روی «ناشناخته» تنظیم میشود.
دسترسی پویا به اموال
در این مثال، آرایهای از کاربران داریم که هر کاربر ممکن است پروفایلی داشته باشد یا نداشته باشد.
const users = [ { id: 1, profile: { name: "Alice" } }, { id: 2 }, { id: 3, profile: { name: "Bob" } } ];
رویکرد سنتی
روش سنتی برای دسترسی به نام پروفایل به صورت پویا شامل تحلیل های متعدد برای هر شیء کاربر در آرایه است.
const names = users.map(user => { if (user && user.profile && user.profile.name) { return user.profile.name; } else { return "Unknown"; } }); console.log("Traditional Approach:", names); // Output: ["Alice", "Unknown", "Bob"]
این کد از map()
برای تکرار روی هر شیء کاربر در آرایه استفاده می کند و تحلیل می کند که آیا نمایه ای با ویژگی name
دارد یا خیر. اگر ویژگی name
وجود داشته باشد، برگردانده می شود - در غیر این صورت، "Unknown" برگردانده می شود.
رویکرد زنجیرهای اختیاری
با زنجیرهسازی اختیاری، دسترسی به ویژگی پویا سادهتر میشود:
const names = users.map(user => user?.profile?.name || "Unknown"); console.log("Optional Chaining Approach:", names); // Output: ["Alice", "Unknown", "Bob"]
در اینجا، عملگر اختیاری زنجیره ای برای دسترسی به ویژگی name
پروفایل هر کاربر استفاده می شود. اگر هر یک از آپشن های میانی در زنجیره null
یا undefined
باشد، عبارت اتصال کوتاه میکند و "ناشناخته" به عنوان مقدار پیشفرض برگردانده میشود.
نتیجه
با اعمال زنجیره اختیاری، می توانید کد خود را ساده کنید و آن را خواناتر و قابل نگهداری تر کنید.
همانطور که جاوا اسکریپت به تکامل خود ادامه می دهد، ویژگی هایی مانند زنجیره اختیاری نقش مهمی در افزایش بهره وری توسعه دهندگان و کیفیت کد دارند.
ارسال نظر