16-06-2009, 09:26 PM
(Modification du message : 31-10-2009, 11:55 AM par Sephi-Chan.)
Les chaînes de caractères
Déclaration et affichage
Une chaîne de caractère est représentée par une suite de caractères (d'où le nom) entourée de guillemets doubles (") ou simples('). Ces guillemets servent à dire à Ruby qu'il à affaire à une chaîne.
Que se passe-t-il, si on omet ces guillemets ?
Une erreur est générée !
En effet, Ruby est allé chercher la constante (et non une variable, puisque son nom commence par une majuscule) Jambon qui n'existe pas !
Et si je veux mettre des guillemets dans ma chaîne ? Comment Ruby va savoir que ce n'est pas pour dire que la chaîne s'arrête ?
Pour cela, il y a plusieurs alternatives : utiliser des guillemets simples pour entourer une chaîne qui inclut des guillemets doubles (et inversement), ou bien échapper les guillemets inclus dans la chaîne. Cela veut dire qu'on va faire perdre aux guillemets leur sens aux yeux de Ruby. Pour échapper un caractère, on utilise un anti-slash (\).
Et si je veux mettre des \ dans ma chaîne de caractères ?
Et bien… On échappe le caractère d'échappement !
Quand vous utilisez des guillemets simples, les variables encadrées intégrées dans la chaîne (#{variable}, par exemple) ne sont pas interprétées ! De plus, les caractères spéciaux (comme \n pour un retour à la ligne) ne fonctionnent pas.
Utiliser des délimiteurs personnalisés
Si les guillemets ne vous conviennent pas, vous pouvez utiliser vos propres délimiteurs grâce à une notation spéciale. Voici cette notation, avec laquelle je vais utiliser le caractère @ comme délimiteur.
La différence entre %q et %Q, c'est que le premier se comporte comme une chaîne délimitée par des guillemets simples, alors que l'autre réagit comme si c'était une chaîne entourée de guillemets doubles.
Si vous choisissez un caractère comme (, { ou [, les délimiteurs inverses seront respectivement ), } et ].
N'oubliez pas la façon dont sont interprétées les variables selon que l'on utilise les guillemets simple ou doubles, ou que l'on utilise %q ou %Q !
Si on ne spécifie pas q ou Q, le comportement par défaut est celui de Q.
La syntaxe Here documents
Une syntaxe alternative permet d'éviter les problèmes d'échappement et d'insérer nos variables sans soucis. Elle est très utile dans le cas de grandes chaînes, notamment. On utilise pour cela un mot clé qui sera indiqué en début et en fin de bloc.
Un peu d'arithmétique
Et oui, avec le texte aussi ! On peut additionner des chaînes de caractères entre elles !
Mais que se passe-t-il ? Mais que se passe-t-il ? Mais qu'est-ce qui se passe ?
J'ai dis que nous pouvions additionner des chaînes entre elles, age contient un nombre entier (Fixnum) !
Heureusement, il y a une solution. Les objets ont généralement une méthode qui permet de renvoyer leur contenu sous forme d'une chaîne de caractères. Cette méthode s'appelle to_s (pour to string).
En revanche, on peut multiplier une chaîne avec un entier !
Et notez la priorité sur les opérations ! Amusant, n'est-ce pas ?
Sephi-Chan
- Déclaration et affichage
- Utiliser des délimiteurs personnalisés
- La syntaxe Here documents
- Un peu d'arithmétique
Déclaration et affichage
Une chaîne de caractère est représentée par une suite de caractères (d'où le nom) entourée de guillemets doubles (") ou simples('). Ces guillemets servent à dire à Ruby qu'il à affaire à une chaîne.
Que se passe-t-il, si on omet ces guillemets ?
nourriture = Jambon
Code :
variables.rb:1: uninitialized constant Jambon (NameError)
Une erreur est générée !
En effet, Ruby est allé chercher la constante (et non une variable, puisque son nom commence par une majuscule) Jambon qui n'existe pas !
Et si je veux mettre des guillemets dans ma chaîne ? Comment Ruby va savoir que ce n'est pas pour dire que la chaîne s'arrête ?
Pour cela, il y a plusieurs alternatives : utiliser des guillemets simples pour entourer une chaîne qui inclut des guillemets doubles (et inversement), ou bien échapper les guillemets inclus dans la chaîne. Cela veut dire qu'on va faire perdre aux guillemets leur sens aux yeux de Ruby. Pour échapper un caractère, on utilise un anti-slash (\).
puts "Romain \"Sephi-Chan\" Tribes" # Romain "Sephi-Chan" Tribes
puts 'Romain "Sephi-Chan" Tribes' # Romain "Sephi-Chan" Tribes
Et si je veux mettre des \ dans ma chaîne de caractères ?
Et bien… On échappe le caractère d'échappement !
puts "Pour échapper un caractère, on utilise un \."
puts "Pour échapper un caractère, on utilise un \\."
puts "Pour échapper un caractère, on utilise un \\\\."
Code :
Pour échapper un caractère, on utilise un .
Pour échapper un caractère, on utilise un \.
Pour échapper un caractère, on utilise un \\.
Quand vous utilisez des guillemets simples, les variables encadrées intégrées dans la chaîne (#{variable}, par exemple) ne sont pas interprétées ! De plus, les caractères spéciaux (comme \n pour un retour à la ligne) ne fonctionnent pas.
Utiliser des délimiteurs personnalisés
Si les guillemets ne vous conviennent pas, vous pouvez utiliser vos propres délimiteurs grâce à une notation spéciale. Voici cette notation, avec laquelle je vais utiliser le caractère @ comme délimiteur.
puts %q@Avec cette notation, pas besoin d'échapper mes caractères ! Je peux mettre des ", des ' ou des \ sans soucis !@
puts %Q@Avec cette notation non plus, je n'ai pas à me soucier des " et des ' ! Mais je dois tout de même échapper les \\ !@
Code :
Avec cette notation, pas besoin d'échapper mes caractères ! Je peux mettre des ", des ' ou des \ sans soucis !
Avec cette notation non plus, je n'ai pas à me soucier des " et des ' ! Mais je dois tout de même échapper les \ !
La différence entre %q et %Q, c'est que le premier se comporte comme une chaîne délimitée par des guillemets simples, alors que l'autre réagit comme si c'était une chaîne entourée de guillemets doubles.
Si vous choisissez un caractère comme (, { ou [, les délimiteurs inverses seront respectivement ), } et ].
N'oubliez pas la façon dont sont interprétées les variables selon que l'on utilise les guillemets simple ou doubles, ou que l'on utilise %q ou %Q !
Si on ne spécifie pas q ou Q, le comportement par défaut est celui de Q.
nourriture = "Jambon fumé"
puts 'Vive le #{nourriture} !'
puts %q@Vive le #{nourriture} !@
puts "Vive le #{nourriture} !"
puts %Q@Vive le #{nourriture} !@
puts %(Vive le #{nourriture} !)
Code :
Vive le #{nourriture} !
Vive le #{nourriture} !
Vive le Jambon fumé !
Vive le Jambon fumé !
Vive le Jambon fumé !
La syntaxe Here documents
Une syntaxe alternative permet d'éviter les problèmes d'échappement et d'insérer nos variables sans soucis. Elle est très utile dans le cas de grandes chaînes, notamment. On utilise pour cela un mot clé qui sera indiqué en début et en fin de bloc.
vehicule = "navire"
puts <<CHANSON
Il était un petit #{vehicule},
Qui n'avait jamais navigué.
CHANSON
Code :
Il était un petit navire,
Qui n'avait jamais navigué.
Un peu d'arithmétique
Et oui, avec le texte aussi ! On peut additionner des chaînes de caractères entre elles !
age = 20
nourriture = "pâté en croûte"
puts "Moi j'aime " + 'le pâté !'
puts "Mais je préfère le " + nourriture + "."
puts "J'ai " + age + " ans."
Code :
Moi j'aime le pâté !
Mais je préfère le pâté en croûte.
variables.rb:6:in `+': can't convert Fixnum into String (TypeError) from var.rb:6
Mais que se passe-t-il ? Mais que se passe-t-il ? Mais qu'est-ce qui se passe ?
J'ai dis que nous pouvions additionner des chaînes entre elles, age contient un nombre entier (Fixnum) !
Heureusement, il y a une solution. Les objets ont généralement une méthode qui permet de renvoyer leur contenu sous forme d'une chaîne de caractères. Cette méthode s'appelle to_s (pour to string).
puts "J'ai " + 20.to_s + " ans." # J'ai 20 ans.
En revanche, on peut multiplier une chaîne avec un entier !
puts %Q@C'est l'histoire d'un 0 qui rencontre un 8.
Le 0 s'exclame : " Tiens, t'as mis une ceinture ?\n\n"@
puts "Ah ! " * 3 + "Quelle blague hilarante !?"
Code :
C'est l'histoire d'un 0 qui rencontre un 8.
Le 0 s'exclame : "Tiens, t'as acheté une ceinture ?"
Ah ! Ah ! Ah ! Quelle blague hilarante !?
Et notez la priorité sur les opérations ! Amusant, n'est-ce pas ?
Sephi-Chan