Exercice - Créer des méthodes réutilisables
- 10 minutes
Au fur et à mesure que vous développez des applications, vous pouvez vous retrouver à écrire du code pour faire la même chose. Au lieu d’écrire du code en double, l’utilisation d’une méthode pour effectuer la même tâche raccourcit votre code et vous aide à développer des applications plus rapidement. Dans cet exercice, vous allez identifier le code répété et le remplacer par une méthode réutilisable. Commençons !
Identifier le code dupliqué
Dans cette tâche, vous allez examiner une application qui effectue le suivi des temps de médicaments entre différents fuseaux horaires. L’utilisateur entre son fuseau horaire actuel et son fuseau horaire de destination. Leur calendrier de médicaments est affiché, puis ajusté pour le nouveau fuseau horaire.
Dans l’éditeur de Visual Studio Code, supprimez tout code existant des exercices précédents.
Copiez et collez le code suivant dans 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();Notez qu’il existe plusieurs
forboucles -qui sont répétées avec du code identique.Il existe deux
foreachboucles qui formatent et affichent les temps de médecine. Il existe deuxforautres boucles qui ajustent les heures en fonction de la différence de fuseau horaire.Lorsque vous écrivez du code, vous pouvez vous retrouver à répéter des blocs de code pour effectuer la même tâche. C’est une occasion idéale de consolider votre code à l’aide d’une méthode pour effectuer la tâche à la place. Entraînons-nous.
Créer des méthodes pour effectuer les tâches répétées
Maintenant que vous avez identifié du code répété, vous pouvez créer une méthode pour contenir le code et supprimer les doublons. L’utilisation de méthodes offre l’avantage supplémentaire de raccourcir votre code et d’améliorer la lisibilité ! Le foreach format des boucles et affiche les valeurs de temps. Vous pouvez donc donner à la méthode un nom qui reflète clairement cette tâche. Vous pouvez faire de même avec la for boucle qui ajuste les heures. Commençons !
Entrez une nouvelle ligne de code vide à la fin du code précédent.
Sur la nouvelle ligne de code vide, créez une signature de méthode en entrant le code suivant :
void DisplayTimes() { }Pour définir le corps de la méthode, mettez à jour la
DisplayTimesméthode en copiant et en collant leforeachbloc comme suit :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(); }Dans cette méthode, vous incluez l’appel à
Console.WriteLinela fin pour ajouter une nouvelle ligne une fois les heures affichées. Ensuite, vous allez créer une autre méthode pour ajuster les heures en fonction de la différence de fuseau horaire.Entrez une nouvelle ligne de code vide à la fin du code précédent.
Sur la nouvelle ligne de code vide, créez une signature de méthode en entrant le code suivant :
void AdjustTimes() { }Mettez à jour la
AdjustTimesméthode en copiant et en collant laforboucle comme suit :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; } }
Étape 3 : Appeler les méthodes
Dans cette tâche, vous allez supprimer les blocs de code répétés et les remplacer par des appels aux méthodes que vous avez créées.
Recherchez la première instance de la boucle répétée
foreachsous le commentaire « Mettre en forme et afficher les heures de médecine » :Console.WriteLine("Current Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine(); Console.WriteLine("Enter new GMT");Remplacez le code que vous avez identifié par un appel à la
DisplayTimesméthode. Le remplacement doit entraîner le code suivant :Console.WriteLine("Current Medicine Schedule:"); DisplayTimes(); Console.WriteLine("Enter new GMT");Ensuite, vous allez remplacer la deuxième instance du code répété.
Recherchez la deuxième instance de la
foreachboucle sous le commentaire « Mettre en forme et afficher les heures de médecine » :Console.WriteLine("New Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine();Remplacez le code que vous avez identifié par un appel à la
DisplayTimesméthode. Le remplacement doit entraîner le code suivant :Console.WriteLine("New Medicine Schedule:"); DisplayTimes();Notez que l’utilisation d’une méthode à la place d’un grand bloc de code offre plus de clarté et facilite la compréhension du code. Nous allons faire de même avec la
AdjustTimesméthode que vous avez créée.Recherchez le code suivant avec les boucles -dupliquées
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; } }Remplacez les instances de code répété sous le commentaire « Ajuster les heures en ajoutant la différence » par des appels à votre
AdjustTimesméthode. Le remplacement doit entraîner le code suivant :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(); }Maintenant, tout le code dupliqué a été remplacé par votre nouvelle méthode. Notez à quel point votre code est plus lisible et concis !
Vérifier votre travail
Dans cette tâche, vous allez exécuter votre application à partir du Terminal intégré et vérifier que votre code fonctionne correctement. Commençons.
Comparez votre code au code suivant pour vous assurer qu’il est correct :
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; } }Enregistrez votre travail à l’aide de Ctrl + S ou du menu Fichier Visual Studio Code.
Si nécessaire, ouvrez le volet Terminal intégré de Visual Studio Code.
Dans le panneau EXPLORATEUR, pour ouvrir un Terminal à l’emplacement de votre dossier TestProject, cliquez avec le bouton droit sur TestProject, puis sélectionnez Ouvrir dans le Terminal intégré.
À l’invite de commandes du Terminal, entrez dotnet run.
Entrez -6 et +6 pour les invites GMT.
Vérifiez que votre code produit la sortie suivante :
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:00Si votre code affiche des résultats différents, vous devez le passer en revue afin de trouver votre erreur et d’effectuer des mises à jour. Réexécutez le code pour voir si vous avez résolu le problème. Poursuivez la mise à jour et l’exécution de votre code jusqu’à ce que votre code produise les résultats attendus.