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
- Vous maîtrisez Kotlin Playground.
- Vous êtes capable de définir et d'appeler des fonctions.
- Vous connaissez les types de données Kotlin.
- Vous connaissez les variables immuables et modifiables.
- Vous connaissez la fonction
println()
. - Vous avez suivi les ateliers de programmation Votre premier programme en Kotlin, Créer et utiliser des variables en Kotlin et Créer et utiliser des fonctions en Kotlin.
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'}
}
- Pouvez-vous déterminer la cause des erreurs de compilation dans ce programme et les corriger ?
- 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)
}
- Pouvez-vous déterminer l'origine des erreurs et les corriger ?
- 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).")
}
- Pouvez-vous déterminer la sortie de ce code avant de l'exécuter dans Kotlin Playground ?
- 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 fonctionadd()
? Modifiez également la fonctionmain()
pour utiliser la fonctionsubtract()
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
- 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.
- 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.
- 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.
- 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
ettimeSpentYesterday = 250
, la fonction renvoie une valeurtrue
.timeSpentToday = 300
ettimeSpentYesterday = 300
, la fonction renvoie une valeurfalse
.timeSpentToday = 200
ettimeSpentYesterday = 220
, la fonction renvoie une valeurfalse
.
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.
- 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 ? - 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
Imprimer des messages
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 :
- La chaîne doit se terminer par un guillemet double et non par un guillemet simple.
- 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
- Créez une fonction
add()
qui accepte les paramètresfirstNumber
etsecondNumber
, tous les deux de typeInt
, et qui renvoie une valeurInt
. - 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
- Définissez une fonction
subtract()
qui accepte les paramètresfirstNumber
etsecondNumber
, tous les deux de typeInt
, et qui renvoie une valeurInt
. - 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
}
- Modifiez la fonction
main()
pour utiliser la nouvelle fonctionsubtract()
. 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
- Créez une fonction
displayAlertMessage()
qui accepte les paramètresoperatingSystem
etemailId
, tous les deux de typeString
, et qui renvoie une valeurString
. - 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ètreoperatingSystem
.
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ètrestimeSpentToday
ettimeSpentYesterday
, tous les deux de typeInt
, et qui renvoie une valeurBoolean
.
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
- 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.
- 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.
- 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()
}
- 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()
}
- Mettez à jour la fonction
main()
pour appeler la fonctionprintWeatherForCity()
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()
}
- Exécutez le programme pour vérifier que la sortie affiche les informations météo pour Ankara.
- 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()
}
- 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.