[1, 2, 3, 4].inject(0) { |result, element| result + element } # => 10
Je regarde ce code mais mon cerveau n'enregistre pas comment le nombre 10 peut devenir le résultat. Quelqu'un pourrait-il m'expliquer ce qui se passe ici ?
[1, 2, 3, 4].inject(0) { |result, element| result + element } # => 10
Je regarde ce code mais mon cerveau n'enregistre pas comment le nombre 10 peut devenir le résultat. Quelqu'un pourrait-il m'expliquer ce qui se passe ici ?
Un scénario courant, lorsqu'on utilise une collection, quelle qu'elle soit, consiste à effectuer un seul type d'opération avec tous les éléments et à collecter le résultat.
Par exemple, une fonction sum(array) peut vouloir additionner tous les éléments passés dans le tableau et renvoyer le résultat.
Une abstraction généralisée de la même fonctionnalité est fournie en Ruby sous le nom de reduce (inject est un alias). En d'autres termes, ces méthodes itèrent sur une collection et accumulent la valeur d'une opération sur des éléments dans une valeur de base en utilisant un opérateur et renvoient cette valeur de base à la fin.
Prenons un exemple pour mieux comprendre.
>>> (5..10).inject(1) {|product, n| product * n }
=> 151200
Dans l'exemple ci-dessus, nous avons les éléments suivants : une valeur de base 1, un tableau (5..10), et un bloc avec des expressions indiquant comment ajouter la valeur calculée à la valeur de base (c'est-à-dire multiplier l'élément du tableau par le produit, où le produit est initialisé avec la valeur de base).
L'exécution suit donc quelque chose comme ça :
# loop 1
n = 1
product = 1
return value = 1*1
# loop 2
n = 2
product = 1
return value = 1*2
n = 3
product = 2
return value = 2*3
.. Comme vous pouvez le remarquer, la valeur de base est continuellement mise à jour alors que l'expression boucle sur les éléments du conteneur, retournant ainsi la valeur finale de la valeur de base comme résultat.
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.