Utiliser le format nommé avec la méthode de format de Ruby

Ruby dispose de plusieurs méthodes pour formater les chaînes selon la soi-disant spécification de format.

#Tout"hoge = 1 + 2"Est évalué comme
sprintf('hoge = %s + %s', 1, 2)
format('hoge = %s + %s', 1, 2)
'hoge = %s + %s' % [1, 2]

«Format» et «sprintf» sont des méthodes du noyau et sont des alias avec des noms différents. https://docs.ruby-lang.org/ja/latest/method/Kernel/m/format.html

La troisième String #% a une couleur de cheveux légèrement différente, mais il semble que vous pouvez faire pratiquement la même chose simplement en appelant format en considérant le côté self comme la chaîne de caractères de spécification de format. https://docs.ruby-lang.org/ja/latest/method/String/i/=25.html

Quel est le style d'écriture recommandé?

Au moment de cet article, le comportement par défaut de RuboCop est «Autoriser uniquement les méthodes de formatage». Je serai corrigé.

hoge.rb:3:18: C: Style/FormatString: Favor format over String#%.
'hoge = %s + %s' % [1, 2]
                 ^

De plus, le style traditionnel comme % s est en colère parce qu'il n'est pas recommandé.

hoge.rb:1:16: C: Style/FormatStringToken: Prefer annotated tokens (like %<foo>s) over unannotated tokens (like %s).
format('hoge = %s + %s', 1, 2)
               ^^

Comment écrire après tout

Il semble qu'il soit recommandé d'ajouter l'annotation _ \ <nom > _ à la spécification de format et de transmettre la valeur que vous souhaitez insérer dans Hash.

format('hoge = %<x>d + %<y>d', x: 1, y: 2)

Au fait, il y a aussi _% {name} _ dans une notation similaire, mais il semble que ce ne soit pas recommandé. Vous devez spécifier le spécificateur.

hoge.rb:4:16: C: Style/FormatStringToken: Prefer annotated tokens (like %<foo>s) over template tokens (like %{foo}).
format('hoge = %{x} + %{y}', x: 1, y: 2)
               ^^^^

Pourquoi ce style est recommandé

RuboCop semble être destiné à unifier le style en un seul, avec une valeur par défaut de format. https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Style/FormatString

Le problème original semble être ↓, mais cela semble être un processus difficile tel que "N'est-ce pas agréable de l'avoir?" Ou "J'aime!" Plutôt que d'être décidé après une discussion difficile. Peut-être que la valeur par défaut est plus qu'une question de décision?

Cop idea: Enforce preferred style for format string sequences #3438 https://github.com/rubocop-hq/rubocop/issues/3438

L'affirmation selon laquelle _% \ <nom > _ vaut mieux que _% {nom} _ semble être basée sur le Guide de style Ruby.

When using named format string tokens, favor %s over %{name} because it encodes information about the type of the value. https://rubystyle.guide/#named-format-tokens

Résumé

Dans Ruby, les méthodes de formatage de chaîne de type printf sont fournies dans plusieurs styles.

Si vous utilisez Ruby à l'époque moderne, en particulier dans le développement d'équipe, vous voudrez souvent introduire RuboCop. Voici un bref résumé des styles spécifiés et de leur justification.

Recommended Posts

Utiliser le format nommé avec la méthode de format de Ruby
Utilisez FacesContext comme maquette avec PowerMockito
Sortez avec un suffixe sur la méthode 2
Compte tenu de l'éditeur de propriétés utilisé dans SpringToolSuite (STS)
Utilisez java1.7 (zulu7) dans un répertoire spécifique avec jenv
Pourquoi implémenter avec singleton au lieu de la méthode statique
Utiliser ProGuard avec Gradle
Utiliser Puphpeteer avec Docker
Utilisez XVim2 avec Xcode 12.0.1
Utilisation de CentOS avec LXD
Utiliser Webmock avec Rspec
Automatisez le format avec maven-formatter
Formater JSON avec org.json
Utiliser les WebJars avec Gradle
Utilisez jlink avec gradle