แบบฝึกหัด - สร้างวิธีการที่สามารถนํากลับมาใช้ใหม่ได้
- 10 นาที
ในขณะที่คุณพัฒนาแอปพลิเคชัน คุณอาจพบว่าตัวเองเขียนโค้ดเพื่อทําสิ่งเดียวกันซ้ําแล้วซ้ําเล่า แทนที่จะเขียนโค้ดที่ซ้ํากัน การใช้วิธีการเพื่อทํางานเดียวกันจะทําให้โค้ดของคุณสั้นลงและช่วยให้คุณพัฒนาแอปพลิเคชันได้เร็วขึ้น ในแบบฝึกหัดนี้ คุณจะระบุรหัสที่ซ้ํากันและแทนที่ด้วยวิธีการที่นํากลับมาใช้ใหม่ได้ มาเริ่มต้นกันเลย!
ระบุรหัสที่ซ้ํากัน
ในงานนี้ คุณจะได้ดูแอปพลิเคชันที่ติดตามเวลาการใช้ยาในเขตเวลาต่างๆ ผู้ใช้ป้อนเขตเวลาปัจจุบันและเขตเวลาปลายทาง ตารางการใช้ยาของพวกเขาจะปรากฏขึ้นและปรับให้เข้ากับเขตเวลาใหม่
ใน Visual Studio Code Editor ให้ลบโค้ดที่มีอยู่ออกจากแบบฝึกหัดก่อนหน้า
คัดลอกและวางรหัสต่อไปนี้ลงในตัวแก้ไขโค้ด 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();สังเกตว่ามี -loops หลายรายการ
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วิธีการที่คุณสร้างขึ้นค้นหารหัสต่อไปนี้ด้วย -loops ที่ซ้ํา
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
หากจําเป็น ให้เปิดแผงเทอร์มินัลแบบรวมของ Visual Studio Code
ในแผง EXPLORER ในการเปิดเทอร์มินัลที่ตําแหน่งโฟลเดอร์ TestProject ของคุณ ให้คลิกขวาที่ TestProjectจากนั้นเลือก เปิดในเทอร์มินัลแบบรวม
ที่พร้อมท์คําสั่งเทอร์มินัล ให้ใส่ dotnet ทํางาน
ป้อน -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 เพื่อทําให้ชัดเจนหรือแนะนําคุณผ่านหัวข้อนี้หรือไม่