الوظيفة الجينية

في برمجة الحاسوب ، الدالة العامة هي دالة معرفة لتعدد الأشكال .

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

في اللغات ذات الكتابة الثابتة (مثل C++ و Java )، يشير مصطلح الدوال العامة إلى آلية لتعدد الأشكال في وقت الترجمة ( الإرسال الثابت )، وتحديدًا تعدد الأشكال البارامتري . هذه دوال مُعرَّفة باستخدام TypeParameters ، ومُصممة ليتم تحديدها باستخدام معلومات النوع في وقت الترجمة . يستخدم المُترجم هذه الأنواع لإنشاء نسخ مناسبة، مع حل أي تحميل زائد للدوال بشكل ملائم.

في نظام الكائنات في لغة Common Lisp

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

تُعدّ Flavors إحدى الإضافات المبكرة للبرمجة الكائنية التوجه في لغة Lisp . وقد استخدمت نموذج إرسال الرسائل المعتاد المتأثر بلغة Smalltalk . صيغة Flavors لإرسال رسالة هي:

( إرسال كائن :رسالة )

مع إضافة "النكهات الجديدة"، تقرر أن تكون الرسالة دالة حقيقية، وأن يتم استخدام صيغة استدعاء الدالة المعتادة:

( كائن الرسائل )

الرسالة الآن هي دالة عامة ، كائن ودالة بحد ذاتها. تسمى التطبيقات الفردية للرسالة بالأساليب .

تم تطبيق نفس الفكرة في CommonLoops . [ 2 ] كانت New Flavors و CommonLoops هي التأثير الرئيسي على نظام كائنات Common Lisp.

مثال

لغة الشفرة الشائعة

قم بتعريف دالة عامة ذات معامِلين object-1 و object-2. اسم الدالة العامة هو collide .

( defgeneric collide ( object-1 object-2 ))

تُعرَّف الدوال التابعة للدالة العامة خارج نطاق الأصناف. هنا، نُعرِّف دالة للدالة العامة collide مُخصَّصة للصنفين asteroid (المعامل الأول object-1) و spaceship (المعامل الثاني object-2). تُستخدم المعاملات كمتغيرات عادية داخل جسم الدالة. لا يوجد نطاق أسماء خاص يُمكنه الوصول إلى خانات الأصناف.

( defmethod collide (( object-1 asteroid ) ( object-2 spaceship )) ( format t "asteroid ~a collides with spaceship ~a" object-1 object-2 ))

استدعاء الدالة العامة:

؟ ( اصطدام ( إنشاء نسخة من 'كويكب ') ( إنشاء نسخة من 'سفينة فضائية ')) الكويكب رقم <ASTEROID 4020003FD3> يصطدم بالمركبة الفضائية رقم <SPACESHIP 40200048CB>

يمكن للغة Common Lisp أيضًا استرجاع طرق فردية من الدالة العامة. تجد الدالة FIND-METHOD الطريقة من الدالة العامة collide المُخصصة للفئتين asteroid و spaceship .

؟ ( find-method #' collide nil ( list ( find-class 'asteroid ) ( find-class 'spaceship ))) # <STANDARD-METHOD COLLIDE NIL ( ASTEROID SPACESHIP ) 4150015E43>

مقارنة باللغات الأخرى

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

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

مراجع

  1. نظام كائنات لغة ليسب الشائعة: نظرة عامة
  2. "CommonLoops، دمج لغة Lisp والبرمجة كائنية التوجه" (ملف PDF) . مؤرشف من النسخة الأصلية (PDF) بتاريخ 4 يونيو 2011. تم الاطلاع عليه بتاريخ 10 ديسمبر 2009 .