1. Introduction
Dans cet atelier de programmation, vous créerez un petit programme Kotlin qui affichera un message d'anniversaire avec l'image d'un gâteau et une bannière.
Conditions préalables
- Vous savez ouvrir et modifier le code dans https://developer.android.com/training/kotlinplayground, un outil de programmation Kotlin basé sur un navigateur.
- Vous connaissez le programme
"Hello world!"
tiré de l'atelier de programmation Écrire votre premier programme en Kotlin. - Vous savez comment utiliser
println()
pour écrire du texte dans la console de l'éditeur de code Kotlin en ligne.
Objectifs de l'atelier
- Imprimer un texte plus complexe depuis votre programme
- Effectuer des calculs mathématiques de base en Kotlin et stocker les résultats dans des variables pour une utilisation ultérieure
- Créer une fonction permettant d'imprimer plusieurs fois la même chaîne
- Créer une boucle qui imprime un extrait de texte plusieurs fois
Ce que vous allez créer
- Vous créerez un petit programme que vous pourrez utiliser pour imprimer des messages d'anniversaire, une image de gâteau avec du texte et une bannière.
Ce dont vous avez besoin
- Un ordinateur avec accès à Internet et un navigateur Web récent, tel que la dernière version de Chrome
2. Créer un message d'anniversaire en Kotlin
Configurer votre code de démarrage
- Dans le navigateur, accédez à https://developer.android.com/training/kotlinplayground. Un outil de programmation Kotlin basé sur le navigateur s'ouvre.
- Dans la fonction
fun main()
, remplacez le texte"Hello, world!"
par"Happy Birthday, Rover!"
. - En dessous, toujours entre les accolades, ajoutez deux lignes supplémentaires :
"You are already 5!"
et"5 is the very best age to celebrate!".
.
Le code final devrait se présenter comme suit :
fun main() {
println("Happy Birthday, Rover!")
println("You are already 5!")
println("5 is the very best age to celebrate!")
}
- Exécutez votre code.
- Vérifiez que le volet de sortie affiche Happy Birthday, Rover! (Joyeux anniversaire, Rover !) et, en dessous, You are already 5! (Tu as déjà 5 ans !) et 5 is the very best age to celebrate (Il n'y a pas de meilleur âge que 5 ans âge pour fêter son anniversaire).
Happy Birthday, Rover! You are already 5! 5 is the very best age to celebrate!
Ajouter un gâteau d'anniversaire
Vous devez associer une image au message d'anniversaire (un gâteau, par exemple). Pour ce faire, imprimez des lignes supplémentaires qui utilisent les lettres et les symboles de vos claviers et println()
.
Continuez à partir du code de solution ci-dessus.
- Dans le code, entre les deux instructions
println()
pourHappy Birthday
etYou are already 5
, ajoutez les lignes d'instructions d'impression suivantes, comme indiqué ci-dessous. Celles-ci créeront un gâteau. La dernière instructionprintln()
n'a pas de texte entre guillemets, ce qui affichera une ligne vide.
println(" ,,,,, ")
println(" ||||| ")
println(" =========")
println("@@@@@@@@@@@")
println("{~@~@~@~@~}")
println("@@@@@@@@@@@")
println("")
Pour aider les autres utilisateurs à comprendre le code, vous pouvez ajouter un commentaire avant d'imprimer le gâteau. Si vous exécutez le code, le résultat ne changera pas d'apparence, car les commentaires sont spécifiquement destinés à vous-même et aux autres développeurs, pas au système. Un commentaire intégré commence par //
, suivi du texte souhaité, comme indiqué ci-dessous.
// This is a comment line
// This is another comment
- Ajoutez un commentaire avant d'imprimer le gâteau :
// Let's print a cake!
. - Ajoutez un commentaire avant d'imprimer la ligne suivante :
// This prints an empty line
.
Le code devrait ressembler à l'exemple ci-dessous.
fun main() {
println("Happy Birthday, Rover!")
// Let's print a cake!
println(" ,,,,, ")
println(" ||||| ")
println(" =========")
println("@@@@@@@@@@@")
println("{~@~@~@~@~}")
println("@@@@@@@@@@@")
// This prints an empty line.
println("")
println("You are already 5!")
println("5 is the very best age to celebrate!")
}
- Exécutez le code pour générer la sortie ci-dessous.
Happy Birthday, Rover! ,,,,, ||||| ========= @@@@@@@@@@@ {~@~@~@~@~} @@@@@@@@@@@ You are already 5! 5 is the very best age to celebrate!
3. Créer et utiliser des variables
Stocker l'âge de Rover dans une variable
- Dans le code final, notez que vous répétez le même âge deux fois.
Au lieu de répéter ce nombre, vous pouvez le stocker à un seul et même endroit, en tant que variable. Cela revient à saisir un nombre dans un champ et à lui attribuer un nom. Vous pouvez ensuite utiliser le nom de cette variable à tout moment. Si l'âge change, il vous suffit de modifier le programme à un seul endroit. En modifiant la variable d'âge, la valeur correcte correspondant apparaîtra partout où elle est utilisée.
- Dans le programme, en tant que première ligne de code dans la fonction
main()
, ajoutez le code suivant pour créer une variable appeléeage
, avec la valeur 5, comme indiqué ci-dessous. Notez que vous devez placer cette ligne avant les instructionsprintln()
.
val age = 5
Voici la signification de cette ligne :
val
est un mot spécial utilisé par Kotlin, appelé mot clé. Il indique que le nom qui suit est le nom d'une variable.age
est le nom de la variable.- Avec
=
, la valeurage
(à gauche) est identique à la valeur de droite. En mathématiques, un signe égal est utilisé pour confirmer que les valeurs de chaque côté sont identiques. En revanche, en langage Kotlin, le signe égal est utilisé pour attribuer la valeur de droite à la variable nommée à gauche.
Pour un développeur, cela signifie que cette ligne déclare une variable nommée age
associée à la valeur 5
.
Pour utiliser une variable dans une instruction d'impression, vous devez l'entourer de symboles qui indiquent au système que les éléments ajoutés ne correspondent pas à du texte, mais à une variable. Au lieu d'imprimer le texte, le système doit imprimer la valeur de la variable. Pour ce faire, placez la variable entre accolades, précédées du symbole dollar, comme dans l'exemple ci-dessous.
${variable}
- Dans le code, remplacez le chiffre 5 dans les deux instructions d'impression par la variable
age
, comme indiqué ci-dessous.
println("You are already ${age}!")
println("${age} is the very best age to celebrate!")
- Exécutez le code. Les deux messages devraient afficher le même âge.
- Remplacez la valeur de la variable par une autre valeur. Par exemple, vous pouvez indiquer l'âge de Rover en jours plutôt qu'en années. Pour ce faire, multipliez l'âge par 365, en omettant les années bissextiles. Vous pouvez effectuer ce calcul directement lorsque vous créez la variable, comme indiqué ci-dessous.
val age = 5 * 365
- Exécutez à nouveau le code, et notez que les deux messages indiquent désormais l'âge en jours.
Happy Birthday, Rover! ,,,,, ||||| ========= @@@@@@@@@@@ {~@~@~@~@~} @@@@@@@@@@@ You are already 1825! 1825 is the very best age to celebrate!
- [Facultatif] Modifiez le texte des messages imprimés pour qu'il soit davantage adapté à l'anniversaire indiqué en jours. Par exemple, écrivez :
You are already 1825 days old! 1825 days old is the very best age to celebrate!
Insérer du texte dans une variable
Vous pouvez non seulement insérer des nombres dans des variables, mais aussi du texte.
- Sous la variable
age
, ajoutez une autre variable appeléename
pour spécifier le nom de la personne qui fête son anniversaire, puis définissez sa valeur sur"Rover"
.
val name = "Rover"
- Remplacez le nom
Rover
dans le message d'anniversaire par la variable, comme indiqué ci-dessous.
println("Happy Birthday, ${name}!")
Vous pouvez aussi inclure plusieurs variables dans une instruction d'impression.
- Ajoutez
Rover
au message concernant l'âge, à l'aide de la variablename
, comme indiqué ci-dessous.
println("You are already ${age} days old, ${name}!")
Le code final devrait ressembler à ce qui suit.
fun main() {
val age = 5 * 365
val name = "Rover"
println("Happy Birthday, ${name}!")
// Let's print a cake!
println(" ,,,,, ")
println(" ||||| ")
println(" =========")
println("@@@@@@@@@@@")
println("{~@~@~@~@~}")
println("@@@@@@@@@@@")
// This prints an empty line.
println("")
println("You are already ${age} days old, ${name}!")
println("${age} days old is the very best age to celebrate!")
}
Félicitations ! Vous pouvez désormais créer des messages contenant du texte et des images à partir de symboles, et utiliser des variables pour stocker des chiffres et du texte ou pour imprimer du texte.
4. Imprimer une bannière d'anniversaire avec une bordure
Au cours cette tâche, vous créerez une bannière d'anniversaire, puis découvrirez comment simplifier ce code à l'aide de techniques de répétition et de réutilisation du code. Vous verrez également pourquoi cette approche est conseillée.
Créer une bannière d'anniversaire de départ
- Dans https://developer.android.com/training/kotlinplayground, placez le curseur à un endroit quelconque dans le code.
- Effectuez un clic droit pour ouvrir le menu, puis choisissez Tout sélectionner.
- Appuyez sur la touche Retour arrière ou Suppr pour supprimer tout le code.
- Copiez et collez le code ci-dessous dans l'éditeur.
fun main() {
println("=======================")
println("Happy Birthday, Jhansi!")
println("=======================")
}
- Exécutez le programme pour afficher une bannière imprimée dans la console.
======================= Happy Birthday, Jhansi! =======================
Créer une fonction pour imprimer la bordure
Le code que vous venez de coller et d'exécuter est une fonction appelée main()
qui contient trois instructions d'impression. Lorsque vous appuyez sur le bouton Exécuter, le système exécute cette fonction et tout le code qu'elle contient.
Un programme Kotlin doit toujours avoir une fonction main()
. En outre, vous pouvez créer et utiliser vos propres fonctions. Tout comme les variables vous permettent d'éviter de dupliquer des tâches, les fonctions évitent d'avoir à écrire le même code plusieurs fois. Dans le code, les instructions d'impression pour le haut et le bas de la bannière sont exactement les mêmes. Nous allons donc créer et utiliser une fonction pour imprimer ces bordures.
- Dans l'éditeur, sous la fonction
main()
, insérez une ligne vide juste pour avoir plus de place pour travailler. Le système ignore les lignes vides. Vous pouvez donc en insérer comme bon vous semble pour organiser votre code. - Créez une fonction. Commencez par le mot clé
fun
, suivi d'un nom,printBorder
, de parenthèses()
et d'accolades{}
, comme indiqué ci-dessous.
fun printBorder() {}
Remarque concernant l'attribution de noms aux fonctions :
- Notez que le nom de la fonction
printBorder
commence par une lettre minuscule et un verbe. Les noms de fonction commencent presque toujours par une lettre minuscule et un verbe, et doivent décrire ce que fait la fonction (par exemple,print()
ouprintBorder()
ici). - Notez également que le deuxième mot au sein du nom de la fonction commence par une majuscule. Ce style, appelé "casse mixte", facilite la lisibilité des noms. Voici d'autres exemples de noms :
drawReallyCoolFancyBorder
etprintBirthdayMessage
.
- Placez l'accolade de fermeture
}
de la fonctionprintBorder
sur une nouvelle ligne et insérez une ligne vide entre les deux accolades afin de vous laisser de la place pour ajouter du code. Il est plus facile de déterminer où se termine la fonction lorsque l'accolade de fermeture}
a sa propre ligne. - Dans la fonction
main()
, copiez l'instruction d'impression de la bordure et collez-la entre les accolades de la fonctionprintBorder()
.
Votre fonction printBorder()
terminée devrait se présenter comme suit.
fun printBorder() {
println("=======================")
}
Pour utiliser ou appeler une fonction, indiquez son nom entre parenthèses. Il s'agit de l'approche que vous avez adoptée avec println()
. Pour utiliser la fonction printBorder
, appelez printBorder()
là où vous avez besoin dans le code.
- Dans la fonction
main()
, remplacez les lignes de code qui impriment une ligne de bordure à l'aide deprintln()
par des appels à la fonctionprintBorder()
. Le code final devrait se présenter comme suit :
fun main() {
printBorder()
println("Happy Birthday, Jhansi!")
printBorder()
}
fun printBorder() {
println("=======================")
}
- Exécutez le code pour vous assurer que tout fonctionne comme avant.
Notez que le processus qui consiste à modifier le code pour l'améliorer ou le rendre plus facile à utiliser sans affecter la sortie est appelé refactorisation.
Répéter un schéma de bordure
Comme vous pouvez le constater, la bordure correspond au même symbole répété plusieurs fois. Dès lors, au lieu de spécifier :
"Imprimer cette chaîne de 23 symboles"
vous pouvez indiquer :
"Imprimer ce symbole 23 fois".
Dans le code, utilisez une instruction repeat()
.
- Dans la fonction
printBorder()
, utilisez l'instructionrepeat()
pour imprimer le signe égal 23 fois. - Au lieu d'utiliser
println()
, optez pourprint()
afin de ne pas passer à une nouvelle ligne après avoir imprimé chaque "=".
Voici le code. Vous avez maintenant une seule instruction pour imprimer le signe égal. Pour la répéter 23 fois, vous utiliserez une instruction repeat()
.
fun printBorder() {
repeat(23) {
print("=")
}
}
- L'instruction
repeat()
commence par le motrepeat
, suivi de()
. Ce type d'instruction est appelé "boucle", car vous répétez ou créez en boucle le même code. Vous découvrirez d'autres façons de créer des boucles ultérieurement. - Entre les parenthèses
()
figure le nombre de répétitions. - S'ensuivent des accolades
{}
. - Entre les accolades
{}
, figure le code à répéter.
- Dans la fonction
printBorder()
, après l'accolade de fermeture } de l'instructionrepeat()
(c'est-à-dire après avoir imprimé la bordure), ajoutez une instructionprintln()
afin d'imprimer une nouvelle ligne.
Le code devrait se présenter comme suit.
fun printBorder() {
repeat(23) {
print("=")
}
println()
}
Le code de la fonction main()
ne change pas, et le programme entier devrait se présenter comme suit.
fun main() {
printBorder()
println("Happy Birthday, Jhansi!")
printBorder()
}
fun printBorder() {
repeat(23) {
print("=")
}
println()
}
- Exécutez votre code. La sortie devrait être comme avant, mais cette fois, vous avez pu créer la bordure en spécifiant le symbole "=" une seule fois.
======================= Happy Birthday, Jhansi! =======================
Utiliser des arguments pour modifier la bordure
Comment procéder si vous souhaitez créer des bordures avec différents symboles, comme ceux indiqués ci-dessous ?
%%%%%%%%%%%%%%%%%%%%%%%
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Vous pouvez définir une fonction distincte pour chacun de ces symboles. Il existe toutefois une méthode plus efficace. Vous pouvez réutiliser la fonction que vous avez déjà écrite et la rendre plus flexible afin qu'elle fonctionne avec différents types de symboles.
L'avantage des fonctions est que vous pouvez y ajouter des entrées à l'aide d'arguments. Vous vous êtes brièvement familiarisé avec ce concept dans un atelier de programmation précédent, lorsque vous avez découvert la fonction main()
. Au cours de cette étape, vous ajouterez un argument à la fonction printBorder()
afin qu'elle puisse imprimer tout schéma de bordure que vous fournissez.
- Dans
main()
, en haut, créez une variable appeléeborder
pour le format de la bordure. Cette section contiendra le texte à répéter pour la bordure.
val border = "%"
- Transmettez maintenant cette variable
border
aux deux appels de fonctionprintBorder()
en tant qu'argument. Pour ce faire, placezborder
entre parenthèses()
, comme lorsque vous avez fourni du texte à imprimer dansprintln()
.
Votre fonction main()
devrait ressembler au code ci-dessous.
fun main() {
val border = "%"
printBorder(border)
println("Happy Birthday, Jhansi!")
printBorder(border)
}
La fonction printBorder()
utilisera la valeur de cet élément border
comme entrée et déterminera comment imprimer la bordure complète.
- Exécutez le code. Le code ne s'exécute pas, et des icônes d'erreur s'affichent à côté.
- Le panneau de sortie affiche un message d'erreur.
Comme précédemment, le message indique où se trouve l'erreur et vous donne une indication sur son origine. La partie importante est : Too many arguments for public fun printBorder()
. Vous appelez la fonction printBorder()
et transmettez une bordure en entrée. Cependant, la définition de la fonction printBorder()
n'accepte pas d'entrée pour le moment.
- Afin de corriger cette erreur, ajoutez un argument de bordure à la définition de la fonction
printBorder()
. Consultez la première ligne de code, comme illustré ci-dessous.
fun printBorder(border: String) {
repeat(23) {
print("=")
}
println()
}
- Notez que le nom de l'argument est
border
. - Ce nom est suivi du signe deux-points
:
. - Figure ensuite le mot
String
, qui est une description du type d'argument.
Un élément String
désigne un extrait de texte constitué de caractères entourés par des guillemets. Comme une lignée de perles enfilées sur une chaîne afin de former un collier, les caractères sont alignés pour former des mots et du texte. En spécifiant que l'argument doit être un élément de type String
, le système fait en sorte que votre argument corresponde à du texte, et non à un nombre par exemple.
- Exécutez votre code. La fonction
printBorder()
accepte désormais un élémentString
comme entrée pour la bordure. Le code dansmain()
appelleprintBorder(border)
avecborder
comme argument. Le code devrait s'exécuter sans erreur. - La sortie du programme dans la console s'affiche-t-elle toujours comme avant ?
======================= Happy Birthday, Jhansi! =======================
Ce comportement n'est pas prévu. Vous avez essayé de créer une bordure avec le symbole "%", mais le programme continue à imprimer une bordure avec le symbole "=". Au cours des prochaines étapes, vous allez découvrir pourquoi.
- Dans l'éditeur, vous remarquerez un point d'exclamation gris. Cette icône indique un avertissement. Les avertissements concernent des problèmes de code auxquels vous devez prêter attention, mais ils n'empêchent pas son exécution.
- Passez la souris sur le point d'exclamation pour afficher un message.
"Parameter 'border' is never used."
indique que le problème est lié à la sortie. Vous transmettez à la fonction une nouvelle chaîne pour la bordure, mais vous ne l'utilisez pas pour l'impression. - Modifiez la fonction
printBorder()
pour utiliser la valeurborder
transmise au lieu d'imprimer le caractère "=". Cela fonctionne exactement comme siborder
était une variable que vous avez définie dans la fonction.
fun printBorder(border: String) {
repeat(23) {
print(border)
}
println()
}
- Exécutez à nouveau le code. La sortie devrait ressembler à ce qui suit.
%%%%%%%%%%%%%%%%%%%%%%% Happy Birthday, Jhansi! %%%%%%%%%%%%%%%%%%%%%%%
Bravo, vous avez résolu le problème ! Voici le code finalisé.
fun main() {
val border = "%"
printBorder(border)
println("Happy Birthday, Jhansi!")
printBorder(border)
}
fun printBorder(border: String) {
repeat(23) {
print(border)
}
println()
}
Vous avez rendu la fonction printBorder()
beaucoup plus flexible sans ajouter beaucoup plus de code. Vous pouvez désormais imprimer une bordure constituée de différents symboles en effectuant une légère modification.
- [Facultatif] En ne modifiant qu'une seule ligne de code dans la fonction
main()
, comment procéderiez-vous pour imprimer des bannières d'anniversaire de ce type ?
*********************** Happy Birthday, Jhansi! ***********************
::::::::::::::::::::::: Happy Birthday, Jhansi! :::::::::::::::::::::::
Modifier une fonction pour inclure deux arguments
Que se passe-t-il si vous voulez utiliser un format différent composé de plusieurs caractères, comme "'-._,-'"
? Vous ne pourriez pas répéter ce format 23 fois, car le résultat serait beaucoup trop long. Toutefois, vous pourriez le répéter environ quatre fois. Pour ce faire, vous pouvez modifier le nombre de répétitions dans l'instruction repeat()
de printBorder()
. Toutefois, une approche plus efficace est possible.
Vous pouvez définir une bordure plus sophistiquée en fonction de deux critères :
- Le schéma à répéter (ce que vous avez déjà fait)
- Le nombre de fois que vous souhaitez répéter ce format
Vous pouvez créer des variables pour le format et le nombre de répétitions, puis transmettre ces deux informations à la fonction printBorder()
.
- Dans
main()
, modifiez la bordure pour qu'elle corresponde au format"'-._,-'"
.
val border = "`-._,-'"
- Exécutez le code et notez que ce format est désormais beaucoup trop long.
- Dans
main()
, sous la définition deborder
, créez une variable nomméetimesToRepeat
pour indiquer le nombre de répétitions. Attribuez-lui la valeur 4.
val timesToRepeat = 4
- Dans
main()
, lors de l'appel deprintBorder()
, ajoutez le nombre de répétitions en tant que deuxième argument. Séparez les deux arguments par une virgule.
printBorder(border, timesToRepeat)
La fonction main()
devrait désormais se présenter comme ceci :
fun main() {
val border = "`-._,-'"
val timesToRepeat = 4
printBorder(border, timesToRepeat)
println("Happy Birthday, Jhansi!")
printBorder(border, timesToRepeat)
}
Comme précédemment, ce code génère une erreur, car vous avez plus d'arguments appelant printBorder()
que dans la définition de printBorder()
.
- Corrigez
printBorder()
pour que le nombre de répétitions soit également accepté en entrée. Ajoutez une virgule après l'argument, suivi de l'argument supplémentairetimesToRepeat: Int.
. La première ligne de la définition de la fonction ressemble maintenant à ceci :
fun printBorder(border: String, timesToRepeat: Int) {
Remarques :
- La virgule sépare les deux arguments.
timesToRepeat
est le nom de l'argument.- S'ensuit le signe deux-points :.
- Le type
Int. timesToRepeat
est un nombre. Dès lors, au lieu de le définir en tant queString
, vous devez le définir commeInt
, qui est l'abréviation de "integer" en anglais et qui désigne un nombre entier.
- Dans
printBorder()
, modifiezrepeat
pour utiliser l'argumenttimesToRepeat
(au lieu du nombre 23). Le codeprintBorder()
devrait se présenter comme suit.
fun printBorder(border: String, timesToRepeat: Int) {
repeat(timesToRepeat) {
print(border)
}
println()
}
- Exécutez votre code. La sortie doit ressembler à ce qui suit.
`-._,-'`-._,-'`-._,-'`-._,-' Happy Birthday, Jhansi! `-._,-'`-._,-'`-._,-'`-._,-'
- Pour que cette sortie soit parfaite, insérez deux espaces au début du message "Happy Birthday" (Joyeux anniversaire). La sortie se présentera comme illustrée ci-dessous.
`-._,-'`-._,-'`-._,-'`-._,-' Happy Birthday, Jhansi! `-._,-'`-._,-'`-._,-'`-._,-'
Voici le code final de la bannière :
fun main() {
val border = "`-._,-'"
val timesToRepeat = 4
printBorder(border, timesToRepeat)
println(" Happy Birthday, Jhansi!")
printBorder(border, timesToRepeat)
}
fun printBorder(border: String, timesToRepeat: Int) {
repeat(timesToRepeat) {
print(border)
}
println()
}
Félicitations ! À l'aide de fonctions, d'arguments, de variables et d'une boucle de répétitions, vous avez découvert les principaux composants de base utilisés dans presque tous les programmes.
Faites une pause, puis passez à la tâche suivante, qui vous permettra de créer d'autres fonctions et boucles. Vous aurez également la possibilité de concevoir un gâteau gigantesque avec le bon nombre de bougies en seulement quelques lignes de programmation.
5. Créer un gâteau à plusieurs étages et avec des bougies
Au cours de cette tâche, vous mettrez à jour le code du gâteau d'anniversaire afin qu'il soit toujours à la bonne taille et avec le nombre approprié de bougies pour chaque âge.
- Vous créerez un total de trois fonctions pour dessiner un gâteau à plusieurs étages avec des bougies.
- Vous utiliserez
repeat()
dans un autre élémentrepeat()
afin de créer une "boucle imbriquée". - La façon dont vous allez créer ce code est semblable à la création de n'importe quel programme, en commençant par la vue d'ensemble et en ajoutant des détails au fur et à mesure. C'est ce que l'on appelle le "développement descendant".
- Les instructions ne sont pas aussi détaillées pour cet exercice pratique. Si vous rencontrez des difficultés, vous pouvez consulter le code final.
Voici une image du gâteau que vous préparerez :
,,,,,,,,,,,,,,,,,,,,,,,, |||||||||||||||||||||||| ========================== @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
Et voici les instructions.
Créer la fonction main()
- Remplacez le code dans l'éditeur par le programme
Hello, world!
. - Vous pouvez supprimer l'argument correspondant à
main()
, car vous ne l'utiliserez pas. - Dans
main()
, créez une variableage
et définissez-la sur 24. - Dans
main()
, créez une deuxième variablelayers
et définissez-la sur 5. - Dans
main()
, appelez une fonctionprintCakeCandles()
et transmettez la variableage
. Un message d'erreur s'affiche, car vous n'avez pas encore créé cette fonction. - De même, appelez une fonction
printCakeTop()
et transmettez également la variableage
. - Enfin, appelez une fonction
printCakeBottom()
et transmettez la variableage
ainsi que le nombre d'étages (layers
). - Pour corriger les erreurs, mettez en commentaire les trois appels de fonction en ajoutant
//
au début de chaque ligne, comme indiqué ci-dessous. Cette technique vous permet d'écrire une ébauche de code sans déclencher d'erreurs. - Exécutez le programme. Il ne devrait pas contenir d'erreur et il ne devrait rien faire de particulier.
Votre fonction main()
devrait ressembler au code ci-dessous.
fun main() {
val age = 24
val layers = 5
// printCakeCandles(age)
// printCakeTop(age)
// printCakeBottom(age, layers)
}
Créer une fonction printCakeTop()
La fonction printCakeTop()
pour imprimer le haut du gâteau, qui correspond à une ligne de signes égal, est presque identique à la fonction printBorder()
que vous avez créée précédemment dans cet atelier de programmation.
==========================
- Sous la fonction
main()
, ajoutez une ligne vide, puis créez une fonction,printCakeTop()
, qui utilise un argument,age
, de typeInt
. - À l'intérieur, utilisez une instruction
repeat()
pour imprimer un signe égal correspond à l'attributage
, plus 2. Les deux signes égal supplémentaires permettent d'éviter que les bougies ne tombent sur le côté du gâteau. - À la fin, lorsque la tâche
repeat()
est terminée, imprimez une ligne vide. - Dans
main()
, supprimez les deux symboles//
au début de la ligne de code deprintCakeTop()
, car la fonction existe désormais.
printCakeTop(age)
Voici la fonction terminée.
fun printCakeTop(age: Int) {
repeat(age + 2) {
print("=")
}
println()
}
- Exécutez le code pour générer le haut du gâteau.
Créer une fonction printCakeCandles()
Chaque bougie est composée de deux symboles : une virgule (,) pour la flamme et une ligne verticale (|) pour le corps de la bougie.
,,,,,,,,,,,,,,,,,,,,,,,,
||||||||||||||||||||||||
Pour générer les bougies en une seule fonction, insérez deux instructions repeat()
(l'une pour les flammes et l'autre pour le corps des bougies) dans la fonction.
- Sous les fonctions
main()
etprintCakeTop()
, créez une fonctionprintCakeCandles()
qui utilise un argumentage
de typeInt
. - À l'intérieur, utilisez une instruction
repeat()
pour imprimer une virgule,
pour la flamme. - Répétez ce schéma pour que le nombre de flammes correspondent à la variable
age
. - À la fin, imprimez une ligne vide.
- Ajoutez une instruction d'impression afin d'imprimer un espace pour insérer les bougies.
- Répétez la procédure pour créer une deuxième instruction
repeat()
afin d'imprimer le corps des bougies avec une ligne verticale |. - Pour terminer, imprimez une nouvelle ligne avec
println()
. - Dans
main()
, supprimez les deux symboles//
au début de la ligne de code pourprintCakeCandles()
.
printCakeCandles(age)
- Exécutez le code pour afficher le haut du gâteau et les bougies.
Solution :
fun printCakeCandles(age: Int) {
print(" ")
repeat(age) {
print(",")
}
println() // Print an empty line
print(" ") // Print the inset of the candles on the cake
repeat(age) {
print("|")
}
println()
}
Créer une fonction printCakeBottom()
Dans cette fonction, vous dessinerez le bas du gâteau dont la largeur est égale à la variable age + 2
. La hauteur correspondra à un nombre donné d'étages.
@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
- Dès lors, votre fonction nécessite deux arguments : un pour la largeur (
age
) et un pour la hauteur (layers
). - Pour imprimer le bas du gâteau, vous devez d'abord répéter l'arobase ("@") autant de fois qu'indiqué par la variable
age + 2
afin d'imprimer un étage. Répétez ensuite l'impression d'un étage en fonction de la variablelayers
.
Dessinez l'arobase autant de fois que défini par la variable "age", plus deux arobases supplémentaires, pour créer un étage.
- Sous les fonctions existantes, créez une fonction
printCakeBottom()
avec deux arguments,age
etlayers
, de typeInt
. - Dans cette fonction, utilisez une instruction
repeat()
pour imprimer un étage d'arobases@
correspondant à la variableage + 2
. Pour terminer, imprimez une ligne vide, comme illustré ci-dessous.
fun printCakeBottom(age: Int, layers: Int) {
repeat(age + 2) {
print("@")
}
println()
}
- Dans
main()
, supprimez les deux symboles//
au début de la ligne de code pourprintCakeBottom(age, layers)
. - Exécutez le code pour vérifier qu'il affiche le bas du gâteau.
,,,,,,,,,,,,,,,,,,,,,,,, |||||||||||||||||||||||| ========================== @@@@@@@@@@@@@@@@@@@@@@@@@@
Instructions repeat() imbriquées
Pour imprimer plusieurs étages identiques de gâteau, vous pouvez spécifier l'instruction :
Pour l'étage 1, répéter le symbole 12 fois : @@@@@@@@@@@@@@
Pour l'étage 2, répéter le symbole 12 fois : @@@@@@@@@@@@@@
Pour l'étage 3, répéter le symbole 12 fois : @@@@@@@@@@@@@@
Vous pouvez également créer une instruction plus concise :
Répéter l'opération sur trois étages :
Répéter le symbole 12 fois.
@@@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@
Cela est facile à faire avec les instructions repeat()
. Vous pouvez placer une instruction repeat()
dans une autre instruction repeat()
. Par exemple, vous pouvez créer une instruction repeat()
dans une instruction repeat()
pour afficher le symbole un certain nombre de fois pour un certain nombre d'étages.
Utiliser une fonction repeat() imbriquée pour imprimer les étages du gâteau
- Placez une deuxième instruction
repeat()
ciblant tout le code à l'intérieur de la fonction. Répétez cette boucle un nombre de fois équivalant à la variablelayers
. - Dans
main()
, supprimez uniquement les deux//
de la ligne de code pourprintCakeBottom()
.
printCakeBottom(age, layers)
- Exécutez le code pour voir l'ensemble du gâteau.
Solution pour printCakeBottom()
.
fun printCakeBottom(age: Int, layers: Int) {
repeat(layers) {
repeat(age + 2) {
print("@")
}
println()
}
}
Félicitations ! Vous venez de terminer un programme assez complexe avec plusieurs fonctions et une instruction repeat
imbriquée. Qui plus est, votre gâteau aura toujours le nombre approprié de bougies.
La sortie finale du programme devrait se présenter comme suit :
,,,,,,,,,,,,,,,,,,,,,,,, |||||||||||||||||||||||| ========================== @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
6. Code de solution
fun main() {
val age = 24
val layers = 5
printCakeCandles(age)
printCakeTop(age)
printCakeBottom(age, layers)
}
fun printCakeCandles(age: Int) {
print (" ")
repeat(age) {
print(",")
}
println() // Print an empty line
print(" ") // Print the inset of the candles on the cake
repeat(age) {
print("|")
}
println()
}
fun printCakeTop(age: Int) {
repeat(age + 2) {
print("=")
}
println()
}
fun printCakeBottom(age: Int, layers: Int) {
repeat(layers) {
repeat(age + 2) {
print("@")
}
println()
}
}
7. Dépannage
Si l'outil de programmation Kotlin basé sur un navigateur n'exécute pas votre code ou génère une erreur inattendue non liée au code lui-même, essayez les solutions suivantes :
- Appuyez sur Maj + Actualiser pour actualiser la page.
- Patientez une minute, puis réessayez.
8. Résumé
- Utilisez
${}
autour des variables et des calculs dans le texte des instructions d'impression. Par exemple, utilisez${age}
, oùage
est une variable. - Créez une variable à l'aide du mot clé
val
et d'un nom. Une fois définie, cette valeur ne pourra pas être modifiée. Attribuez une valeur à une variable à l'aide du signe égal. Du texte et des nombres sont des exemples de valeurs possibles. - Un élément
String
désigne du texte entouré de guillemets, comme"Hello"
. - Un élément
Int
est un nombre entier positif ou négatif, comme 0, 23 ou -1 024. - Vous pouvez transmettre un ou plusieurs arguments à une fonction, par exemple
fun printCakeBottom(age:Int, layers:Int) {}
. - Utilisez une instruction
repeat() {}
pour répéter un ensemble d'instructions plusieurs fois (repeat (23) { print("%") }
ourepeat (layers) { print("@@@@@@@@@@") }
, par exemple). - Une boucle est une instruction qui permet de répéter des instructions plusieurs fois. Une instruction
repeat()
est un exemple de boucle. - Vous pouvez imbriquer des boucles. Autrement dit, vous pouvez insérer des boucles dans des boucles. Par exemple, vous pouvez créer une instruction
repeat()
dans une instructionrepeat()
pour imprimer un symbole plusieurs fois pour un nombre de lignes, comme vous l'avez fait pour les étages du gâteau.
Récapitulatif de l'utilisation des arguments de fonction : pour utiliser des arguments avec une fonction, vous devez effectuer trois opérations.
- Ajoutez l'argument et le type à la définition de la fonction :
printBorder(border: String)
. - Utilisez l'argument dans la fonction :
println(border)
. - Fournissez l'argument lorsque vous appelez la fonction :
printBorder(border)
.
9. En savoir plus
- https://developer.android.com/training/kotlinplayground
- Vocabulaire pour les bases d'Android en Kotlin
Voici la documentation officielle sur les concepts Kotlin que vous avez appris dans cet atelier de programmation.