التخطي إلى المحتوى

يمكن أن يكون لجافا سكريبت قريبًا بناء جمل خاص به إذا أصبح الاقتراح المقدم من Microsoft والمطورين الآخرين في وقت سابق من هذا العام جزءًا من معيار ECMAScript. تخطط هذه المبادرة لإضافة دعم لـ “الأنواع كتعليقات” إلى لغة JavaScript. يتيح ذلك للمطورين إضافة تعليقات توضيحية إلى التعليمات البرمجية الخاصة بهم باستخدام معلومات النوع التي تستخدمها مكونات النظام البيئي الأخرى.

بناء الجملة

تبدو الصيغة المقترحة كما يلي:

function sayAge(name: string, age: number) {
    console.log(`${name} is ${age} years old.`);
}
 
sayAge("JavaScript", 26);

سيكون هذا مألوفًا لأولئك الذين سبق لهم العمل مع TypeScript ، مجموعة Microsoft الشاملة من JavaScript المكتوبة. تم اعتماد TypeScript على نطاق واسع في جميع أنحاء الصناعة. يهدف هذا الاقتراح الجديد إلى جلب بعض فوائده إلى عالم JavaScript الأوسع.

ما هو ليس اقتراح؟

في حالة الموافقة ، سيسمح لنا هذا الاقتراح بكتابة JavaScript صالح تمامًا باستخدام التعليقات التوضيحية من النوع أعلاه. هذا مقبول من قبل متصفحات الويب و Node.js و Deno وأوقات تشغيل JavaScript الأخرى التي تحترم معيار ES.

ومع ذلك ، فإن هذا الاقتراح لا يوسع حقًا لغة JavaScript. كتابة التعليقات التوضيحية هي فقط ما يلي: البيانات الوصفية الخاملة التي لا تؤثر على مترجم JavaScript أو وقت تشغيل التعليمات البرمجية الخاصة بك. سيعمل استدعاء دالة مثل هذا في وقت التشغيل:

function sayAge(name: string, age: number) {
    console.log(`${name} is ${age} years old.`);
}
 
// "age" is a string when it should be a number, but this is still allowed
sayAge("JavaScript", "twenty");

الفكرة هي توفير بناء جملة جديد مدعوم رسميًا ولكن يتجاهله المحرك تمامًا. التغيير الوحيد في التنفيذ هو التعرف على مكان استخدام التعليقات التوضيحية من النوع وإزالتها.

يسعى هذا الاقتراح إلى إنشاء دعم لأنواع التعليقات التوضيحية للمعلمات والمتغيرات وخصائص الفئة.سأفكر أيضا في الإضافة interface الكلمات الرئيسية ، عوامل التأكيد ، إلخ. ! متي as،و ? معدِّل يميز نوعًا ما على أنه اختياري. تهدف كل هذه العناصر إلى عكس TypeScript. ومع ذلك ، كما هو الحال مع اقتراح المرحلة 0 ، قد تختلف النتائج النهائية الخاصة بك.

ما هي النقطة؟

إذا كانت كتابة التعليقات التوضيحية لا تغير البرنامج ، فإن السؤال الواضح هو ما إذا كانت تستحق الاستخدام. أجادل بنعم على الاقتراح بسبب قدرة بناء الجملة على تقليل وقت التكرار وتخفيف عبء سلاسل أدوات JavaScript الحديثة.

تتطلب كتابة التعليمات البرمجية الآمنة من النوع حاليًا إضافة تبعيات إلى مشروعك واستخدام TypeScript ، وهي نكهة لغة أخرى تتطلب خطوات ترجمة يدوية. قد يمر هذا الرمز من خلال أدوات أخرى ، مثل حزم الوحدات النمطية و transpilers ، قبل إنشاء JavaScript النهائي للتوزيع. هذا يشكل سلسلة أدوات معقدة مع أجزاء متحركة متعددة.

JavaScript بطبيعتها لغة مكتوبة بشكل فضفاض ، ولكن فوائد الكتابة القوية معترف بها الآن على نطاق واسع من قبل المجتمع. يتضح هذا في الزخم المحيط بمشروع TypeScript. كانت الكتابة الثابتة أيضًا الرائد الواضح في سؤال “الميزات المفقودة” في استطلاع 2021 JS.

تسمح لك إضافة بناء جملة النوع إلى JavaScript نفسها بالحصول على بعض فوائد TypeScript دون الحاجة إلى ترجمة التعليمات البرمجية الخاصة بك. يعمل هذا على تبسيط إعداد المشروع وصيانته ويسمح لـ JavaScript بالتطور لتتلاءم بشكل أفضل مع ممارسات التطوير الحديثة.

على مدى السنوات القليلة الماضية ، بدأ المزيد والمزيد من الأكواد في الانتقال إلى نهج “جافا سكريبت خالص”. أدى تراجع المتصفحات القديمة إلى جعل التحويل أقل أهمية مما كان عليه من قبل. تدعم معظم التطبيقات الحديثة ميزات مثل الفئات ووظائف الأسهم والمتغيرات ذات النطاق الكتلي بشكل كامل. async/awaitيحتوي JavaScript حتى على نظام وحدة كامل يعمل عبر محركات متعددة ، بما في ذلك المتصفحات.

منذ بضع سنوات فقط ، كانت سلاسل أدوات طويلة المتطلبات حتى تتمكن من ترميز هذه الميزات بثقة أنها ستعمل على جهاز المستخدم. يمكن للمطورين الآن وضع عمليات الإنشاء هذه جانباً بأمان والعودة إلى نموذج JavaScript الأصلي للملفات المرجعية.
setTimeout (function () {! function (f، b، e، v، n، t، s) {if (f.fbq) return؛ n = f.fbq = function () {n.callMethod؟ n.callMethod. تطبيق (n ، وسيطات): n.queue.push (وسيطات)} ؛ if (! f._fbq) f._fbq = n ؛ n.push = n ؛ n.loaded =! 0 ؛ n.version = '2.0' ؛ n.queue =[]؛ t = b.createElement (e)؛ t.async =! 0؛ t.src = v؛ s = b.getElementsByTagName (e)[0]؛ s.parentNode.insertBefore (t، s)} (نافذة ، مستند ، "نص برمجي" ، "https://connect.facebook.net/en_US/fbevents.js") ؛ fbq ('init'، '335401813750447') ؛ fbq ('Track'، 'Pageview')؛}، 3000)؛

Scan the code