تمرين - إنشاء أساليب قابلة لإعادة الاستخدام
- 10 دقائق
أثناء تطوير التطبيقات ، قد تجد نفسك تكتب التعليمات البرمجية للقيام بنفس الشيء مرارا وتكرارا. بدلا من كتابة تعليمات برمجية مكررة ، يؤدي استخدام طريقة لتنفيذ نفس المهمة إلى تقصير التعليمات البرمجية الخاصة بك ويساعدك على تطوير التطبيقات بشكل أسرع. في هذا التمرين ، ستحدد التعليمات البرمجية المتكررة وتستبدلها بطريقة قابلة لإعادة الاستخدام. فلنبدأ!
تحديد التعليمات البرمجية المكررة
في هذه المهمة ، ستلقي نظرة على تطبيق يتتبع أوقات الأدوية عبر مناطق زمنية مختلفة. يدخل المستخدم منطقته الزمنية الحالية ومنطقته الزمنية المقصودة. يتم عرض جدول الأدوية الخاص بهم ثم تعديله وفقا للمنطقة الزمنية الجديدة.
في محرر Visual Studio Code، احذف أي تعليمة برمجية موجودة من التدريبات السابقة.
انسخ التعليمات البرمجية التالية والصقها في محرر التعليمات البرمجية Visual Studio:
using System; int[] times = {800, 1200, 1600, 2000}; int diff = 0; Console.WriteLine("Enter current GMT"); int currentGMT = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Current Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { string time = val.ToString(); int len = time.Length; if (len >= 3) { time = time.Insert(len - 2, ":"); } else if (len == 2) { time = time.Insert(0, "0:"); } else { time = time.Insert(0, "0:0"); } Console.Write($"{time} "); } Console.WriteLine(); Console.WriteLine("Enter new GMT"); int newGMT = Convert.ToInt32(Console.ReadLine()); if (Math.Abs(newGMT) > 12 || Math.Abs(currentGMT) > 12) { Console.WriteLine("Invalid GMT"); } else if (newGMT <= 0 && currentGMT <= 0 || newGMT >= 0 && currentGMT >= 0) { diff = 100 * (Math.Abs(newGMT) - Math.Abs(currentGMT)); /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } } else { diff = 100 * (Math.Abs(newGMT) + Math.Abs(currentGMT)); /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } } Console.WriteLine("New Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { string time = val.ToString(); int len = time.Length; if (len >= 3) { time = time.Insert(len - 2, ":"); } else if (len == 2) { time = time.Insert(0, "0:"); } else { time = time.Insert(0, "0:0"); } Console.Write($"{time} "); } Console.WriteLine();لاحظ أن هناك العديد من
forالحلقات التي تتكرر بتعليمات برمجية متطابقة.هناك حلقتان
foreachتقوم بتنسيق وعرض أوقات الطب. هناك حلقتان أخريانforتضبطان الأوقات وفقا لفرق المنطقة الزمنية.أثناء كتابة التعليمات البرمجية ، قد تجد نفسك تكرر كتل من التعليمات البرمجية للقيام بنفس المهمة. هذه فرصة مثالية لدمج التعليمات البرمجية الخاصة بك باستخدام طريقة لأداء المهمة بدلا من ذلك. دعونا نتدرب!
إنشاء طرق لتنفيذ المهام المتكررة
الآن بعد أن حددت التعليمات البرمجية المتكررة ، يمكنك إنشاء طريقة لاحتواء التعليمات البرمجية وإزالة التكرارات. استخدام الأساليب له ميزة إضافية تتمثل في تقصير التعليمات البرمجية الخاصة بك وتحسين قابلية القراءة! تقوم الحلقات foreach بتنسيق وعرض قيم الوقت، بحيث يمكنك إعطاء الأسلوب اسما يعكس هذه المهمة بوضوح. يمكنك أن تفعل الشيء نفسه مع الحلقة for التي تضبط الأوقات. فلنبدأ!
أدخل سطر رمز فارغ جديد في نهاية التعليمات البرمجية السابقة.
في سطر التعليمات البرمجية الفارغة الجديد، قم بإنشاء توقيع أسلوب عن طريق إدخال التعليمات البرمجية التالية:
void DisplayTimes() { }لتحديد نص الأسلوب، قم بتحديث
DisplayTimesالطريقة عن طريق نسخ الكتلة ولصقهاforeachعلى النحو التالي:void DisplayTimes() { /* Format and display medicine times */ foreach (int val in times) { string time = val.ToString(); int len = time.Length; if (len >= 3) { time = time.Insert(len - 2, ":"); } else if (len == 2) { time = time.Insert(0, "0:"); } else { time = time.Insert(0, "0:0"); } Console.Write($"{time} "); } Console.WriteLine(); }في هذه الطريقة، تقوم بتضمين المكالمة إلى
Console.WriteLineفي النهاية لإلحاق سطر جديد بعد عرض الأوقات. بعد ذلك ، ستقوم بإنشاء طريقة أخرى لضبط الأوقات وفقا لفرق المنطقة الزمنية.أدخل سطر رمز فارغ جديد في نهاية التعليمات البرمجية السابقة.
في سطر التعليمات البرمجية الفارغة الجديد، قم بإنشاء توقيع أسلوب عن طريق إدخال التعليمات البرمجية التالية:
void AdjustTimes() { }قم بتحديث
AdjustTimesالطريقة عن طريق نسخ الحلقة ولصقهاforعلى النحو التالي:void AdjustTimes() { /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } }
الخطوة 3: استدعاء الطرق
في هذه المهمة، ستقوم بحذف كتل التعليمات البرمجية المتكررة واستبدالها باستدعاءات للأساليب التي قمت بإنشائها.
حدد موقع المثيل الأول من الحلقة المتكررة
foreachتحت التعليق "تنسيق وعرض أوقات الدواء":Console.WriteLine("Current Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine(); Console.WriteLine("Enter new GMT");استبدل التعليمات البرمجية التي حددتها باستدعاء للطريقة
DisplayTimes. يجب أن ينتج عن الاستبدال الكود التالي:Console.WriteLine("Current Medicine Schedule:"); DisplayTimes(); Console.WriteLine("Enter new GMT");بعد ذلك ، ستستبدل المثيل الثاني من التعليمات البرمجية المتكررة.
حدد موقع المثيل الثاني من الحلقة
foreachتحت التعليق "تنسيق وعرض أوقات الطب":Console.WriteLine("New Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine();استبدل التعليمات البرمجية التي حددتها باستدعاء للطريقة
DisplayTimes. يجب أن ينتج عن الاستبدال الكود التالي:Console.WriteLine("New Medicine Schedule:"); DisplayTimes();لاحظ كيف أن استخدام طريقة بدلا من كتلة كبيرة من التعليمات البرمجية يوفر مزيدا من الوضوح ويجعل الكود أسهل في الفهم. لنفعل الشيء نفسه مع
AdjustTimesالطريقة التي قمت بإنشائها.حدد موقع التعليمات البرمجية التالية باستخدام الحلقات المكررة
for:else if (newGMT <= 0 && currentGMT <= 0 || newGMT >= 0 && currentGMT >= 0) { diff = 100 * (Math.Abs(newGMT) - Math.Abs(currentGMT)); /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } } else { diff = 100 * (Math.Abs(newGMT) + Math.Abs(currentGMT)); /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } }استبدل مثيلات التعليمات البرمجية المتكررة تحت التعليق "ضبط الأوقات عن طريق إضافة الفرق" باستدعاءات إلى طريقتك
AdjustTimes. يجب أن ينتج عن الاستبدال الكود التالي:else if (newGMT <= 0 && currentGMT <= 0 || newGMT >= 0 && currentGMT >= 0) { diff = 100 * (Math.Abs(newGMT) - Math.Abs(currentGMT)); AdjustTimes(); } else { diff = 100 * (Math.Abs(newGMT) + Math.Abs(currentGMT)); AdjustTimes(); }الآن تم استبدال جميع التعليمات البرمجية المكررة بطريقتك الجديدة. لاحظ مدى سهولة قراءة التعليمات البرمجية الخاصة بك!
التحقق من عملك
في هذه المهمة، ستقوم بتشغيل التطبيق الخاص بك من الوحدة الطرفية المتكاملة والتحقق من أن التعليمات البرمجية تعمل بشكل صحيح. هيَّا نبدأ.
قارن التعليمات البرمجية بما يلي للتأكد من صحتها:
int[] times = {800, 1200, 1600, 2000}; int diff = 0; Console.WriteLine("Enter current GMT"); int currentGMT = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Current Medicine Schedule:"); DisplayTimes(); Console.WriteLine("Enter new GMT"); int newGMT = Convert.ToInt32(Console.ReadLine()); if (Math.Abs(newGMT) > 12 || Math.Abs(currentGMT) > 12) { Console.WriteLine("Invalid GMT"); } else if (newGMT <= 0 && currentGMT <= 0 || newGMT >= 0 && currentGMT >= 0) { diff = 100 * (Math.Abs(newGMT) - Math.Abs(currentGMT)); AdjustTimes(); } else { diff = 100 * (Math.Abs(newGMT) + Math.Abs(currentGMT)); AdjustTimes(); } Console.WriteLine("New Medicine Schedule:"); DisplayTimes(); void DisplayTimes() { /* Format and display medicine times */ foreach (int val in times) { string time = val.ToString(); int len = time.Length; if (len >= 3) { time = time.Insert(len - 2, ":"); } else if (len == 2) { time = time.Insert(0, "0:"); } else { time = time.Insert(0, "0:0"); } Console.Write($"{time} "); } Console.WriteLine(); } void AdjustTimes() { /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } }احفظ عملك باستخدام Ctrl + S أو باستخدام قائمة Visual Studio Code File.
إذا لزم الأمر، افتح لوحة المحطة الطرفية المتكاملة في Visual Studio Code.
في لوحة EXPLORER، لفتح Terminal في موقع مجلد TestProject، انقر بزر الماوس الأيمن فوق TestProject، ثم حدد Open in Integrated Terminal.
في موجه الأوامر Terminal، أدخل dotnet run
أدخل -6 و+6 لمطالبات GMT.
تحقق من أن التعليمات البرمجية الخاصة بك تنتج الإخراج التالي:
Enter current GMT -6 Current Medicine Schedule: 8:00 12:00 16:00 20:00 Enter new GMT +6 New Medicine Schedule: 20:00 0:00 4:00 8:00إذا كانت التعليمات البرمجية تعرض نتائج مختلفة، فستحتاج إلى مراجعة التعليمات البرمجية للعثور على الخطأ وإجراء التحديثات. قم بتشغيل التعليمات البرمجية مرة أخرى لمعرفة ما إذا كنت قد أصلحت المشكلة. متابعة تحديث التعليمات البرمجية وتشغيلها حتى تنتج التعليمات البرمجية النتائج المتوقعة.
اختبر معلوماتك
الملاحظات
هل كانت هذه الصفحة مفيدة؟
لا
هل تحتاج إلى مساعدة مع هذا الموضوع؟
هل تريد محاولة استخدام Ask Learn لتوضيح هذا الموضوع أو إرشادك خلاله؟