-
كما يمكنك أن تتخيل، هناك العديد من الطرق لتنفيذ وظائف مجهولة على الفور، لتلخيص ذلك، هناك ثلاث طرق نموذجية (هناك طرق أخرى، يرجى إعلامنا):
الطريقة الأولى
(وظيفة() {
//...
})();
الطريقة 2
وظيفة باطلة () {
//...
}();
الطريقة الثالثة
~ وظيفة () {
//...
}();
ربما تكون قد شاهدت الطريقة الأولى والطريقة الثانية. نشرح هنا الطريقة الثالثة بشكل أساسي. قبل شرح الطريقة الثالثة، نستعرض الآن تعريف المعامل "~" (نفي البتات) في EMCAScript (صفحة 72 من الطبعة الخامسة)، ترجمة بسيطة:
قم بتحويل القيمة القديمة إلى عدد صحيح 32 بت من خلال دمج العبارات مع عوامل التشغيل. قم بتنفيذ العبارة بعد عامل التشغيل وتحويل السطر والنتيجة هي عدد صحيح 32 بت وإعادته.
كما يمكن فهمه مما سبق، في الواقع، يمكن لعاملي البت أن يعيدوا على الفور قيمة التعبير التالي. في الواقع، يمكن لمشغلي bitwise الآخرين تحقيق هذا الغرض، على سبيل المثال:
!وظيفة() {
//...
}();
الخ يمكن أن نحقق هدفنا. لذلك لا يوجد في الواقع سبب آخر لاستخدام "~"، كل ما في الأمر هو أن الكود "يبدو جيدًا" :^)
الكفاءة لا تعني كفاءة تنفيذ الوظائف المجهولة بثلاث طرق، ولكن من الأفضل تحليل كفاءة التنفيذ لكل مشغل بشكل مباشر. لذلك دعونا نقارن ونلقي نظرة على تعريفات "()" و"باطل" في مواصفات EMCA
مشغلو المجموعة (الطبعة الخامسة، صفحة 66)
إرجاع نتيجة تنفيذ التعبير
باطلة (صفحة 70، الطبعة الخامسة)
يؤدي دمج البيانات مع عوامل التشغيل إلى إرجاع غير محدد
نظرًا لأن مشغل المجموعة يحتاج أيضًا إلى تنفيذ البيان وإرجاع القيمة التي يتم إرجاعها بواسطة كتلة البيان، مقارنة بالفراغ، ستكون هناك عمليات متعددة للحصول على كتلة البيان (على الرغم من أنها لا تستهلك الكثير من الأداء)، لذلك في هذه الحالة الأداء الفراغ أفضل من عامل المجموعة .
وبمقارنة الاثنين، من الواضح أن مقارنة أداء الطريقة الثالثة أقل من الطريقة الأولى والثانية. لتلخيص ذلك، من منظور نحوي، من بين الطرق الوظيفية الثلاثة المجهولة المذكورة أعلاه، الطريقة الثانية أفضل من الطريقة الأولى، والطريقة الثالثة هي الأقل كفاءة.
لخص وفكر في المزايا بين الثلاثة
الطريقة الأولى شائعة جدًا وآمنة، لذلك لن يلومك أحد على استخدام هذه الطريقة، ومع ذلك، فإن الطلاب الذين يستخدمون الطريقة الأولى قد يواجهون غالبًا "مشكلة" في نسيان مطابقة الأقواس (خاصة عندما تكون كتلة البيان طويلة جدًا. كثيرا ما يخطئ)
يعد استخدام معاملات البت لتنفيذ وظائف مجهولة أمرًا شائعًا للغاية ويتم استخدامه لتبدو رائعة. العديد من IDEs (مثل IDEA) وأدوات تمييز بناء الجملة لا تدعم الطريقة الثالثة للكتابة.
void هو الأكثر كفاءة، لكنه يبدو دائمًا منتفخًا جدًا مقارنة بالتطبيقين الآخرين (فقط عدد قليل من الأحرف؟)
لذا
بالنظر إلى مقدار التعليمات البرمجية والكفاءة، فمن الصحيح استخدام الطريقة الأولى في الحالات القصوى التي تتطلب حفظ تعليمات برمجية إضافية، واستخدام الطريقة الثالثة لإعطاء الأولوية للكفاءة، ثم أود أن أشرح استخدام الطريقة الثانية هنا في الواقع، الفرق في الكفاءة بين الطرق الثلاثة كبير جدًا. لذلك، يكاد يكون من غير الممكن استخدام هذه الطريقة على أساس الكفاءة فقط.
يجب النظر في الخطة المحددة التي سيتم اعتمادها بناءً على الوضع الفعلي. على سبيل المثال، غالبًا ما أستخدم الطريقة الثالثة لأنها 1. إنها مريحة (فقط أضف حرفًا واحدًا) 2. مطابقة الأقواس عندما تكون الدالة طويلة ستكون بالدوار 3. إنها رائعة للاستخدام، لكن الطريقة 3 غالبًا ما تجعلني أنظر إليها أعضاء فريق الكود مضطربون.
إذا كان لديك تعليمات برمجية أساسية قائمة على إطار عمل مثل بعض مكتبات الفئات، فإن استخدام الطريقة الأولى هو الأكثر أمانًا وسهل الفهم للجميع، لذا فهو الخيار الأكثر أمانًا.
[النص الأصلي: http://www.gracecode.com/archives/3004/ جيد جدًا، يمكن للجميع التعلم منه