صيغة استدعاء الدالة الموحدة
يُعدّ بناء جملة استدعاء الدوال الموحد ( UFCS ) أو بناء جملة الاستدعاء الموحد ( UCS ) ميزةً في لغات البرمجة D ، [ 1 ] وNim ، [ 2 ] وKoka، [ 3 ] وEffekt، [ 4 ] و Lean ، [ 5 ] وغيرها، حيث يسمح باستدعاء أي دالة باستخدام بناء جملة استدعاء الأساليب (كما في البرمجة كائنية التوجه )، وذلك باستخدام المُستقبِل كمعامل أول والوسائط المُعطاة كمعاملات متبقية. [ 6 ] وتُستخدم التقنية نفسها في لغة البرمجة النصية AviSynth تحت اسم "تدوين OOP". [ 7 ]
يُعدّ نظام UFCS مفيدًا بشكل خاص عند ربط استدعاءات الدوال [ 1 ] (حيث يعمل بشكل مشابه للأنابيب ، أو المعاملات المخصصة المتوفرة في اللغات الوظيفية لتمرير القيم عبر سلسلة من التعبيرات ). يسمح هذا النظام للدوال الحرة بأداء دور مشابه لأساليب الإضافة في بعض اللغات الأخرى. ومن فوائد هذا النظام أيضًا أنظمة الإكمال التلقائي في بيئات التطوير المتكاملة (IDEs) ، والتي تستخدم معلومات النوع لعرض قائمة بالدوال المتاحة، وذلك بحسب السياق. فعندما يبدأ المبرمج بمعامل، تتقلص مجموعة الدوال القابلة للتطبيق بشكل كبير [ 8 ] ، مما يُسهّل عملية اكتشافها .
أمثلة
لغة البرمجة D
int first ( int [] arr ) { return arr [ 0 ]; }int [] addone ( int [] arr ) { int [] result ; foreach ( value ; arr ) { result ~= value + 1 ; } return result ; }void main () { auto a = [ 0 , 1 , 2 , 3 ];// جميع ما يلي صحيح ومتكافئ int b = first ( a ); int c = a . first ();// التسلسل int [] e = a . أدون (). أددون ()؛ }لغة برمجة نيم
نوع المتجه = tuple [ x , y : int ]proc add ( a , b : Vector ): Vector = ( a . x + b . x , a . y + b . y )ليكن v1 = ( x : - 1 , y : 4 ) و v2 = ( x : 5 , y : - 2 )# جميع ما يلي صحيح : v3 = add ( v1 , v2 ) v4 = v1.add ( v2 ) v5 = v1.add ( v2 ) .add ( v4 )اقتراح بلغة C++
نوقشت مقترحات توحيد صيغة استدعاء الدوال الأعضاء والدوال الحرة منذ السنوات الأولى لتوحيد معايير لغة C++ . اقترح غلاسبرو (2004) صيغة استدعاء موحدة (UCS)، تسمح باستدعاء الدوال الحرة المُعَلَّمة بتعليقات خاصة باستخدام صيغة الدوال الأعضاء. [ 9 ] وفي عام 2016، أُعيد اقتراح هذه الصيغة لإضافتها إلى لغة C++ من قِبَل بيارن ستروستروب [ 10 ] وهيرب ساتر [ 8 ] ، وذلك للحد من الغموض في الاختيار بين كتابة الدوال الحرة والدوال الأعضاء، ولتبسيط كتابة التعليمات البرمجية المُنمذجة . يميل العديد من المبرمجين إلى كتابة الدوال الأعضاء للاستفادة من مزايا صيغة الدوال الأعضاء (مثل استخدام " dot-autocomplete " لعرض قائمة الدوال الأعضاء )؛ [ 11 ] إلا أن هذا يؤدي إلى ترابط مفرط بين الفئات . [ 12 ] تم اقتراح هذا مرة أخرى في عام 2023 من قبل هيرب سوتر [ 13 ] مدعيا معلومات ورؤى جديدة، بالإضافة إلى تطبيق تجريبي في مترجم cppfront .
استخدام مصطلح Rust
حتى عام ٢٠١٨، كان من الشائع [ ١٤ ] استخدام هذا المصطلح عند الإشارة إلى صيغة المسار المؤهل/الصريح ، وخاصةً صيغة المسار المؤهل بالكامل : نظرًا لإمكانية وجود عدة سمات تُعرّف نفس الدالة المُطبقة على نفس البنية، فإن آليةً ضروريةً لتحديد السمة المناسبة. يمكن أيضًا استخدام الدوال الأعضاء كدوال حرة عبر مسار مؤهل (مُحدد النطاق). يُعدّ مصطلح UFCS غير دقيق لهذه الاستخدامات، لأنه يسمح باستخدام الدوال كدوال حرة (مُحددة النطاق)، ولكنه لا يسمح باستخدام الدوال الحرة كدوال.
انظر أيضاً
- سمة (برمجة الحاسوب)
- واجهة (برمجة الحاسوب)
- لغة البرمجة Go ، وهي لغة أخرى ذات فلسفة أكثر انفتاحًا على الأساليب
- وصلة فضفاضة
- الكتابة البطة
- تسلسل الأساليب
مراجع
- 1 2 "صيغة استدعاء الدوال العامة (UFCS)" . البرمجة بلغة D. تم الاطلاع عليه في 1 أكتوبر 2017 .
- ↑ "Nim by Example - Procs" . nim-by-example.github.io . تم الاطلاع عليه بتاريخ 19-05-2024 .
- ↑ "لغة برمجة كوكا" . koka-lang.github.io . تم الاطلاع عليه بتاريخ 19-05-2024 .
- ↑ "الوظائف" . لغة إيفيكت . تم الاسترجاع في 2025-04-09 .
- ↑ "الهياكل" . البرمجة الوظيفية في منهجية لين . تم الاسترجاع في 2025-12-09 .
- ↑ "الدوال" . لغة البرمجة D. تم الاطلاع عليه في 1 أكتوبر 2017 .
- ↑ "المشغلون" . ويكي Avisynth .
يعادل
a.function(b)function(a, b) - 1 2 "صيغة الاستدعاء الموحدة" (ملف PDF) . Isocpp.org . تم الاطلاع عليه في 1 أكتوبر 2017 .
- ↑ فرانسيس غلاسبرو (2 مايو 2004). "N1585: صيغة استدعاء موحدة (إعادة فتح الواجهات العامة)" (ملف PDF) . تم الاطلاع عليه بتاريخ 17 ديسمبر 2018 .
- ↑ "مقترح UFCS" (ملف PDF) . Open-std.org . تم الاطلاع عليه في 1 أكتوبر 2017 .
- ↑ "استخدام IntelliSense" . MSDN . تم الاطلاع عليه في 1 أكتوبر 2017 .
- ↑ "كيف تُحسّن الدوال غير الأعضاء التغليف" . Drdobbs.com . تم الاطلاع عليه في 1 أكتوبر 2017 .
- ↑ ساتر، هيرب (13 أكتوبر 2023). "صيغة استدعاء الوظائف الموحدة (UFCS)" (PDF) .
- ↑ "إعادة تسمية UFCS لتعكس وظيفتها بدقة. · المشكلة رقم 1140 · rust-lang/rfcs" . GitHub . تم الاطلاع عليه بتاريخ 19-05-2024 .
- البرمجة الكائنية التوجه
- البرامج الفرعية
