الكتابة البطة

في برمجة الحاسوب ، يُعدّ "التصنيف الضمني " تطبيقًا لاختبار البطة - "إذا كان يمشي كالبطة ويصدر صوت البطة، فلا بدّ أنه بطة" - لتحديد ما إذا كان يمكن استخدام كائن ما لغرض معين. في التصنيف الاسمي ، يكون الكائن من نوع معين إذا تم تعريفه على هذا النحو (أو إذا تم استنتاج ارتباط النوع بالكائن من خلال آليات مثل وراثة الكائنات ). أما في التصنيف الضمني، فيكون الكائن من نوع معين إذا كان يمتلك جميع الطرق والخصائص المطلوبة لهذا النوع. [ 1 ] [ 2 ] يمكن النظر إلى التصنيف الضمني على أنه تكافؤ بنيوي قائم على الاستخدام بين كائن معين ومتطلبات نوع معين.

في اللغات ذات الكتابة الثابتة

في بعض اللغات ذات الكتابة الثابتة مثل Boo [ 3 ] و D [ 4 ] [ 5 ] يمكن تحديد فحص نوع الفئة ليتم في وقت التشغيل بدلاً من وقت الترجمة.

يمكن للغة C# استدعاء الكتابة الديناميكية التي تتصرف بشكل مشابه للكتابة الديناميكية، من خلال الكلمة المفتاحية dynamic.

مقارنة مع أنظمة الأنواع الأخرى

أنظمة النوع الهيكلي

يُشبه نظام الكتابة الديناميكية (Duck typing) نظام الكتابة الهيكلية (Strectural typing) ، ولكنه يختلف عنه . فالكتابة الهيكلية نظام كتابة ثابت يُحدد توافق الأنواع وتكافؤها بناءً على بنية النوع، بينما نظام الكتابة الديناميكية ديناميكي ويُحدد توافق الأنواع بناءً على الجزء من بنية النوع الذي يتم الوصول إليه أثناء وقت التشغيل فقط .

تدعم لغات TypeScript [6] و Elm [ 7 ] و Python [ 8 ] الكتابة الهيكلية بدرجات متفاوتة.

البروتوكولات والواجهات

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

القوالب أو الأنواع العامة

تُطبّق الدوال أو الطرق النموذجية (وتُسمى أيضًا العامة ) اختبار "النوع الضمني" في سياق كتابة ثابتة ؛ وهذا يُتيح جميع مزايا وعيوب التحقق من النوع الثابت مقابل التحقق الديناميكي . كما أن الكتابة الضمنية أكثر مرونة، إذ لا يلزم سوى تنفيذ الطرق التي يتم استدعاؤها فعليًا أثناء وقت التشغيل، بينما تتطلب القوالب تنفيذ جميع الطرق التي لا يمكن إثبات عدم إمكانية الوصول إليها أثناء وقت الترجمة.

في لغات مثل جافا وسكالا وأوبجكتيف-سي، يمكن استخدام الانعكاس لفحص ما إذا كانت الكائنات تُنفذ أساليب أو إضافة أساليب ضرورية في وقت التشغيل. على سبيل المثال، يمكن استخدام واجهة برمجة تطبيقات MethodHandle في جافا بهذه الطريقة. [ 9 ]

انظر أيضاً

مراجع

  1. "مسرد المصطلحات - وثائق بايثون 3.7.1" . docs.python.org . مؤرشف من الأصل في 25 يونيو 2020. تم الاطلاع عليه في 8 نوفمبر 2018 .
  2. "كتابة الأوامر باستخدام داك تايبينغ في بايثون - مثال" . ساعات التقنية . 28 يونيو 2020. مؤرشف من الأصل في 31 مارس 2022. تم الاطلاع عليه في 26 يوليو 2020 .
  3. بو: الكتابة البطة (Duck Typing) مؤرشفة في 6 أكتوبر 2008 على موقع Wayback Machine
  4. "الفئات الديناميكية والتصنيف الديناميكي" .
  5. "البرمجة الوصفية - الكتابة الديناميكية في لغة D" .
  6. "الحلقة 384 من برنامج راديو SE: بوريس تشيرني يتحدث عن تايب سكريبت" . se-radio.net . تم الاطلاع عليه بتاريخ 25 أكتوبر 2019 .
  7. تشابليكي، إيفان. "اللغة الأساسية · مقدمة إلى علم الدردار" . تم الاسترجاع في 30 يناير 2017 .
  8. "PEP 544 – البروتوكولات: التصنيف الفرعي الهيكلي (التصنيف الثابت للبط)" . مؤرشف من الأصل في 19 أكتوبر 2022. تم الاطلاع عليه في 12 نوفمبر 2022 .
  9. "StackOverflow: تطبيق الكتابة الديناميكية باستخدام مقابض طرق جافا" . مؤرشف من الأصل في 1 يوليو 2020. تم الاطلاع عليه في 13 يونيو 2020 .