Problèmes pratiques : principes de base de Kotlin

1. Avant de commencer

Maintenant que vous avez acquis des connaissances de base sur la programmation Kotlin, l'heure est venue de mettre en pratique ce que vous avez appris.

Ces exercices testeront votre compréhension des concepts que vous avez étudiés. Ils s'articulent autour de cas d'utilisation concrets, dont vous avez probablement déjà fait l'expérience.

Suivez les instructions pour trouver une solution à chaque problème. Si vous êtes bloqué, certains exercices incluent des conseils pour vous aider. Le code de solution est disponible à la fin, mais nous vous recommandons vivement de résoudre les exercices par vous-même avant de consulter les réponses.

Considérez les solutions comme un moyen, parmi tant d'autres, de résoudre les problèmes. N'hésitez pas à tester différentes approches. Vous pouvez résoudre certains exercices de différentes manières, en utilisant d'autres noms pour les fonctions et les variables.

Résolvez les problèmes à votre rythme. Les durées indiquées sont uniquement fournies à titre d'information. Vous n'êtes pas obligé de les respecter. Prenez le temps nécessaire pour résoudre chaque problème de manière réfléchie.

Nous vous recommandons d'utiliser Kotlin Playground pour mener à bien ces exercices.

Conditions préalables

Ce dont vous avez besoin

  • Un ordinateur avec accès à Internet et un navigateur Web

2. Imprimer des messages

Communiquez à vos amis ce que vous avez appris lors de ce parcours.

  • Pouvez-vous rédiger une fonction main() qui imprime ces messages sur quatre lignes distinctes ?
Use the val keyword when the value doesn't change.
Use the var keyword when the value can change.
When you define a function, you define the parameters that can be passed to it.
When you call a function, you pass arguments for the parameters.

3. Corriger les erreurs de compilation

Ce programme imprime un message pour avertir l'utilisateur qu'il a reçu un message de chat de la part d'un ami.

