Oefening: herbruikbare methoden maken
- 10 minuten
Wanneer u toepassingen ontwikkelt, kunt u zelf steeds opnieuw code schrijven om hetzelfde te doen. In plaats van dubbele code te schrijven, wordt met behulp van een methode om dezelfde taak uit te voeren uw code verkort en kunt u sneller toepassingen ontwikkelen. In deze oefening identificeert u herhaalde code en vervangt u deze door een herbruikbare methode. Laten we aan de slag gaan.
Dubbele code identificeren
In deze taak bekijkt u een toepassing waarmee medicatietijden in verschillende tijdzones worden bijgehouden. De gebruiker voert de huidige tijdzone en de doeltijdzone in. Hun medicatieschema wordt weergegeven en vervolgens aangepast voor de nieuwe tijdzone.
Verwijder in de Visual Studio Code-editor alle bestaande code uit de vorige oefeningen.
Kopieer en plak de volgende code in de Visual Studio Code-editor:
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();U ziet dat er verschillende
for-lussen zijn die worden herhaald met identieke code.Er zijn twee
foreachlussen die de medicijntijden opmaken en weergeven. Er zijn nog tweeforlussen die de tijden aanpassen op basis van het verschil in de tijdzone.Terwijl u code schrijft, kunt u uzelf herhalende codeblokken vinden om dezelfde taak uit te voeren. Dit is een perfecte gelegenheid om uw code samen te voegen met behulp van een methode om de taak uit te voeren. Laten we oefenen!
Methoden maken om de herhaalde taken uit te voeren
Nu u herhaalde code hebt geïdentificeerd, kunt u een methode maken om de code te bevatten en de duplicaten te verwijderen. Het gebruik van methoden heeft de extra bonus van het verkorten van uw code en het verbeteren van de leesbaarheid. De foreach lussen maken en de tijdwaarden weergeven, zodat u de methode een naam kunt geven die duidelijk overeenkomt met die taak. U kunt hetzelfde doen met de for lus waarmee de tijden worden aangepast. Laten we aan de slag gaan.
Voer aan het einde van de vorige code een nieuwe lege coderegel in.
Maak op de nieuwe lege coderegel een methodehandtekening door de volgende code in te voeren:
void DisplayTimes() { }Als u de hoofdtekst van de methode wilt definiëren, werkt u de
DisplayTimesmethode bij door hetforeachblok als volgt te kopiëren en te plakken: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(); }In deze methode voegt u de aanroep aan het einde toe
Console.WriteLineom een nieuwe regel toe te voegen nadat de tijden zijn weergegeven. Vervolgens maakt u een andere methode om de tijden aan te passen op basis van het verschil in de tijdzone.Voer aan het einde van de vorige code een nieuwe lege coderegel in.
Maak op de nieuwe lege coderegel een methodehandtekening door de volgende code in te voeren:
void AdjustTimes() { }Werk de
AdjustTimesmethode als volgt bij door deforlus te kopiëren en plakken: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; } }
Stap 3: De methoden aanroepen
In deze taak verwijdert u de herhaalde codeblokken en vervangt u deze door aanroepen naar de methoden die u hebt gemaakt.
Zoek het eerste exemplaar van de herhaalde
foreachlus onder de opmerking "Format and display medicine times":Console.WriteLine("Current Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine(); Console.WriteLine("Enter new GMT");Vervang de code die u hebt geïdentificeerd door een aanroep naar de
DisplayTimesmethode. De vervanging moet resulteren in de volgende code:Console.WriteLine("Current Medicine Schedule:"); DisplayTimes(); Console.WriteLine("Enter new GMT");Vervolgens vervangt u het tweede exemplaar van de herhaalde code.
Zoek het tweede exemplaar van de
foreachlus onder de opmerking 'Tijd van opmaak en weergavegeneeskunde':Console.WriteLine("New Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine();Vervang de code die u hebt geïdentificeerd door een aanroep naar de
DisplayTimesmethode. De vervanging moet resulteren in de volgende code:Console.WriteLine("New Medicine Schedule:"); DisplayTimes();U ziet hoe het gebruik van een methode in plaats van een groot codeblok meer duidelijkheid biedt en de code gemakkelijker te begrijpen maakt. Laten we hetzelfde doen met de
AdjustTimesmethode die u hebt gemaakt.Zoek de volgende code met de gedupliceerde
for-lussen: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; } }Vervang de exemplaren van herhaalde code onder de opmerking 'Pas de tijden aan door het verschil toe te voegen' door aanroepen naar uw
AdjustTimesmethode. De vervanging moet resulteren in de volgende code: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(); }Nu is alle gedupliceerde code vervangen door uw nieuwe methode. Let op hoeveel beter leesbaar en beknopter uw code eruitziet.
Uw werk controleren
In deze taak voert u uw toepassing uit vanuit de Integrated Terminal en controleert u of uw code correct werkt. Laten we beginnen.
Vergelijk uw code met het volgende om te controleren of deze juist is:
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; } }Sla uw werk op met Ctrl + S of met het menu Visual Studio Code File.
Open zo nodig het geïntegreerde terminalpaneel van Visual Studio Code.
Klik in het deelvenster EXPLORER om een Terminal te openen op de locatie van de map TestProject met de rechtermuisknop op TestProject en selecteer Vervolgens Openen in geïntegreerde terminal.
Voer bij de Terminal-opdrachtprompt dotnet run in.
Voer -6 en +6 in voor de GMT-prompts.
Controleer of uw code de volgende uitvoer produceert:
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:00Als uw code verschillende resultaten weergeeft, moet u uw code controleren om uw fout te vinden en updates aan te brengen. Voer de code opnieuw uit om te zien of u het probleem hebt opgelost. Ga door met het bijwerken en uitvoeren van uw code totdat uw code de verwachte resultaten produceert.
Uw kennis controleren
Feedback
Is deze pagina nuttig?
Nee
Need help with this topic?
Want to try using Ask Learn to clarify or guide you through this topic?