الصورة من قبل ميغيل Á. بادريان .يوم جيد يا اصدقاء!
أقدم إليكم ترجمة مقال سام صديقي
" التسلسل
الاختياري ، التلاشي الخالي ، وكيف سيغيرون طريقة كتابة الكود" .
تسلسل اختياري ، اتحاد مع null ، وكيف يغيرون نهج كتابة التعليمات البرمجية
طريقة أكثر أمانًا ومريحًا للوصول إلى الكائن.
إذا كنت تتبع إصدارات TypeScript ، فأنت تعلم أنه تم تقديم اختياري Chaining و Null Coalescing في TypeScript 3.7. أيضا ، يتم تضمين هذه الميزات بشكل افتراضي في بابل 7.8.0. هذا هو أحد المنافسين الرئيسيين لدور ميزات JavaScript. حاليًا ، هم في المرحلتين 4 و 3 ، على التوالي (في 23 يناير ، تم اعتماد معيار
ECMAScript 2020 ، حيث توجد سلسلة اختيارية ، والتكامل مع لاغية ، واثنين من الأشياء المثيرة للاهتمام ؛ وأنا على علم بأن
مقال ظهر مؤخراً على حبري
ترجمة حول الميزات المقدمة في JS ES2020 ، ومع ذلك ، أعتقد أن بعض الأمثلة الإضافية لن يصب بأذى - تقريبا.
تسلسل اختياري
في كثير من الأحيان ، يتعين علينا الوصول إلى خاصية مضمنة بعمق لكائن. إذا كتبت 100 سطرًا من الكود غير عالي الجودة ، فقد يتسبب ذلك في Uncaught TypeError.
const data = {} data.user.id
للحصول على مزيد من الأمثلة ، سوف نستخدم هذا الرمز الزائف (استجابة الخادم الزائفة):
{ 'url': 'https://api.github.com/repos/sedighian/Hello-World/pulls/12', 'number': 12, 'state': 'open', 'title': 'Amazing new feature', 'user': { 'login': 'sedighian', 'id': 123234 }, 'labels': [{ 'id': 208045946, 'name': 'bug', }] }
في محاولة لتجنب TypeError Uncaught ، والحصول على قيمة الهوية ، يتعين علينا "القيام ببعض الرقص". كانت الطريقة التي استخدمناها من قبل للتحقق من حقيقة الكائن في كل مستوى من مستويات التعشيش. يشبه هذا القالب عبارة شرطية تُرجع منطقية أكثر من طريقة للوصول إلى خاصية ، ولكن هذه هي الطريقة الأنظف والأكثر أمانًا التي حددناها حتى الآن:
const userId = data && data.user && data.user.id
أو ، إذا كنت تفضل التدمير:
const { user: { id } = {} } = data || {}
هناك طريقة أكثر راحة وهي استخدام Lodash أو Ember:
كيف نفعل نفس الشيء مع السلسلة الاختيارية؟
const userId = data?.user?.id
مع الجمع بين null (Null Coalescing)
عندما تكون قيمة خاصية الكائن الذي نصل إليه فارغة أو غير محددة ، فإننا نستخدم القيمة الافتراضية. سابقا ، المشغل | (منطقي أو).
إذا كنا نرغب في كتابة sedighian إلى قيمة خاصية تسجيل الدخول بشكل افتراضي ، فإننا نقوم بما يلي:
الأمثلة الثانية والثالثة متشابهة. ما هي ميزة الجمع مع فارغة؟ يقترن الجمع مع القيمة الخالية إلى اليمين فقط إذا كان الجانب الأيسر غير معرف أو فارغ. هذا يعطينا بعض الحماية ضد النتائج العشوائية عندما نعمل مع قيم حقيقية (صالحة) ، لكن خاطئة.
لنفترض أننا نريد إرجاع "" (سلسلة فارغة) ، خطأ أو 0. مع المشغل || هذا لن ينجح ، لأنه سيعود إلى الجانب الأيمن. في هذه الحالة ، يكون الدمج مع null مفيدًا لنا:
كبديل ، يمكنك استخدام مكتبات الطرف الثالث ، وفي حالة Ember ، أداة مساعدة مضمّنة:
تذكر أن الدمج مع null هو أكثر من القيمة الافتراضية للمتغير. هذه طريقة بديلة لتنفيذ كتلة التعليمات البرمجية في حالة عدم وجود قيم مقابلة:
const temp = { celsius: 0 } temp?.fahrenheit ?? setFahrenheit(temp)
ما يجب أن نتذكر؟
تذكر ترتيب الأحرف في السلسلة الاختيارية (أولاً علامة استفهام ، ثم فترة):
data.?user
السلسلة الاختيارية لا تحمي من استدعاء وظيفة غير موجودة:
data?.user()
الجمع مع null ليس مطابقًا لـ lodash.get أو EmberObject.getWithDefault. الفرق الرئيسي هو كيف أن الجمع بين c null يعالج القيمة "null":
const data = { user: { interests: null } }
شكرا لاهتمامكم كل التوفيق.