Kotlin, librairie standard 📘
- Lire la documentation de la librairie standard de Kotlin sur les Collections, les List, les Set et les Map (max 20 minutes).
- Regarder les vidéos de théorie.
- Commencer les exercices de la semaine.
- Arrêter après 2 heures de travail.
- Compléter les exercices de la semaine.
- Continuer le travail pratique (à remettre bientôt!).
Crée-toi un nouveau projet dans lequel tu pourras créer différents fichiers exécutables pour les exercices.
Exercice EntrezUnNombre.kt
En utilisant la fonction readln(), crée un programme qui demande à l'utilisateur de taper un mot jusqu'à ce que ce soit un nombre entier (dans la console) :
Veuillez entrer un nombre :
pipo
Ceci n’est pas un nombre, veuillez entrer un nombre :
popi
Ceci n’est pas un nombre, veuillez entrer un nombre :
123
Merci, votre nombre est 123.
Trace et récursivité
Effectue la trace de la fonction suivante :
fun main() {
println(factorielle(2))
}
fun factorielle(n: Int): Int {
if (n == 0) {
return 1
} else {
return n * factorielle(n - 1)
}
}
Après avoir complété ta trace manuelle et ton projet, tu peux (pas obligé) appeler ton prof pour qu'il te montre comment voir les contextes d'exécution (variables) aux différents niveaux dans la pile.
Exercice EcrireFichier.kt
En utilisant la librairie standard, ton programme doit :
- Créer un fichier vide dans le dossier courant appelé vide.txt.
- Créer un fichier texte contenant ton nom et ton prénom dans le dossier parent du dossier courant.
Exercice LireFichier.kt
En utilisant la librairie standard, ton programme doit :
- prendre un ou plusieurs noms de fichiers en arguments de ligne de commande;
- afficher le contenu de chaque fichier passé en argument dans la console en les séparant par une ligne de -------------.
Exercice ListeSimple.kt
Ton programme doit contenir :
- une fonction repete(n: Int, nombreFois: Int) qui renvoie une liste d'entiers avec tous les nombres de 1 à n répétés nombreFois.
Par exemple, pour repete(4, 2), on doit obtenir [1, 1, 2, 2, 3, 3, 4, 4]; - une fonction main qui teste la fonction précédente avec plusieurs valeurs de paramètres, et affiche les listes retournées avec println().
Exercice TriSimple.kt
Ton programme doit contenir :
- une fonction triInverseALaMain(liste: List<Double>) qui renvoie la liste triée par ordre inverse.
Par exemple, si on passe [0.1, 12.34, -0.1234, 3.1416] on doit obtenir [3.1416, -0.1234, 12.34, 0.1].
Tu dois utiliser une liste mutable et une boucle; - une fonction triInverse(liste: List<Double>) qui fait la même chose, mais sans boucle et en utilisant une méthode de l'objet List reçu en paramètre;
- une fonction main qui teste les deux fonctions précédentes avec plusieurs listes.
Exercice TrouvePisCompte.kt
Ton programme doit contenir :
- une fonction trouveALaMain(element: Int, liste: List<Int>): Boolean qui renvoie si la liste contient l'élément fourni ou pas.
Tu dois parcourir la liste avec une boucle; - une fonction trouve(element: Int, liste: List<Int>): Boolean qui fait la même chose, mais sans boucle et en utilisant une méthode de l'objet List;
- une fonction compteALaMain(element: Int, liste: List<Int>): Int qui renvoie le nombre d'apparitions de l'element dans la liste.
Tu dois parcourir la liste avec une boucle; - une fonction compte(element: Int, liste: List<Int>): Int qui fait la même chose, mais sans boucle et en utilisant une méthode de l'objet List;
- une fonction main qui teste les 4 fonctions sur plusieurs exemples.
Exercice Ensemble.kt
Crée un programme pour gérer une liste de mots reçue en ligne de commande.
Tu dois t'assurer qu’il n’y a pas de doublons (utilise un Set).
Affiche ensuite les mots triés par ordre alphabétique dans la console.
Par exemple, si ces mots sont passés en ligne commande :
on me voit on me voit plus on me voit plus on me voit
la console devrait afficher :
me
on
plus
voit
Exercice Compteur.kt
En utilisant une Map, crée un programme qui compte les occurences de chacun des mots reçus en ligne de commande.
Par exemple, si ces mots sont passés en ligne commande :
on me voit on me voit plus on me voit plus on me voit
ta Map devrait contenir :
{on=4, me=4, voit=4, plus=2}
Kotlin et librairies tierces 📖
- Demo de MavenRepository: librairie, version
- Exemple de recherche de librairie : exemple de https://square.github.io
- Interopérabilité des librairies Java et Kotlin
- Compléter les exercices de la semaine
- Continuer le TP1
Attention : une grande partie du travail de ces exercices consiste à faire vos propres recherches. Lorsqu'on commence à utiliser une nouvelle librairie, il est généralement recommandé de commencer en lisant la documentation et les exemples fournis par les développeurs de la librairie.
Exercice Jsoup
À l'aide de la librairie Jsoup, vous devez écrire un petit programme qui prend une url en paramètre, qui télécharge la page web correspondant, puis qui extrait toutes les balises <a> de la page et affiche leur attribut href.
Par exemple, si la page contient
<a href="pipo.html">test</a>
le programme devra afficher test = pipo.html dans la console.
Exercice ValidationCourriel
Tu dois trouver une librairie qui valide si un courriel est valide. Écris un programme pour voir si la méthode fournie par la librairie fonctionne sur les exemples suivants:
- Ok : jo@pipo.org
- Ok : ma_mu@m.ca
- Ok : a.a@a.ca
- Ko : a.a@a.aa
- Ko : ab@ab
- Ko : a.b@ab
- Ko : jo
Exercice SuperListe
On veut comparer les performances de plusieurs implémentations de List quand on parle de performance pour l'insertion. On souhaite comparer le temps d'exécution nécessaire pour:
- ajouter 100 000 éléments en dernière position dans la liste
- ajouter 100 000 éléments en première position dans la liste
- ajouter 100 000 éléments dans une position au hasard dans la liste
Pour permettre de tester plusieurs listes, on vous recommande de créer une méthode
fun testeCetteListe(liste: MutableList<Int>) {
val random: Random = Random(1234)
val a = System.currentTimeMillis()
// ajouter 100 000 elements en dernière position liste.add(nombre);
val b = System.currentTimeMillis()
// ajouter 100 000 elements en première position liste.add(0, nombre);
val c = System.currentTimeMillis()
// ajouter 100 000 elements position au hasard liste.add(random.nextInt(liste.size + 1), nombre);
val d = System.currentTimeMillis()
// afficher b-a, c-b, d-c qui sont les durées d'exécution en millisecondes
}
Le but est de voir quelle liste est la plus performante entre LinkedList, ArrayList et une dernière que vous trouverez dans la librairie suivante : GapList.
Ainsi, avec un main qui appelle la méthode testeCetteListe pour une LinkedList puis une ArrayList puis une GapList, vous aurez une bonne idée des performances respectives.