Nous avons récemment décidé à mon travail d'un guide de style Ruby. L'un des édits est qu'aucune ligne ne doit dépasser 80 caractères. Comme il s'agit d'un projet Rails, nous avons souvent des chaînes de caractères un peu plus longues - par exemple " L'utilisateur X voulait vous envoyer un message à propos de la chose Y. "qui ne respecte pas toujours la limite de 80 caractères.
Je crois savoir qu'il y a trois façons de faire en sorte qu'une longue chaîne s'étende sur plusieurs lignes :
- HEREDOC
- %Q{}
- Concaténation réelle de chaînes de caractères.
Cependant, tous ces cas finissent par prendre plus de cycles de calcul, ce qui semble idiot. La concaténation de chaînes de caractères, évidemment, mais pour HEREDOC
et %Q
Je dois enlever les nouvelles lignes, via quelque chose comme .gsub(/\n$/, '')
.
Existe-t-il une manière syntaxique pure de faire cela, qui soit équivalente au fait d'avoir toute la chaîne sur une seule ligne ? Le but étant, évidemment, de ne pas dépenser de cycles supplémentaires juste parce que je veux que mon code soit légèrement plus lisible. (Oui, je me rends compte que vous devez souvent faire ce compromis... mais pour la longueur des chaînes de caractères, cela semble juste idiot).
Mise à jour : Les antislashs ne sont pas exactement ce que je veux car on perd l'indentation, ce qui affecte vraiment le style/la lisibilité.
Exemple :
if foo
string = "this is a \
string that spans lines"
end
Je trouve ce qui précède un peu difficile à lire.
EDIT : J'ai ajouté une réponse ci-dessous ; trois ans plus tard, nous avons maintenant l'heredoc en forme de squiggly.
0 votes
Cela peut valoir la peine de tenir compte de ces ficelles.
4 votes
Duplicata possible de Ruby : Puis-je écrire une chaîne de caractères de plusieurs lignes sans concaténation ?
2 votes
Ce n'est pas clair si vous voulez garder
\n
caractères de nouvelle ligne ou non. La première réponse ne les conserve pas, alors que votre réponse les conserve. La question dit "sans supprimer les retours à la ligne", alors que la description dit "[...] je dois supprimer les retours à la ligne".