فهم الحاجة إلى القوالب في VB

في البرمجة، مبدأ DRY—“لا تكرر نفسك”—ضروري لكتابة كود نظيف وفعال وسهل الصيانة. يصبح هذا المبدأ مهمًا بشكل خاص عند العمل مع لغات مثل فيجوال بيسك للتطبيقات (VBA) حيث يكون التكرار شائعًا بسبب الدعم المحدود لتقنيات التجريد مثل القوالب في C++.

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

دعنا نستعرض كيف يمكنك الاستفادة من القوالب (بطريقة ما) ضمن VBA أو، ويفضل، استخدام أدوات أحدث عندما يكون ذلك ممكنًا.

المشكلة: أجزاء الكود المتكررة في VBA

اعتبر المثال التالي حيث لدينا اثنان من أجزاء الكود التي تؤدي بشكل أساسي نفس الشيء لأنواع مختلفة:

Dim i as Obj1
Set i = RoutineThatReturnsObj1()
i.property = newvalue

Dim i as Obj2
Set i = RoutineThatReturnsObj2()
i.property = newvalue

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

الحل المقترح

إنشاء روتين عام

لإزالة الكود المتكرر، يقترح المبرمج روتينًا يمكنه التعامل مع كلا السيناريوهين:

Sub MyRoutine(o as ObjectType, r as RoutineToInitializeObject, newvalue as value) 
   Dim i as o
   Set i = r
   i.property = newvalue
End Sub

ومع ذلك، من المهم أن نلاحظ أن VBA الأصلية تفتقر إلى قدرات القوالب المتطورة الموجودة في لغات مثل C++. لذلك، تحقيق تأثير مشابه ضمن قيود VBA يمكن أن يكون تحديًا.

البديل: استخدام .NET مع VBA

بينما لا يدعم VBA التقليدي النوعيات العامة أو القوالب مثل C++، فإن الانتقال إلى أدوات فيجوال ستوديو للمكتب (VSTO) يوفر بديلاً جادًا. إذا كنت مستعدًا أو قادرًا على تحديث نهجك، يمكنك استخدام النوعيات العامة في .NET.

تنفيذ النوعيات العامة

إليك كيفية استخدام النوعيات العامة في سياق .NET:

Function MyRoutine(Of O)(R As Delegate, newvalue As Object) As O
    Dim i As O = CType(r.Method.Invoke(Nothing, Nothing), O)

    ' تحتاج إلى معامل آخر لتحديد أي خاصية لاستخدامها 
    ' ثم استخدام الانعكاس لتعيين القيمة
    i.property = newvalue 
    return i
End Function

في هذا المثال:

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

الخلاصة

بينما تفتقر VBA التقليدية إلى ميزات القوالب الموجودة في لغات البرمجة الأكثر تطورًا مثل C++، هناك طرق بديلة لتقليل تكرار الكود. باستخدام أدوات فيجوال ستوديو للمكتب مع .NET، يمكنك الاستفادة من النوعيات العامة لإنشاء هياكل كود ديناميكية وقابلة لإعادة الاستخدام.

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

من خلال فهم القيود والاحتمالات الموجودة ضمن VB، يمكنك كتابة كود أنظف وأكثر كفاءة والامتثال لمبدأ DRY بفاعلية.