188 votes

Pourquoi est l’opérateur de pelle (<) préféré plus-Equals (+=) lors de la création d’une chaîne en Ruby ?

Je suis en train de travailler par le biais de Ruby Koans.

L' test_the_shovel_operator_modifies_the_original_string Koan dans about_strings.rb comprend le commentaire suivant:

Ruby programmeurs ont tendance à favoriser l'opérateur de pelles mécaniques (<<) sur la plus opérateur = ( + = ) lorsque la construction de chaînes de caractères. Pourquoi?

Ma conjecture est qu'il implique la vitesse, mais je ne comprends pas l'action sous le capot qui serait la cause de la pelle de l'opérateur pour être plus rapide.

Quelqu'un pour être en mesure d'expliquer les détails derrière cette préférence?

286voto

noodl Points 8992

Preuve :

Si modifie la chaîne d’origine, plutôt que de créer un nouveau. La raison de ceci est que Ruby est un raccourci syntaxique pour (il en va de même pour l’autre opérateurs) qui est une affectation. D’autre part est un alias de qui altère la récepteur en place.

88voto

Nemo157 Points 2633

Preuve de performance :

87voto

Kibet Yegon Points 921

Un ami qui est de l'apprentissage de programmation Ruby m'a posé cette même question en passant par les Chaînes de Rubis. Il a obtenu cette même question de l'Ruby Koans et il voulait savoir pourquoi son préféré utiliser l'opérateur de pelles mécaniques de plus en plus d'égal à égal. Je lui ai expliqué à l'aide de cette analogie.

Vous avez un verre d'eau à moitié plein et que vous avez besoin pour remplir votre verre.

La première manière que vous le faites en prenant un verre, le remplir à moitié avec de l'eau du robinet puis à l'aide de cette deuxième demi-verre plein pour remplir votre verre à boire. Vous faites cela à chaque fois que vous avez besoin pour remplir votre verre.

La deuxième façon, vous prenez votre verre à moitié plein et juste de la remplir avec plus d'eau du robinet.

À la fin de la journée, si vous avez eu à remplir votre verre plusieurs fois, Vous auriez plus de lunettes pour les nettoyer.

La même chose s'applique à l'opérateur de pelles mécaniques et les plus égale de l'opérateur. Plus égale opérateur reçoit un nouveau "verre" à chaque fois qu'il a besoin de remplir à nouveau son verre, tandis que l'opérateur de pelles mécaniques prend tout de même le verre et les recharges. Ainsi, à la fin de la journée, plus le verre de la collection pour les Plus égale de l'opérateur.

10voto

grosser Points 4300

Parce que c’est plus rapide / ne crée pas une copie de la chaîne le garbage collector n’a pas besoin d’exécuter.

2voto

Michael Kohl Points 33345

Tandis que pas une réponse directe à votre question, pourquoi le bac entièrement tournée vers le haut toujours a été un de mes articles préférés de Ruby. Il contient aussi quelques infos sur les chaînes en ce qui concerne l’opération garbage collection.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X