تقدم سي شارب مجموعة من الوظائف التي تساعدك في تعديل وتحسين الكود ، وتندرج هذه الوظائف تحت ما يسمى بالـ Refactoring. لكن ما هو الـ Refactoring وما هي هذه الوظائف ؟ هذا ما سوف نحاول ان نفهمه هنا.
ما هو الـ Refactoring؟
يركز الـ Refactoring على تعديل الكود بدون تعديل الوظائف التي يقوم بها، والتعديل هنا بغرض تحسينه بحيث تسهل قراءته وصيانته ويزيد اداءه.
فمن الأمثلة الشائعة ، عندما تحتاج في برنامجك إلى رقم ذو دلالة ما ان تقوم باستخدام رمز ثابت يدل عليه عوضاً عن استخدامه مباشرة، كاستبدال الرقم 3.14 بالثابت PI (ط او النسبة التقريبية).
تأمل الكود:
class SimpleMath
{
public static double CalcCircumference(double diameter)
{ return 3.14 * diameter; }
}يمكن تعديله ليصبح:
class SimpleMath
{
public const double PI = 3.14;
public static double CalcCircumference(double diameter)
{ return PI * diameter; }
}وبالرغم من ان وظيفة البرنامج لم تتغير إلا ان هذا التعديل قام بتحسين الكود من حيث:
- تحسين قابلية القراءة ، فالرمز PI أكثر وضوحاً من القيمة 3.14 مما يسهل معه فهم الكود.
- إذا احتجنا ان نعدل في قيمة الثابت (لربما لزيادة الدقة كـ 3.14159 ) فما علينا إلا ان نقوم بتغيير قيمة الرمز الثابت عوضاً عن تغيير الرقم في كل مكان في البرنامج .
مثل هذا التعديل وغيره يندرج ضمن الـ Refactoring ، ويمكنك معرفة المزيد من خلال التالي:
- Fowler, Martin (1999). Refactoring. Improving the Design of Existing Code. Addison-Wesley
- en.wikipedia.org/wiki/Refactoring
وظائف الـ Refactoring في السي شارب:
ارتبط الـ Refactoring في بدايته بالكثير من الخطوات التي يجب القيام بها يدوياً ، فبمجرد ان يحدد المبرمج الكود اللازم تعديله كان عليه القيام بالكثير من عمليات النسخ، اللصق، البحث، الاستبدال ، التجميع (compile)، و الكثير الكثير من عمليات الاختبار. وبلا شك كان هذا يعني ضياع الوقت و الكثير من الأخطاء.
الجيد مع فيجوال استديو ( 2005 وما بعده) انها وفرت بعض وظائف الـ Refactoring التلقائية لتوفر عليك الوقت والجهد، هذه الوظائف:
- Extract Method: إنشاء طريقة جديدة من الكود المحدد
- Encapsulate Field : تحويل حقل إلى خاصية
- Extract Interface: إنشاء واجهة جديدة من الأعضاء المعرفة في فئة.
- Reorder Parameters : إعادة ترتيب الوسائط
- Remove Parameters :إزالة الوسائط
- Rename : إعادة تسمية فئة او حقل او خاصية ...الخ
- Promote Local Variable to Parameter : تحويل متغير محلي إلى وسيط
وقبل ان نقوم بشرح هذه الوظئف ، يجب ان تعلم انه يمكن الوصول إليها من عدة أماكن في الفيجوال استديو مثل : قائمة Refactoring او القائمة المختصرة او اختصارات لوحة المفاتيح .