Harjoitus – Uudelleenkäytettäviä menetelmiä
- 10 minuuttia
Kun kehität sovelluksia, saatat huomata kirjoittavasi koodia, joka tekee saman asian yhä uudelleen ja uudelleen. Päällekkäisen koodin kirjoittamisen sijaan saman tehtävän suorittaminen lyhentää koodia ja auttaa kehittämään sovelluksia nopeammin. Tässä harjoituksessa tunnistat toistuvan koodin ja korvaat sen uudelleenkäytettävällä menetelmällä. Aloitetaan!
Tunnista päällekkäinen koodi
Tässä tehtävässä tarkastellaan sovellusta, joka seuraa lääkitysaikoja eri aikavyöhykkeillä. Käyttäjä syöttää nykyisen aikavyöhykkeensä ja kohdeaikavyöhykkeensä. Heidän lääkitysaikataulunsa näytetään ja säädetään sitten uudelle aikavyöhykkeelle.
Poista Visual Studio Code -editorissa aiemmin luotu koodi edellisistä harjoituksista.
Kopioi ja liitä seuraava koodi Visual Studio Code Editoriin:
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();Huomaa, että on olemassa useita
for-silmukoita, jotka toistuvat identtisen koodin kanssa.On kaksi
foreachsilmukkaa, jotka muotoilevat ja näyttävät lääkeajat. On vielä kaksiforsilmukkaa, jotka säätävät aikoja aikavyöhyke-eron mukaan.Kun kirjoitat koodia, saatat huomata toistavasi koodilohkoja saman tehtävän suorittamiseksi. Tämä on täydellinen tilaisuus yhdistää koodisi käyttämällä sen sijaan menetelmää tehtävän suorittamiseen. Harjoitteletaan!
Luo menetelmiä toistuvien tehtävien suorittamiseksi
Nyt kun olet tunnistanut toistuvan koodin, voit luoda menetelmän, joka sisältää koodin ja poistaa kaksoiskappaleet. Menetelmien käytön lisäetuna on koodin lyhentäminen ja luettavuuden parantaminen! Silmukat foreach muotoilevat ja näyttävät aika-arvot, joten voit antaa metodille nimen, joka kuvastaa selvästi kyseistä tehtävää. Voit tehdä saman silmukalla, for joka säätää aikoja. Aloitetaan!
Kirjoita uusi tyhjä koodirivi edellisen koodin loppuun.
Luo uudelle tyhjälle koodiriville menetelmän allekirjoitus kirjoittamalla seuraava koodi:
void DisplayTimes() { }Määritä menetelmän runko päivittämällä
DisplayTimesmenetelmä kopioimalla ja liittämälläforeachlohko seuraavasti: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(); }Tässä menetelmässä lisäät kutsun
Console.WriteLineloppuun liittääksesi uuden rivin aikojen näyttämisen jälkeen. Seuraavaksi luot toisen menetelmän aikojen säätämiseksi aikavyöhyke-eron mukaan.Kirjoita uusi tyhjä koodirivi edellisen koodin loppuun.
Luo uudelle tyhjälle koodiriville menetelmän allekirjoitus kirjoittamalla seuraava koodi:
void AdjustTimes() { }Päivitä
AdjustTimesmenetelmä kopioimalla ja liittämällä silmukkaforseuraavasti: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; } }
Vaihe 3: Soita menetelmille
Tässä tehtävässä poistat toistuvat koodilohkot ja korvaat ne luomiesi menetelmien kutsuilla.
Etsi toistuvan
foreachsilmukan ensimmäinen esiintymä kommentin "Muotoile ja näytä lääkeajat" alta:Console.WriteLine("Current Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine(); Console.WriteLine("Enter new GMT");Korvaa tunnistamasi koodi menetelmän
DisplayTimeskutsulla. Korvaamisen pitäisi johtaa seuraavaan koodiin:Console.WriteLine("Current Medicine Schedule:"); DisplayTimes(); Console.WriteLine("Enter new GMT");Seuraavaksi korvaat toistuvan koodin toisen esiintymän.
Etsi silmukan toinen esiintymä
foreachkommentin "Muotoile ja näytä lääkeajat" alta:Console.WriteLine("New Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine();Korvaa tunnistamasi koodi menetelmän
DisplayTimeskutsulla. Korvaamisen pitäisi johtaa seuraavaan koodiin:Console.WriteLine("New Medicine Schedule:"); DisplayTimes();Huomaa, kuinka metodin käyttäminen suuren koodilohkon sijasta selkeyttää koodia ja helpottaa koodin ymmärtämistä. Tehdään sama luomasi menetelmän
AdjustTimeskanssa.Etsi seuraava koodi monistetuilla
for-silmukoilla: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; } }Korvaa toistuvan koodin esiintymät kommentin "Säädä aikoja lisäämällä ero" alla metodin kutsuilla
AdjustTimes. Korvaamisen pitäisi johtaa seuraavaan koodiin: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(); }Nyt kaikki kopioitu koodi on korvattu uudella menetelmälläsi. Huomaa, kuinka paljon luettavammalta ja ytimekkäämmältä koodisi näyttää!
Tarkista työsi
Tässä tehtävässä suoritat sovelluksesi Integrated Terminalista ja varmistat, että koodisi toimii oikein. Aloitetaan nyt.
Vertaa koodia seuraaviin varmistaaksesi, että se on oikein:
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; } }Tallenna työsi painamalla Ctrl + S tai Visual Studio Code File -valikon avulla.
Avaa tarvittaessa Visual Studio Coden Integroitu pääte -paneeli.
Avaa EXPLORER-paneelin TestProject-kansion sijainnissa Terminal napsauttamalla hiiren kakkospainikkeella TestProjectja valitsemalla sitten Avaa Integroidussa päätteessä -.
Kirjoita Terminal-komentokehotteeseen dotnet run
Syötä -6 ja +6 GMT-kehotteisiin.
Varmista, että koodisi tuottaa seuraavan tulosteen:
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:00Jos koodisi näyttää eri tuloksia, sinun on tarkistettava koodisi löytääksesi virheesi ja tehdäksesi päivityksiä. Suorita koodi uudelleen, jotta näet, oletko korjannut ongelman. Jatka koodin päivittämistä ja suorittamista, kunnes koodisi tuottaa odotetut tulokset.