Chaînes de caractères
Ruby traite les chaînes de caractères aussi bien que les nombres. Une chaîne peut être entre guillemets (“…”) ou entre apostrophes (‘…’).
ruby> “abc” “abc” ruby> ‘abc’ “abc”Guillemets et apostrophes ont des effets différents dans certains cas. Une chaîne entre guillemets permet d’utiliser des séquences d’échappement en mettant un anti-slash devant les caractères voulus, et l’évaluation d’expressions incluses dans la chaîne et entourées de #{}. Une chaîne entre apostrophes ne permet pas tout ça et ne dit rien que ce qu’elle montre. Exemples :
ruby> print “anbnc”,“n” a b c nil ruby> print ‘anbnc’,“n” anbnc nil ruby> “n” “n” ruby> ‘n’ “\n” ruby> “001” “001” ruby> ‘001’ “\001” ruby> “abcd #{5*3} efg” “abcd 15 efg” ruby> var = " abc " " abc " ruby> “1234#{var}5678” “1234 abc 5678”Le traitement des chaînes par Ruby est plus intelligent et plus intuitif que celui de C. Par exemple, on peut concaténer des chaînes avec + et répéter une chaîne n fois avec * :
ruby> “foo” + “bar” “foobar” ruby> “foo” * 2 “foofoo”Concaténer des chaînes est beaucoup plus pénible en C parce qu’il faut gérer explicitement l’allocation mémoire correspondante :
char *s = malloc(strlen(s1)strlen(s2)1); strcpy(s, s1); strcat(s, s2); /* … */ free(s);Au contraire, avec ruby, on n’a pas à se soucier de la place occupée par une chaîne. On ne s’occupe pas du tout de la gestion de la mémoire.
Voici plusieurs choses qu’on peut faire avec les chaînes.
- Concaténation :
- Répétition :
- Extraction de caractères (notez que les caractères sont des entiers pour ruby) :
(Les indices positifs indiquent des positions à partir du début de la chaîne, les indices négatifs à partir de la fin.)
- Extraction de sous-chaînes :
- Test d’égalité :
Maintenant, mettons ces éléments au travail. Voici un jeu “Quel mot est-ce ?” — mais le mot « jeu » est peut-être un peu excessif pour ce qui suit ;-)
# sauver ceci en devine.rb
mots = ['foobar', 'baz', 'quux']
secret = mots[rand(3)]
print "Devine ? "
while devine = STDIN.gets
devine.chop!
if devine == secret
print "Tu gagnes!n"
break
else
print "Dommage, tu perds.n"
end
print "Devine ? "
end
print "Le mot était ", secret, ".n"
Pour l’instant ne vous souciez pas trop du détail du code. Voici ce que produit une exécution.
% ruby guess.rb Devine? foobar Dommage, tu perds. Devine? quux Dommage, tu perds. Devine? ^D Le mot était baz.
(J’aurais pu faire mieux, vu la probabilité de 1/3…)
Précédent : GDU : Des exemples simples Suivant : GDU : Expressions régulières

