Gyakorlat – Újrafelhasználható metódusok létrehozása
- 10 perc
Az alkalmazások fejlesztése során előfordulhat, hogy kódot ír, hogy ugyanazt tegye újra és újra. Ahelyett, hogy duplikált kódot írnál, egy metódussal ugyanannak a feladatnak a végrehajtásával lerövidítheti a kódot, és gyorsabban fejlesztheti az alkalmazásokat. Ebben a gyakorlatban azonosítja az ismétlődő kódot, és egy újrafelhasználható metódusra cseréli. Lássunk hozzá!
Duplikált kód azonosítása
Ebben a feladatban egy olyan alkalmazást tekinthet meg, amely nyomon követi a különböző időzónákban a gyógyszerek idejét. A felhasználó megadja az aktuális időzónáját és a cél időzónáját. A gyógyszerek ütemezése megjelenik, majd az új időzónához igazodik.
A Visual Studio Code Editorban törölje a meglévő kódot az előző gyakorlatokból.
Másolja és illessze be a következő kódot a Visual Studio Code Editorba:
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();Figyelje meg, hogy több
forciklus is ismétlődik azonos kóddal.Két
foreachhurok van, amelyek formázzák és megjelenítik a gyógyszerek időpontjait. Van még kétforhurok, amelyek az időzóna-különbségnek megfelelően módosítják az időpontokat.Amikor kódot ír, előfordulhat, hogy ugyanazt a feladatot ismétlődően hajtja végre kódrészletek ismétlésével. Ez egy tökéletes lehetőség arra, hogy a kódot konszolidálja azáltal, hogy egy metódust használ a feladat elvégzéséhez. Gyakoroljunk!
Metódusok létrehozása az ismétlődő feladatok végrehajtásához
Most, hogy azonosította az ismétlődő kódot, létrehozhat egy metódust, amely tartalmazza a kódot, és eltávolítja az ismétlődéseket. A metódusok használata további bónuszt jelent a kód lerövidítéséhez és az olvashatóság javításához! A foreach hurkok formázják és megjelenítik az időértékeket, így olyan nevet adhat a metódusnak, amely egyértelműen tükrözi ezt a feladatot. Ugyanezt megteheti az időpontokat módosító for hurokkal. Lássunk hozzá!
Adjon meg egy új üres kódsort az előző kód végén.
Az új üres kódsorban hozzon létre egy metódus-aláírást a következő kód beírásával:
void DisplayTimes() { }A metódus törzsének meghatározásához frissítse a
DisplayTimesmetódust úgy, hogy aforeachblokkot az alábbiakban bemásolja és beilleszti: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(); }Ebben a metódusban a
Console.WriteLinehívás hozzáadásával egy új sort fűzhet az időpontok megjelenítése után. Ezután létrehoz egy másik metódust, amely az időzóna-különbségnek megfelelően módosítja az időpontokat.Adjon meg egy új üres kódsort az előző kód végén.
Az új üres kódsorban hozzon létre egy metódus-aláírást a következő kód beírásával:
void AdjustTimes() { }Frissítse a
AdjustTimesmetódust az alábbiak szerint aforciklus másolásával és beillesztésével.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. lépés: A metódusok meghívása
Ebben a feladatban törli az ismétlődő kódblokkokat, és lecseréli őket a létrehozott metódusokra irányuló hívásokra.
Keresse meg az ismétlődő
foreachhurok első példányát a "Gyógyszeridők formázása és megjelenítése" megjegyzés alatt:Console.WriteLine("Current Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine(); Console.WriteLine("Enter new GMT");Cserélje le az azonosított kódot a
DisplayTimesmetódus hívásával. A csere a következő kódot eredményezi:Console.WriteLine("Current Medicine Schedule:"); DisplayTimes(); Console.WriteLine("Enter new GMT");Ezután lecseréli az ismétlődő kód második példányát.
Keresse meg a
foreachciklus második példányát a "Gyógyszeridők formázása és megjelenítése" megjegyzés alatt:Console.WriteLine("New Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine();Cserélje le az azonosított kódot a
DisplayTimesmetódus hívásával. A csere a következő kódot eredményezi:Console.WriteLine("New Medicine Schedule:"); DisplayTimes();Figyelje meg, hogy egy metódus használata egy nagy kódblokk helyett egyértelműbbé teszi a kódot, és könnyebben érthetőbbé teszi a kódot. Tegyük ugyanezt a
AdjustTimeslétrehozott metódussal is.Keresse meg a következő kódot a duplikált
for-hurkokkal: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; } }Cserélje le az ismétlődő kódpéldányokat az "Időpontokat módosítsa a különbség hozzáadásával" megjegyzés alatt úgy, hogy hívja meg a
AdjustTimesmetódust. A csere a következő kódot eredményezi: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(); }Most az összes duplikált kódot lecserélte az új metódus. Figyelje meg, hogy mennyi olvashatóbb és tömörebb a kód!
A munka ellenőrzése
Ebben a feladatban futtatja az alkalmazást az integrált terminálról, és ellenőrzi, hogy a kód megfelelően működik-e. Lássunk hozzá.
Hasonlítsa össze a kódot a következőkkel, hogy biztosan helyes legyen:
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; } }Mentse a munkáját a CtrlS + vagy a Visual Studio Code File menüvel.
Szükség esetén nyissa meg a Visual Studio Code integrált terminálpaneljét.
Az EXPLORER panelen nyissa meg a Terminált a TestProject mappa helyén, kattintson a jobb gombbal a TestProject elemre, majd válassza a Megnyitás az integrált terminálban lehetőséget.
A Terminál parancssorában adja meg a dotnet run parancsot.
A GMT-kérésekhez adja meg a -6 és a +6 értéket.
Ellenőrizze, hogy a kód a következő kimenetet hozza-e létre:
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:00Ha a kód eltérő eredményeket jelenít meg, a hiba megkereséséhez és a frissítések elvégzéséhez át kell tekintenie a kódot. Futtassa újra a kódot, és ellenőrizze, hogy kijavította-e a problémát. Folytassa a kód frissítését és futtatását, amíg a kód meg nem hozza a várt eredményeket.
Tesztelje tudását
Visszajelzés
Hasznosnak találta ezt az oldalt?
No
Segítségre van szüksége ezzel a témakörrel kapcsolatban?
Szeretné kipróbálni az Ask Learn használatát a témakör tisztázásához vagy áttekintéséhez?