Exercițiu - Creați metode reutilizabile
- 10 minute
Pe măsură ce dezvoltați aplicații, s-ar putea să scrieți cod pentru a face același lucru din nou și din nou. În loc să scrieți cod duplicat, utilizarea unei metode pentru a efectua aceeași sarcină scurtează codul și vă ajută să dezvoltați aplicații mai rapid. În acest exercițiu, veți identifica codul repetat și îl veți înlocui cu o metodă reutilizabilă. Să începem!
Identificați codul duplicat
În această sarcină, veți arunca o privire la o aplicație care urmărește timpii de medicație în diferite fusuri orare. Utilizatorul introduce fusul orar curent și fusul orar de destinație. Programul lor de medicație este afișat și apoi ajustat pentru noul fus orar.
În Editorul de cod Visual Studio, ștergeți orice cod existent din exercițiile anterioare.
Copiați și lipiți următorul cod în Editorul de cod 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();Observați că există mai multe
forbucle care se repetă cu cod identic.Există două
foreachbucle care formatează și afișează timpii de medicină. Există alte douăforbucle care ajustează orele în funcție de diferența de fus orar.Pe măsură ce scrieți cod, s-ar putea să repetați blocuri de cod pentru a face aceeași sarcină. Aceasta este o oportunitate perfectă de a vă consolida codul utilizând o metodă pentru a efectua sarcina. Să exersăm!
Creați metode pentru a efectua sarcinile repetate
Acum că ați identificat codul repetat, puteți crea o metodă pentru a conține codul și a elimina duplicatele. Utilizarea metodelor are avantajul suplimentar de a scurta codul și de a îmbunătăți lizibilitatea! Buclele foreach formatează și afișează valorile de timp, astfel încât să puteți da metodei un nume care să reflecte clar acea sarcină. Puteți face același lucru cu for bucla care ajustează timpii. Să începem!
Introduceți o nouă linie de cod necompletată la sfârșitul codului anterior.
Pe noua linie de cod necompletată, creați o semnătură de metodă introducând următorul cod:
void DisplayTimes() { }Pentru a defini corpul metodei, actualizați
DisplayTimesmetoda copiind și lipind bloculforeachdupă cum urmează: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(); }În această metodă, includeți apelul la
Console.WriteLinela sfârșit pentru a adăuga o nouă linie după afișarea orelor. Apoi, veți crea o altă metodă pentru a ajusta orele în funcție de diferența de fus orar.Introduceți o nouă linie de cod necompletată la sfârșitul codului anterior.
Pe noua linie de cod necompletată, creați o semnătură de metodă introducând următorul cod:
void AdjustTimes() { }Actualizați metoda
AdjustTimescopiind și lipindforbucla după cum urmează: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; } }
Pasul 3: Apelați metodele
În această sarcină, veți șterge blocurile repetate de cod și le veți înlocui cu apeluri la metodele pe care le-ați creat.
Localizați prima instanță a buclei repetate
foreachsub comentariul "Formatați și afișați timpii medicamentelor":Console.WriteLine("Current Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine(); Console.WriteLine("Enter new GMT");Înlocuiți codul pe care l-ați identificat cu un apel la
DisplayTimesmetodă. Înlocuirea ar trebui să aibă ca rezultat următorul cod:Console.WriteLine("Current Medicine Schedule:"); DisplayTimes(); Console.WriteLine("Enter new GMT");Apoi, veți înlocui a doua instanță a codului repetat.
Localizați a doua instanță a
foreachbuclei sub comentariul "Formatați și afișați timpii medicamentului":Console.WriteLine("New Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine();Înlocuiți codul pe care l-ați identificat cu un apel la
DisplayTimesmetodă. Înlocuirea ar trebui să aibă ca rezultat următorul cod:Console.WriteLine("New Medicine Schedule:"); DisplayTimes();Observați cum utilizarea unei metode în locul unui bloc mare de cod oferă mai multă claritate și face codul mai ușor de înțeles. Să facem același lucru cu metoda pe care
AdjustTimesați creat-o.Găsiți următorul cod cu bucle duplicate
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; } }Înlocuiți instanțele de cod repetat sub comentariul "Ajustați timpii adăugând diferența" cu apeluri la metoda dvs
AdjustTimes. Înlocuirea ar trebui să aibă ca rezultat următorul cod: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(); }Acum tot codul duplicat a fost înlocuit cu noua metodă. Observați cât de lizibil și mai concis arată codul dvs.!
Verifică-ți munca
În această activitate, veți rula aplicația de la Terminalul integrat și veți verifica dacă codul funcționează corect. Să începem.
Comparați codul cu următoarele pentru a vă asigura că este corect:
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; } }Salvați lucrul utilizând Ctrl + S sau utilizând meniul Fișier de cod Visual Studio.
Dacă este necesar, deschideți panoul Terminal integrat visual Studio Code.
În panoul EXPLORER, pentru a deschide un Terminal la locația folderului TestProject, faceți clic dreapta pe TestProject, apoi selectați Deschidere în terminal integrat.
În linia de comandă Terminal, introduceți run dotnet
Introduceți -6 și +6 pentru solicitările GMT.
Verificați dacă codul dvs. generează următoarea ieșire:
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:00Dacă codul afișează rezultate diferite, va trebui să revizuiți codul pentru a găsi eroarea și a face actualizări. Rulați din nou codul pentru a vedea dacă ați remediat problema. Continuați să actualizați și să rulați codul până când codul produce rezultatele așteptate.
Verificați-vă cunoștințele
Feedback
Această pagină a fost utilă?
Nu
Aveți nevoie de ajutor cu acest subiect?
Doriți să încercați să utilizați Întrebați Microsoft Learn pentru a clarifica sau primi îndrumări privind acest subiect?