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

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

يمكن استخدام نماذج الدوال في الحالتين التاليتين: [ 2 ]

  • تحديد نوع خارجي
  • إنشاء جزء واجهة

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

في البرمجة الكائنية التوجه ، تخدم الواجهات والأساليب المجردة نفس الغرض تقريبًا.

مثال

ضع في اعتبارك النموذج الأولي للدالة التالي:

void sum ( int a , int b );// بدون معلمات مُسماة: void sum ( int , int );// مع أنواع الإرجاع اللاحقة (C++): auto sum ( int , int ) -> void ;

تتضمن نماذج الدوال توقيع الدالة، واسمها، ونوع القيمة المُعادة، ومُحدد الوصول. في هذه الحالة، اسم الدالة هو "sum". يُحدد توقيع الدالة عدد المعاملات وأنواعها. نوع القيمة المُعادة هو "void"، مما يعني أن الدالة لن تُعيد أي قيمة. لاحظ أن أسماء المعاملات في المثال الأول اختيارية.

الاستخدامات

في الإصدارات الأولى من لغة C، إذا لم تُصرَّح دالةٌ مسبقًا وظهر اسمها في تعبيرٍ متبوعٍ بقوسٍ مفتوح، تُصرَّح ضمنيًا كدالةٍ تُرجع قيمةً، intدون افتراض أي شيءٍ عن وسائطها. في هذه الحالة، لا يستطيع المُصرِّف التحقق من صحة عدد الوسائط وأنواعها أثناء الترجمة. يتطلب معيار C99 استخدام النماذج الأولية.

#include <limits.h> #include <stdio.h>// نموذج الدالة char orderingCharacter ( int n );int main () { putchar ( orderingCharacter ( -1 )); // استدعاء منسق بشكل صحيح putchar ( orderingCharacter ( 1.5 )); // تحذير من المُصرّف: عدم تطابق في النوع putchar ( orderingCharacter ( "Hello" )); // تحذير من المُصرّف: عدم تطابق في النوع putchar ( orderingCharacter ()); // خطأ من المُصرّف: عدد قليل جدًا من الوسائط// على الرغم من أن إضافة 1 إلى INT_MAX يُعد خطأ تجاوز سعة عدد صحيح، // إلا أنه لا يمكن اكتشافه في وقت الترجمة putchar ( orderingCharacter ( INT_MAX + 1 )); }// تعريف الدالة char orderingCharacter ( int n ) { if ( n > 0 ) { return '>' ; } else if ( n < 0 ) { return '<' ; } return '=' ; }

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

إنشاء واجهات المكتبة

من خلال وضع نماذج الوظائف في ملف رأس ، يمكن للمرء تحديد واجهة لمكتبة .

إعلان الفئة

في لغة C++، تُستخدم نماذج الدوال أيضًا في تعريفات الفئات .

في لغتي Java و C# ، يتم تعريف الواجهات بتوقيعات، والتي يتم تنفيذها بعد ذلك بواسطة الفئة المنفذة.

واجهة معالج الدفع { منطقي معالجة الدفع ( مبلغ مزدوج ، عملة سلسلة سلسلة الحصول على تفاصيل الإيصال ()؛ فارغ استرداد الدفع ( معرف المعاملة سلسلة }class CreditCardProcessor implements PaymentProcessor { private double lastAmount ; private String lastTransactionId ;@Override public boolean processPayment ( double amount , String currency ) { this.lastAmount = amount ; this.lastTransactionId = " TXN" + System.currentTimeMillis ( ) ; System.out.printf ( " جاري معالجة دفعة بطاقة الائتمان بقيمة %f %s...% n " , amount , currency ) ; return true ; }@Override public String getReceiptDetails () { return String . format ( "إيصال للرقم التعريفي %s | المبلغ: $%f" , lastTransactionId , lastAmount ); }@Override public void refundPayment ( String transactionId ) { System . out . printf ( "استرداد قيمة المعاملة: %s...%n" , transactionId ); } }

انظر أيضاً

مراجع

  1. تايلر (25 يناير 2023). "نماذج الوظائف" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 9 أغسطس 2023 .
  2. "نماذج الوظائف الأولية" . www.ibm.com . 2018-10-25 . تم الاطلاع عليه بتاريخ 2023-08-09 .