تجزئة المتغير المؤقت (Split Temporary Variable)
المشكلة
وجود متغيِّرٍ محليّ يُستخدَم لتخزين عدّة قيمٍ مؤقتةٍ (مرحليّة) داخل التابع.
الحل
استخدام متغيِّراتٍ منفصلةٍ ومستقلّةٍ للقيم المختلفة، بحيث يكون كلَُ متغيِّرٍ مسؤولًا عن تخزين البيانات لمهمةٍ واحدةٍ فقط.
مثال
قبل إعادة التصميم
نلاحظ في الشيفرة الآتية استخدام المتغيِّر temp
لتخزين ناتج كلِّ من تعبيريّ المحيط والمساحة:
double temp = 2 * (height + width);
System.out.println(temp);
temp = height * width;
System.out.println(temp);
بعد إعادة التصميم
يُخصَّص متغيران منفصلان للمحيط (باسم perimeter
) والمساحة (باسم area
) لتصبح الشيفرة بالشكل:
final double perimeter = 2 * (height + width);
System.out.println(perimeter);
final double area = height * width;
System.out.println(area);
لم إعادة التصميم؟
عند إعادة استخدامك لنفس المتغيِّر في الدالة (function) أو التابع (method) بهدف التقليل من عدد المتغيِّرات الإجماليّ في البرنامج فمن المُتوقَّع أن تواجه بعض المشاكل عند إجرائِك أيَّ تغييرٍ لاحقٍ في الشيفرة التي تستخدم ذلك المتغيِّر، وعليك حينئذٍ التحقُّق مجددًا من كلِّ حالةٍ استُخدم فيها المتغيِّر وذلك لضمان احتوائه على القيمة الصحيحة المطلوبة.
فوائد تطبيق الحل
- سيصبح كل جزءٍ من شيفرة البرنامج مسؤولًا عن مهمةٍ واحدةٍ (وواحدةٍ فقط) مما يجعل من السهل صيانة (maintenance) البرنامج إذ من الممكن القيام بأيّ تبديلٍ دون القلق حيال الآثار الجانبية التي قد تنجم عن هذا التبديل.
- ستصبح الشيفرة مقروءةً أكثر، فإن كان الإنشاء السابق للمتغيِّر على عجالةٍ فلربما تشابه تسميته إحدى التسميات:
k
أوa2
أوvalue
أو...إلخ. ولكن من السهل إعادة تسمية المتغيِّرات لتصبح بأسماءٍ واضحةٍ سهلة الفهم مثل:customerTaxValue
أوcityUnemploymentRate
أوclientSalutationString
أو ما يماثلها. - تفيد تقنية الحلِّ هذه عندما يُتوقَع تطبيق تقنية الحل باستخراج التابع (extract method) فيما بعد.
آلية الحل
- إيجاد أول عملية إسنادٍ للمتغيِّر وإعادة تسميته هناك إلى اسمٍ متناسبٍ مع القيمة المُسنَدة.
- استخدام التسمية الجديدة للمتغيِّر بدلًا من التسمية السابقة في كلِّ موضعٍ متعلِّق باستخدام تلك القيمة التي يحتويها.
- تكرار الخطوتين السابقتين لكلِّ عملية إسنادٍ للمتغيِّر.