Dans cette section, nous allons écrire un programme qui salue l'utilisateur. Le programme lui demandera son nom avant de le saluer. La méthode pour lire une chaîne de caractère venant de l'utilisateur s'appelle gets.
Sauvez le fichier et démarrez-le:
Que s'est-il passé? Pourquoi ce fichu programme va-t'il à la ligne?
La réponse est évidente: tout simplement parce que vous avez entré une nouvelle ligne au clavier. Oui, souvenez-vous, quand vous avez appuyé sur la touche Enter...
Nous allons regarder ceci de plus près dans IRB. Démarrez IRB et tapez l'expression nom = gets. L'ordinateur va attendre une saisie, entrez une chaîne quelconque. Regardez attentivement ce qu'il va se passer:
Que signifie donc ce «\n» à la fin de la chaîne de caractères?
Ce «\n» représente un retour à la ligne. Il s'agit du caractère envoyé par le clavier lorsque l'utilisateur appuie sur la touche Enter.
Astuce | |
---|---|
Avez-vous remarqué comment nous venons d'utiliser IRB pour comprendre ce qu'il s'était passé? Il arrivera tôt ou tard que votre code se comporte d'une façon anormale. A ce moment là, essayez-le dans IRB, vous comprendrez plus facilement la source de vos ennuis! |
OK, nous savons maintenant ce qui ne va pas. Mais comment résoudre ce problème?
Il existe précisément une méthode qui s'occupera de retirer le caractère «\n» d'une chaîne de caractères: String#chomp. Retournons dans IRB pour tester directement cette méthode:
Magnifique! La méthode String#chomp nous renvoie la chaîne de caractères sans le retour à la ligne. Nous pouvons donc maintenant écrire:
Notez bien que la variable nom contient toujours le saut à la ligne. La bonne variable (sans le «\n») est nouveau_nom. Mais pourquoi utiliser une autre variable? Pourquoi ne pas simplement écrire ceci:
>> nom = nom.chomp
De cette façon, nous retirons directement le saut à la ligne de la variable nom.
Il est maintenant temps de corriger le problème dans notre code:
Une dernière petite réflexion:
chomp est une méthode de la classe String (souvenez-vous de la notation: String#chomp)
gets nous renvoie une chaîne de caractères (précisément, un objet de la classe String!)
Pourquoi ne pas écrire gets.chomp? De cette façon, String#chomp sera appelé sur ce que gets retournera. En d'autres termes, nous pouvons écrire:
N'est-ce pas joli? Mettez à jour votre code et invoquez Ruby:
Écrivez un programme qui capture deux mots du clavier, et qui les imprime sur l'écran dans l'ordre opposé de leur saisie.
Écrivez un programme dont le comportement devra ressembler à ceci:
Pour calculer l'année de naissance de l'utilisateur, effectuez une simple soustraction entre l'année courante et son âge.
Écrivez un programme qui demandera à l'utilisateur un nombre ainsi qu'une chaîne de caractères. Ensuite, le programme doit afficher autant de fois la chaîne inversée. Exemple:
Il existe plusieurs solutions possibles à cet exercice. Choisissez celle que vous préférez.
Devinez ce que produira Ruby avec cette ligne:
nombre = gets.chomp.to_i
Essayez-la dans IRB.
Écrivez un programme qui calculera et affichera la factorielle d'un nombre entré au clavier par l'utilisateur. Il devra fonctionner comme ceci:
Vous pouvez réutiliser le code que nous avons écrit au chapitre précédent.