fun main() {
    println("New chat message from a friend'}
}
  1. Pouvez-vous déterminer la cause des erreurs de compilation dans ce programme et les corriger ?
  2. Le code utilise-t-il les symboles appropriés pour indiquer l'ouverture et la fermeture de la chaîne et de l'argument de la fonction ?

Indice : Kotlin Playground permet d'exécuter le code et d'afficher les erreurs de compilation.

Une fois les erreurs corrigées, le programme devrait se compiler sans erreur et imprimer la sortie suivante :

New chat message from a friend

4. Modèles de chaîne

Ce programme informe les utilisateurs sur une promotion à venir sur un article spécifique. Il comporte un modèle de chaîne qui repose sur la variable discountPercentage pour le pourcentage de remise et sur la variable item pour l'article en promotion. Toutefois, le code comporte des erreurs de compilation.

fun main() {
    val discountPercentage: Int = 0
    val offer: String = ""
    val item = "Google Chromecast"
    discountPercentage = 20
    offer = "Sale - Up to $discountPercentage% discount on $item! Hurry up!"

    println(offer)
}
  1. Pouvez-vous déterminer l'origine des erreurs et les corriger ?
  2. Pouvez-vous déterminer la sortie de ce programme avant d'exécuter le code dans Kotlin Playground ?

Indice : Pouvez-vous réattribuer une valeur à une variable en lecture seule ?

Une fois les erreurs corrigées, le programme devrait se compiler sans erreur et imprimer la sortie suivante :

Sale - Up to 20% discount on Google Chromecast! Hurry up!

5. Concaténation de chaînes

Ce programme affiche le nombre total de personnes présents à la fête. Des adultes et des enfants y participent. La variable numberOfAdults indique le nombre d'adultes à la fête, tandis que la variable numberOfKids spécifie le nombre d'enfants.

fun main() {
    val numberOfAdults = "20"
    val numberOfKids = "30"
    val total = numberOfAdults + numberOfKids
    println("The total party size is: $total")
}

Étape 1

  • Pouvez-vous déterminer la sortie de ce programme avant d'exécuter le code dans Kotlin Playground ?

Après avoir déterminé la sortie, exécutez le code dans Kotlin Playground, puis vérifiez si elle correspond à la sortie affichée.

Indice : Que se passe-t-il lorsque vous utilisez l'opérateur + au niveau de deux chaînes ?

Étape 2

Le code fonctionne et génère une sortie, mais le nombre total de participants à la fête n'y est pas indiqué.

  • Pouvez-vous identifier le problème dans le code et le résoudre pour qu'il imprime cette sortie ?
The total party size is: 50

6. Mise en forme du message

Ce programme affiche le salaire total qu'un employé recevra ce mois-ci. Le salaire total est divisé en deux parties : la variable baseSalary, que l'employé reçoit tous les mois, et la variable bonusAmount, qui constitue une prime supplémentaire qui lui est accordée.

fun main() {
    val baseSalary = 5000
    val bonusAmount = 1000
    val totalSalary = "$baseSalary + $bonusAmount"
    println("Congratulations for your bonus! You will receive a total of $totalSalary (additional bonus).")
}
  1. Pouvez-vous déterminer la sortie de ce code avant de l'exécuter dans Kotlin Playground ?
  2. Lorsque vous exécutez le code dans Kotlin Playground, obtenez-vous la sortie attendue ?

7. Implémenter des opérations mathématiques de base

Dans cet exercice, vous allez écrire un programme qui effectue des opérations mathématiques de base et qui imprime la sortie.

Étape 1

Cette fonction main() contient une erreur de compilation :

fun main() {
    val firstNumber = 10
    val secondNumber = 5

    println("$firstNumber + $secondNumber = $result")
}
  • Pouvez-vous corriger l'erreur afin que le programme imprime cette sortie ?
10 + 5 = 15

Étape 2

Le code fonctionne, mais la logique d'ajout de deux nombres se trouve dans la variable de résultat, ce qui rend la réutilisation de votre code moins flexible. À la place, vous pouvez extraire l'opération d'addition dans une fonction add() afin que le code soit réutilisable. Pour ce faire, mettez à jour votre code avec celui indiqué ci-dessous. Notez que le code introduit désormais un nouvel élément val appelé thirdNumber et imprime le résultat de cette nouvelle variable avec firstNumber.

fun main() {
    val firstNumber = 10
    val secondNumber = 5
    val thirdNumber = 8

    val result = add(firstNumber, secondNumber)
    val anotherResult = add(firstNumber, thirdNumber)

    println("$firstNumber + $secondNumber = $result")
    println("$firstNumber + $thirdNumber = $anotherResult")
}

// Define add() function below this line
  • Pouvez-vous définir la fonction add() pour que le programme imprime cette sortie ?
10 + 5 = 15
10 + 8 = 18

Étape 3

Vous disposez maintenant d'une fonction réutilisable permettant d'ajouter deux nombres.

  • Pouvez-vous implémenter la fonction subtract() de la même manière que vous avez implémenté la fonction add() ? Modifiez également la fonction main() pour utiliser la fonction subtract() afin de vérifier qu'elle fonctionne comme prévu.

Indice : Réfléchissez à la différence entre les additions, les soustractions et les autres opérations mathématiques. Commencez ensuite à travailler sur le code de la solution.

8. Paramètres par défaut

Gmail dispose d'une fonctionnalité qui envoie une notification à l'utilisateur lorsqu'une tentative de connexion est effectuée sur un nouvel appareil.

Dans cet exercice, vous écrirez un programme qui présente un message aux utilisateurs avec le modèle suivant :

There's a new sign-in request on operatingSystem for your Google Account emailId.

Vous devez implémenter une fonction qui accepte un paramètre operatingSystem et un paramètre emailId, puis construit et renvoie le message dans le format demandé.

Par exemple, si la fonction a été appelée avec Chrome OS comme operatingSystem et sample@gmail.com comme emailId, elle devrait renvoyer la chaîne suivante :

There's a new sign-in request on Chrome OS for your Google Account sample@gmail.com.

Étape 1

  1. Pouvez-vous implémenter la fonction displayAlertMessage() dans ce programme afin qu'elle imprime la sortie affichée ?
fun main() {
    val operatingSystem = "Chrome OS"
    val emailId = "sample@gmail.com"

    println(displayAlertMessage(operatingSystem, emailId))
}

// Define your displayAlertMessage() below this line.
  1. Votre programme imprime-t-il cette sortie ?
There's a new sign-in request on Chrome OS for your Google Account sample@gmail.com.

Étape 2

Bravo ! Vous avez affiché le message. Toutefois, il peut arriver que vous ne parveniez pas à déterminer le système d'exploitation de l'utilisateur. Dans ce cas, vous devez spécifier le nom du système d'exploitation comme Unknown OS. Vous pouvez optimiser encore le code afin de ne pas avoir à transmettre l'argument Unknown OS à chaque appel de la fonction.

  1. Pouvez-vous optimiser le code avec ces informations afin qu'il imprime cette sortie ?
There's a new sign-in request on Unknown OS for your Google Account user_one@gmail.com.

There's a new sign-in request on Windows for your Google Account user_two@gmail.com.

There's a new sign-in request on Mac OS for your Google Account user_three@gmail.com.
  1. Pour imprimer le message ci-dessus, remplacez l'implémentation de la fonction main() par celle-ci :
fun main() {
    val firstUserEmailId = "user_one@gmail.com"

    // The following line of code assumes that you named your parameter as emailId.
    // If you named it differently, feel free to update the name.
    println(displayAlertMessage(emailId = firstUserEmailId))
    println()

    val secondUserOperatingSystem = "Windows"
    val secondUserEmailId = "user_two@gmail.com"

    println(displayAlertMessage(secondUserOperatingSystem, secondUserEmailId))
    println()

    val thirdUserOperatingSystem = "Mac OS"
    val thirdUserEmailId = "user_three@gmail.com"

    println(displayAlertMessage(thirdUserOperatingSystem, thirdUserEmailId))
    println()
}

9. Podomètre

Le podomètre est un appareil électronique qui comptabilise le nombre de pas que vous faites. Aujourd'hui, la plupart des téléphones mobiles, montres connectées et équipements de fitness sont équipés de podomètres. L'application de santé et de remise en forme utilise des podomètres intégrés pour calculer le nombre de pas effectués. Cette fonction calcule le nombre de calories brûlées en fonction du nombre de pas de l'utilisateur.

  • Pouvez-vous renommer les fonctions, les paramètres de fonction et les variables de ce programme en suivant les bonnes pratiques ?
fun main() {
    val Steps = 4000
    val caloriesBurned = PEDOMETERstepsTOcalories(Steps);
    println("Walking $Steps steps burns $caloriesBurned calories")
}

fun PEDOMETERstepsTOcalories(NumberOFStepS: Int): Double {
    val CaloriesBURNEDforEachStep = 0.04
    val TotalCALORIESburned = NumberOFStepS * CaloriesBURNEDforEachStep
    return TotalCALORIESburned
}

10. Comparer deux nombres

Les téléphones mobiles modernes disposent d'une fonctionnalité intégrée qui suit le temps d'utilisation, à savoir le temps que vous passez chaque jour sur votre appareil.

Dans cet exercice, vous implémenterez une fonction qui compare le temps que vous avez passé sur votre téléphone aujourd'hui par rapport au temps passé hier. Cette fonction accepte deux paramètres entiers et renvoie une valeur booléenne.

Le premier paramètre indique le nombre de minutes que vous avez passées sur votre téléphone aujourd'hui, et le second paramètre le nombre de minutes que vous avez passées sur votre téléphone hier. Cette fonction renvoie une valeur true si vous avez passé plus de temps sur le téléphone aujourd'hui qu'hier. Dans le cas contraire, elle renvoie une valeur false.

Par exemple, si vous avez appelé la fonction avec ces arguments nommés :

  • timeSpentToday = 300 et timeSpentYesterday = 250, la fonction renvoie une valeur true.
  • timeSpentToday = 300 et timeSpentYesterday = 300, la fonction renvoie une valeur false.
  • timeSpentToday = 200 et timeSpentYesterday = 220, la fonction renvoie une valeur false.

Indice : L'opérateur de comparaison > renvoie une valeur true si la valeur située avant l'opérateur est supérieure à la valeur qui la suit. Dans le cas contraire, il renvoie une valeur false.

11. Transférer le code en double dans une fonction

Ce programme affiche la météo de différentes villes. Il indique le nom de la ville, les températures maximale et minimale du jour, ainsi que le risque de pluie.

fun main() {
    println("City: Ankara")
    println("Low temperature: 27, High temperature: 31")
    println("Chance of rain: 82%")
    println()

    println("City: Tokyo")
    println("Low temperature: 32, High temperature: 36")
    println("Chance of rain: 10%")
    println()

    println("City: Cape Town")
    println("Low temperature: 59, High temperature: 64")
    println("Chance of rain: 2%")
    println()

    println("City: Guatemala City")
    println("Low temperature: 50, High temperature: 55")
    println("Chance of rain: 7%")
    println()
}

Le code qui imprime la météo de chaque ville présente de nombreuses similitudes. Par exemple, certaines expressions sont répétées plusieurs fois, comme "City:" et "Low temperature:". L'utilisation répétée de code similaire fait courir le risque d'erreurs dans votre programme. Il se peut que l'une des villes que vous avez indiquées soit mal orthographiée ou que vous ayez oublié une information météorologique importante.

  1. Pouvez-vous créer une fonction qui imprime les détails météorologiques d'une seule ville afin de limiter les répétitions dans la fonction main(), puis faire de même pour les villes restantes ?
  2. Pouvez-vous mettre à jour la fonction main() afin d'appeler la fonction que vous avez créée pour chaque ville et transmettre les informations météorologiques appropriées en tant qu'arguments ?

12. Code de solution

La solution utilise la fonction println() pour imprimer les messages sur chaque ligne.

fun main() {
    println("Use the val keyword when the value doesn't change.")
    println("Use the var keyword when the value can change.")
    println("When you define a function, you define the parameters that can be passed to it.")
    println("When you call a function, you pass arguments for the parameters.")
}

Corriger les erreurs de compilation

Le code contenait deux erreurs de compilation :

  1. La chaîne doit se terminer par un guillemet double et non par un guillemet simple.
  2. L'argument de la fonction doit se terminer par une parenthèse plutôt que par une accolade.
fun main() {
    println("New chat message from a friend")
}

Modèles de chaîne

Les erreurs de compilation résultent de l'attribution des variables discountPercentage et offer en lecture seule aux nouvelles valeurs. Cette attribution n'est pas autorisée.

fun main() {
    val discountPercentage = 20
    val item = "Google Chromecast"
    val offer = "Sale  - Up to $discountPercentage% discount off $item! Hurry Up!"

    println(offer)
}

Comme alternative, vous pouvez déclarer l'entier discountPercentage et la chaîne offer avec le mot clé var. Toutefois, leurs valeurs étant immuables dans le contexte du programme, vous pouvez conserver le mot clé val.

Concaténation de chaînes

Étape 1

Le programme imprime cette sortie :

The total party size is: 2030

C'était une question piège. Lorsque l'opérateur + est utilisé sur des valeurs String, il génère une chaîne concaténée. Les entiers sont entourés de guillemets doubles. Ils sont donc traités comme des chaînes et non comme des entiers, ce qui génère la sortie 2030.

Étape 2

Vous pouvez supprimer les guillemets doubles autour des variables numberOfAdults et numberOfKids pour les convertir en variables Int.

fun main() {
    val numberOfAdults = 20
    val numberOfKids = 30
    val total = numberOfAdults + numberOfKids
    println("The total party size is: $total")
}

N'oubliez pas que le compilateur Kotlin peut déduire le type de variables en fonction des valeurs qui leur sont attribuées. Dans ce cas, le compilateur déduit que les variables numberOfAdults et numberOfKids sont de type Int.

Mise en forme du message

Le programme imprime cette sortie :

Congratulations for your bonus! You will receive a total of 5000 + 1000 (additional bonus).

"$baseSalary + $bonusAmount" utilise la syntaxe des expressions du modèle. Dans les expressions du modèle, le code est d'abord évalué, puis le résultat est concaténé dans une chaîne.

Dans la question, la variable $baseSalary est évaluée sur une valeur 5000 et la variable $bonusAmount sur une valeur 1000. Le résultat est ensuite concaténé pour produire "5000 + 1000" et attribué à la variable result.

Implémenter des opérations mathématiques de base

Étape 1

Définissez une variable result immuable avec le mot clé val, puis attribuez-lui le résultat de l'opération d'addition :

fun main() {
    val firstNumber = 10
    val secondNumber = 5

    val result = firstNumber + secondNumber
    println("$firstNumber + $secondNumber = $result")
}

Étape 2

  1. Créez une fonction add() qui accepte les paramètres firstNumber et secondNumber, tous les deux de type Int, et qui renvoie une valeur Int.
  2. Saisissez le code de l'opération d'addition dans le corps de la fonction add(), puis utilisez le mot clé return pour renvoyer le résultat de l'opération.
fun add(firstNumber: Int, secondNumber: Int): Int {
    return firstNumber + secondNumber
}

Étape 3

  1. Définissez une fonction subtract() qui accepte les paramètres firstNumber et secondNumber, tous les deux de type Int, et qui renvoie une valeur Int.
  2. Saisissez le code de l'opération de soustraction dans le corps de la fonction subtract(), puis utilisez le mot clé return pour renvoyer le résultat de l'opération.
fun subtract(firstNumber: Int, secondNumber: Int): Int {
    return firstNumber - secondNumber
}
  1. Modifiez la fonction main() pour utiliser la nouvelle fonction subtract(). Voici un exemple de solution :
fun main() {
    val firstNumber = 10
    val secondNumber = 5
    val thirdNumber = 8

    val result = add(firstNumber, secondNumber)
    val anotherResult = subtract(firstNumber, thirdNumber)

    println("$firstNumber + $secondNumber = $result")
    println("$firstNumber - $thirdNumber = $anotherResult")
}

fun add(firstNumber: Int, secondNumber: Int): Int {
    return firstNumber + secondNumber
}

fun subtract(firstNumber: Int, secondNumber: Int): Int {
    return firstNumber - secondNumber
}

Paramètres par défaut

Étape 1

  1. Créez une fonction displayAlertMessage() qui accepte les paramètres operatingSystem et emailId, tous les deux de type String, et qui renvoie une valeur String.
  2. Dans le corps de la fonction, utilisez une expression du modèle pour mettre à jour le message et le renvoyer.
fun displayAlertMessage(operatingSystem: String, emailId: String): String {
    return "There is a new sign-in request on $operatingSystem for your Google Account $emailId."
}

Étape 2

  • Attribuez une valeur "Unknown OS" au paramètre operatingSystem.
fun displayAlertMessage(
    operatingSystem: String = "Unknown OS",
    emailId: String
): String {
    return "There is a new sign-in request on $operatingSystem for your Google Account $emailId."
}

Podomètre

Les noms de fonctions et de variables doivent respecter la convention Camel Case ("casse de chameau").

Si les noms contiennent plusieurs mots, la première lettre du premier mot doit être en minuscule, et la première lettre des mots suivants doit être en majuscule. Supprimez les espaces entre les mots.

Voici quelques exemples de noms de fonctions :

  • calculateTip
  • displayMessage
  • takePhoto

Voici quelques exemples de noms de variables :

  • numberOfEmails
  • cityName
  • bookPublicationDate

Pour en savoir plus sur les noms, consultez la section Règles de dénomination.

Évitez d'utiliser un mot clé Kotlin comme nom de fonction, car ces mots ont déjà une signification spécifique en langage Kotlin.

Le code de votre solution devrait se présenter comme suit :

fun main() {
    val steps = 4000
    val caloriesBurned = pedometerStepsToCalories(steps);
    println("Walking $steps steps burns $caloriesBurned calories")
}

fun pedometerStepsToCalories(numberOfSteps: Int): Double {
    val caloriesBurnedForEachStep = 0.04
    val totalCaloriesBurned = numberOfSteps * caloriesBurnedForEachStep
    return totalCaloriesBurned
}

Comparer deux nombres

  • Créez une fonction compareTime() qui accepte les paramètres timeSpentToday et timeSpentYesterday, tous les deux de type Int, et qui renvoie une valeur Boolean.

La solution repose sur l'opérateur de comparaison >. L'opérateur prend une valeur Boolean. Dès lors, la fonction compareTime() renvoie simplement le résultat timeSpentToday > timeSpentYesterday.

Par exemple, si vous transmettez un argument 300 au paramètre timeSpentToday et un argument 250 au paramètre timeSpentYesterday, le corps de la fonction prend la valeur 300 > 250, qui renvoie la valeur true, car 300 est supérieur à 250.

fun main() {
    println("Have I spent more time using my phone today: ${compareTime(300, 250)}")
    println("Have I spent more time using my phone today: ${compareTime(300, 300)}")
    println("Have I spent more time using my phone today: ${compareTime(200, 220)}")
}

fun compareTime(timeSpentToday: Int, timeSpentYesterday: Int): Boolean {
    return timeSpentToday > timeSpentYesterday
}
Have I spent more time using my phone today: true
Have I spent more time using my phone today: false
Have I spent more time using my phone today: false

Transférer le code en double dans une fonction

  1. Créez une fonction qui imprime les informations météorologiques de la ville d'Ankara après la fonction main().

Vous pouvez utiliser printWeatherForCity() ou un nom similaire pour le nom de la fonction.

  1. Appelez la fonction depuis la fonction main().

Le programme devrait imprimer les informations météorologiques pour Ankara.

fun main() {
    printWeatherForCity()
}

fun printWeatherForCity() {
    println("City: Ankara")
    println("Low temperature: 27, High temperature: 31")
    println("Chance of rain: 82%")
    println()
}

Vous pouvez désormais créer une autre fonction, plus flexible, permettant d'imprimer des informations météorologiques pour d'autres villes.

  1. Remplacez les parties des instructions println() spécifiques à Ankara par des variables.

N'oubliez pas d'utiliser la convention Camel Case ("casse de chameau") pour les noms de variables, et le symbole $ avant la variable pour que sa valeur soit utilisée à la place de son nom. Ce sont des modèles de chaîne que vous avez découverts dans un atelier de programmation précédent.

fun printWeatherForCity() {
    println("City: $cityName")
    println("Low temperature: $lowTemp, High temperature: $highTemp")
    println("Chance of rain: $chanceOfRain%")
    println()
}
  1. Modifiez la définition de la fonction pour que ces variables soient des paramètres qui doivent être transmis à la fonction lorsqu'elle est appelée, et spécifiez le type de données de chaque paramètre.

Le paramètre cityName est de type String, tandis que les paramètres lowTemp, highTemp et chanceOfRain sont de type Int.

Aucune valeur return n'est nécessaire dans la définition de la fonction, car les messages sont imprimés dans la sortie.

fun printWeatherForCity(cityName: String, lowTemp: Int, highTemp: Int, chanceOfRain: Int) {
    println("City: $cityName")
    println("Low temperature: $lowTemp, High temperature: $highTemp")
    println("Chance of rain: $chanceOfRain%")
    println()
}
  1. Mettez à jour la fonction main() pour appeler la fonction printWeatherForCity() et transmettre les informations météorologiques d'Ankara.

Le nom de la ville est "Ankara", la température minimale est de 27, la température maximale est de 31 et le risque de pluie est de 82.

fun main() {
    printWeatherForCity("Ankara", 27, 31, 82)
}

fun printWeatherForCity(cityName: String, lowTemp: Int, highTemp: Int, chanceOfRain: Int) {
    println("City: $cityName")
    println("Low temperature: $lowTemp, High temperature: $highTemp")
    println("Chance of rain: $chanceOfRain%")
    println()
}
  1. Exécutez le programme pour vérifier que la sortie affiche les informations météo pour Ankara.
  2. Appelez la fonction printWeatherForCity() avec les informations météorologiques pour les autres villes.
fun main() {
    printWeatherForCity("Ankara", 27, 31, 82)
    printWeatherForCity("Tokyo", 32, 36, 10)
    printWeatherForCity("Cape Town", 59, 64, 2)
    printWeatherForCity("Guatemala City", 50, 55, 7)
}

fun printWeatherForCity(cityName: String, lowTemp: Int, highTemp: Int, chanceOfRain: Int) {
    println("City: $cityName")
    println("Low temperature: $lowTemp, High temperature: $highTemp")
    println("Chance of rain: $chanceOfRain%")
    println()
}
  1. Exécutez le programme.

La sortie devrait être identique à celle du programme d'origine, mais à présent, le code est plus concis et ne contient plus de répétitions inutiles. Tout le code permettant d'imprimer les informations météorologiques d'une ville est centralisé dans la fonction printWeatherForCity(). Si vous souhaitez modifier la façon dont les informations météo s'affichent, vous pouvez les modifier à un seul et même endroit, et elles s'appliqueront à toutes les villes.

13. Pratique supplémentaire

Pour vous entraîner davantage en langage Kotlin, consultez le cours sur les bases du langage Kotlin, proposé par JetBrains Academy. Consultez la fiche info afin d'accéder à la liste des sujets abordés dans ce cours et de choisir celui qui vous intéresse.