ملاحظة على باطلة في جافا سكريبت و TypeScript

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



يتوفر الكيان الفارغ أيضًا في JavaScript و TypeScript. في JS ، هذا هو المشغل. في TS ، هذا هو نوع البيانات البدائية. وهنا وهناك ، void لا يتصرف كما يتوقع العديد من أولئك الذين void بلغات أخرى.

جافا سكريبت بيان باطل


في JavaScript ، يقوم عامل التشغيل void بتقييم التعبير الذي تم تمريره إليه. في الوقت نفسه ، وبغض النظر عن التعبير الذي يتم تقييمه ، يتم إرجاع void دائمًا بدون undefined .

 let i = void 2; // i === undefined 

لماذا نحتاج إلى مثل هذا المشغل؟
أولاً ، تجدر الإشارة إلى أنه في السنوات الأولى من برمجة JS ، يمكن للمطورين إعادة تعريف undefined وكتابة بعض القيمة إليه. ولكن void دائما بإرجاع القيمة الحقيقية undefined .

ثانياً ، يعد استخدام عامل التشغيل void طريقة ممتعة للعمل مع الوظائف التي تسمى فورًا:

 void function() {  console.log('What') }() 

وكل هذا - دون تلوث مساحة الاسم العالمية:

 void function aRecursion(i) {  if(i > 0) {    console.log(i--)    aRecursion(i)  } }(3) console.log(typeof aRecursion) // undefined 

نظرًا لأن عامل التشغيل void دائمًا ما يُرجع undefined ويقيِّم دائمًا التعبير الذي تم تمريره إليه ، فلدينا طريقة معبرة جدًا للعودة من الوظيفة دون إعادة بعض القيمة ، ولكن مع مكالمة ، على سبيل المثال ، بعض رد الاتصال:

 //  -  undefined      function middleware(nextCallback) {  if(conditionApplies()) {    return void nextCallback();  } } 

هذا يقودنا إلى أهم طريقة لاستخدام void . هذا المشغل هو نوع من تطبيق "حارس آخر". إذا كانت هناك مهمة معينة يجب أن تُرجع دائمًا دون تحديد ، فيمكن تحقيق ذلك باستخدام عامل void .

 button.onclick = () => void doSomething(); 

نوع البيانات الفارغة في TypeScript


اكتب الفراغ في TypeScript يمكن أن يسمى شيئا مثل عكس any نوع. وظائف في جافا سكريبت دائما إرجاع شيء. يمكن أن يكون هذا إما قيمة تم تعيينها بواسطة مبرمج أو undefined :

 function iHaveNoReturnValue(i) {  console.log(i) } //  undefined 

نظرًا لأن وظائف JavaScript ، التي لم يتم إرجاع أي منها بشكل صريح ، تُرجع دائمًا دون تحديد ، void في TypeScript هو النوع المناسب لإخبار المطورين بأن الوظيفة ترجع بدون undefined :

 declare function iHaveNoReturnValue(i: number): void 

يمكن أيضًا استخدام الكيان void في شكل نوع للمعلمات ولأي تعريفات متغير أخرى. القيمة الوحيدة التي يمكن دائمًا تمريرها إلى المعلمة void غير undefined .

 declare function iTakeNoParameters(x: void): void iTakeNoParameters() //  iTakeNoParameters(undefined) //  iTakeNoParameters(void 2) //  

نتيجةً لذلك ، اتضح أن الأنواع void وغير undefined في TS هي نفس الشيء تقريبًا. ولكن هناك اختلاف بسيط واحد بينهما ، وهو في الواقع مهم للغاية. يمكن استبدال نوع void المرتجع بأنواع أخرى ، مما يسمح لك بتنفيذ أنماط متقدمة للتعامل مع عمليات الاسترجاعات.

 function doSomething(callback: () => void) {  let c = callback() // callback   undefined  // c -  undefined } //     function aNumberCallback(): number {  return 2; } // ;    doSometing doSomething(aNumberCallback) 

يتوقع المطورون أن تقوم هذه التصميمات ، التي تستخدم غالبًا في تطبيقات JS ، بالقيام بذلك. هنا هي المواد في هذا الموضوع.

إذا كنت تريد أن تقبل الدالة فقط الوظائف التي تُرجع undefined ، يمكنك تغيير توقيع الطريقة وفقًا لذلك:

 //  // function doSomething(callback: () => void) { //  function doSomething(callback: () => undefined) { /* ... */ } function aNumberCallback(): number { return 2; } //  -    doSomething(aNumberCallback) 

النتائج


عامل void في JavaScript ونوع البيانات void في TypeScript كيانات بسيطة إلى حد ما. نطاق الحالات التي تنطبق عليها محدود. ومع ذلك ، تجدر الإشارة إلى أن المبرمج الذي يستخدمه ، على الأرجح ، لن يواجه أي مشاكل عند العمل معه.

أعزائي القراء! هل تستخدم void في JS و TS؟


Source: https://habr.com/ru/post/ar468229/


All Articles