ما هي الـ Class Methods
#1
السلام عليكم ورحمة الله

من الاشياء الجديدة في دلفي الحديث والتي ارتحت لها هي ما يسمى  Class Methods فمثلا لدينا هذه الفئة

كود :
type
  TCryptoHelper = class
  public
    class function DecryptAES(const EncryptedBase64: String; const KeyStr, IVStr: String): String;
  end;

implementation

class function TCryptoHelper.DecryptAES(const EncryptedBase64: String; const KeyStr, IVStr: String): String;
Begin
// code here
end;

سابقا كان لابد من اشتقاق نسخة من هذه الفئة عن طريق Greate وايضا يجب تحريرها بي Free

الان يمكننا ببساطة استخدام الدالة

كود :
TCryptoHelper.DecryptAES

ببساطة، هي دوال تنتمي إلى الفئة (Class) نفسها وليس إلى كائن (Object) محدد مشتق منها.


شرح تقنية Class Methods
في الحالة العادية، تحتاج لإنشاء نسخة من الكائن في الذاكرة باستخدام Create لتتمكن من الوصول لخصائصه، لكن مع class function:

لا حاجة لـ Create: يمكنك استدعاء الدالة مباشرة باستخدام اسم الفئة: TCryptoHelper.DecryptAES.

توفير الذاكرة: بما أنك لا تشتق كائناً جديداً، فأنت لا تستهلك مساحة في الذاكرة ولا تحتاج للقلق بشأن تحريرها (Free).

التنظيم: تُستخدم غالباً في الدوال "المساعدة" (Utility/Helper functions) التي تؤدي مهمة محددة ولا تعتمد على بيانات متغيرة داخل الكائن.

لماذا نستخدمها؟ (حالات الاستخدام)
المكتبات البرمجية (Utility Libraries): مثل مثال التشفير الذي ذكرته، أو معالجة النصوص، حيث تريد فقط تمرير مدخلات والحصول على مخرجات.

نمط المصنع (Factory Pattern): لإنشاء كائنات معقدة وإرجاعها جاهزة.

العدّادات (Counters): لمتابعة عدد المرات التي تم فيها استدعاء ميزة معينة عبر البرنامج بالكامل.

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

ملاحظة: في مثالك الخاص بالتشفير، استخدام class function هو الخيار الأمثل (Best Practice) لأنه يجعل الكود نظيفاً جداً وقابل للقراءة كأنه نص لغوي: "يا فئة التشفير، فكي شفرة هذا النص".
إذا رأيت منتجاً مجانياً فأعلم بأنك أنت السّلعة
[-] كل من 3 users say قال شكرا ل الفجر الابيض على المشاركة المفيدة
  • أبو معاذ, لؤي, h-farid
الرد
#2
وعليكم السلام ورحمة الله وبركاته،

بارك الله فيك على الشرح، لكن اود توضيح نقطة انه ليست جديدة في دلفي، فأنا استخدمها منذ دلفي 7، اي منذ اكثر من 20 سنة :-)

وهي موجودة في اللغات الاخرى بمسمى static methods.

شكراً لكن وفي انتظار شروحات أخرى منك
[-] كل من 1 user says قال شكرا ل mo7ammed على المشاركة المفيدة
  • الفجر الابيض
الرد
#3
سلام غليكم
Class methods موجودة منذ النسخ الاولى لدلفي ما تغير هو طريقة استعمالها في الاصل هي تخص كل ما يتعلق بالكلاس كنوع type مثل ClassName, InstanceSize .. في النسخ الاخيرة اصبحت تستخدم لادارة Namespace الذي لا يدعمه في الاصل دالفي ..هذه الطريقة في البرمجة مجرد قص و لصق من لغات برمجة اخرى C# Java تم اعتمادها دون مراعات خصائص دلفي .. الذين سبق لهم ان تعاملوا مع استعمالاتها الاصلية يدركون مدى التشويش الذي يسببه الاستعمال العشوائي في السورس.. كان الاجدر فصل الكلاس عن namespace ..لان دلفي يعتمد T للكلاس

في النسخ الاخير تم اضافة class methods static و التي لا تختلف كثيرا فقط لا تتوي Self
[-] كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة
  • الفجر الابيض
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم