تسلسل الأساليب

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

على سبيل المثال، في لغة دارت ، التسلسل:

أ .. ب () .. ج ();

وهو ما يعادل المكالمات الفردية:

أ . ب (); أ . ج ();

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

طلب

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

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

أ . ب (). ج ()؛ أ . ب (). د ()؛

أو باستخدام متغير مؤقت:

n = a . b (); n . c (); n . d ();

تتيح خاصية التتالي كتابة التعبير مرة واحدة واستخدامه بشكل متكرر:

أ . ب ().. ج () .. د ()؛

مقارنة مع تسلسل الأساليب

بالنظر إلى استدعاء طريقة a.b()، بعد تنفيذ الاستدعاء، يقوم تسلسل الطريقة بتقييم هذا التعبير إلى الكائن الأيسرa (بقيمته الجديدة، إذا تم تغييره)، بينما يقوم تسلسل الطريقة بتقييم هذا التعبير إلى الكائن الأيمن .

التسلسل

السلسلة التالية (في لغة C++):

أ . ب (). ج ()؛

وهو ما يعادل الشكل البسيط التالي:

ب = أ . ب (); ب . ج ();
متتالي

التسلسل التالي (في لغة دارت):

أ .. ب () .. ج ();

وهو ما يعادل الشكل البسيط التالي:

أ . ب (); أ . ج ();

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

اللغات

باسكال

في عبارة المكون ضمن عبارة `with`، يمكن الإشارة إلى مكونات (حقول) متغير السجل المحدد بواسطة عبارة `with` باستخدام مُعرّف الحقل فقط، أي دون إضافة اسم متغير السجل بالكامل. تُوسّع عبارة `with` نطاق مُعرّفات حقول متغير السجل المُحدد، بحيث يمكن استخدام مُعرّفات الحقول كمُعرّفات للمتغيرات.

باستخدام التاريخ ، إذا كان الشهر = 12، فابدأ : الشهر := 1 ؛ السنة := السنة + 1 ، وإلا فاجعل الشهر := الشهر + 1{ يُعادل }إذا كان الشهر يساوي 12 ، فابدأ بتعيين الشهر إلى 1 ، ثم قم بزيادة السنة بمقدار 1. وإلا ، فقم بزيادة الشهر بمقدار 1 .

أحاديث قصيرة

تم تقديم كل من سلاسل الأساليب والتسلسلات في لغة سمول توك ؛ وقد طبقت معظم لغات البرمجة الكائنية اللاحقة سلاسل الأساليب، لكن القليل منها طبق التسلسلات. في سمول توك، يمكن استخدام عامل الفاصلة المنقوطة لإرسال رسائل مختلفة إلى نفس الكائن: [ 1 ]

لون العنصر الأب لقائمة العناصر : أسود ؛ الارتفاع: 17 ؛ العرض: 11

قارن ذلك بالعبارات المنفصلة، ​​المنتهية بنقطة، والتي تستخدم أيضًا متغيرًا للاختصار:

| parent | parent := self listPane parent . parent color: Color black . parent height: 17 . parent width: 11 .

من الأمور الدقيقة أن قيمة استدعاء دالة ("message") في سلسلة من العمليات المتتالية تظل القيمة العادية للرسالة، وليس المُستقبِل. يُشكّل هذا مشكلةً عندما نرغب في الحصول على قيمة المُستقبِل، كما هو الحال عند بناء قيمة مُركّبة. يُمكن تجاوز هذه المشكلة بإرسال yourselfرسالة تُعيد المُستقبِل فقط. [ 2 ] على سبيل المثال، تُعيد دالة "إضافة عنصر إلى مجموعة" Collection>>add: anObjectالكائن الذي تمت إضافته، وليس المجموعة نفسها. لذا، لاستخدام هذه الدالة في سلسلة من العمليات المتتالية ضمن عبارة إسناد، يجب أن تنتهي السلسلة بـ `@` yourself، وإلا ستكون القيمة هي العنصر الأخير المُضاف فقط، وليس المجموعة نفسها.

all := OrderedCollection new add: 5 ; add: 7 ; yourself .

لاحظ أن هذا yourselfليس خاصًا في لغة سمول توك: بل yourselfهو مُعرَّف في المكتبة القياسية، على سبيل المثال في فئة Objectأو في مكان مشابه:

الكائن >> نفسك ^ الذات

وهذا على النقيض من Smalltalk selfو superthisContext) التي يتم تعريفها داخل اللغة نفسها، وبالتالي لا يمكن استبدالها أو تغييرها إلا من خلال تغيير في المترجم .

فيجوال بيسك

يستخدم Visual Basic هذه Withالعبارة لتمكين عدد غير محدود من استدعاءات الأساليب أو الوصول إلى الخصائص على نفس الكائن:

باستخدام التعبير الذي يُرجع كائنًا . دالة ما ( 42 ) . الخاصية = القيمة، انتهى مع

With..End Withيمكن تداخل الكتل في لغة فيجوال بيسك:

باستخدام التعبير الذي يُرجع كائنًا . دالة ما ( 42 ) . الخاصية = القيمة . باستخدام الكائن الفرعي . الخاصية الفرعية = القيمة الأخرى . طريقة أخرى ( 42 ). نهاية باستخدام نهاية باستخدام

دارت

من بين اللغات الحديثة، تُطبّق لغة دارت خاصية التتالي باستخدام عملية استدعاء الدوال المتتالية (باستخدام نقطتين ..). على عكس لغة سمول توك، في دارت، قيمة استدعاء الدالة المتتالية هي الكائن الأساسي (المُستقبِل)، وليس قيمة استدعاء الدالة (غير المتتالية)، وبالتالي لا حاجة لاستخدام yourself. تستخدم دارت الخصائص ، وبالتالي بدلاً من استخدام صيغة الدوال لدوال الوصول والتعديل (getters and setters foo.getBar(); foo.setBar(b);)، فإنها تستخدم صيغة قيمة الحقل/التعيين (field value/assigning foo.bar; foo.bar = b;)، وتعمل خاصية التتالي مع عمليات التعيين.

a .. string = 'Hello world!' .. done = true ;

يعادل ما يلي:

a.string = ' Hello world ! ' ; a.done = true ;

التلعثم واللهجات

dotoيمكن استخدام الماكرو المدمج في Clojure لاستدعاء طرق متعددة على نفس الكائن دون ربطه بمتغير، وهو أمر مفيد في الغالب للعمل على الكائنات القابلة للتغيير من اللغة المضيفة.

( doto ( java.util.ArrayList. ) ( . add1 ) ( . add3 ) ( println )) ; لا يقتصر على الدوال فقط ؛؛؛ يتوسع إلى كود مكافئ لـ ( let [ l ( java.util.ArrayList. )] ( . addl1 ) (. addl3 ) ( printlnl ) l ) ؛ ​​يتم تقييم النموذج إلى المدخل الأول

تتوفر وحدات ماكرو مماثلة أو يمكن تعريفها بسهولة في العديد من لغات البرمجة الأخرى مثل Common Lisp .

مراجع

  1. بيك 1997 ، "كاسكيد"، ص 183-185.
  2. بيك 1997 ، "نفسك"، ص 186-188.
  • بيك، كينت (1997). أنماط أفضل الممارسات في لغة سمول توك . برنتيس هول. ISBN 978-0134769042.
دارت