Tirez le meilleur parti de Ruby en utilisant les méthodes .select .map et .reduce ensemble

Vous ne devez absolument jamais vous répéter lors de l'écriture de code. En d'autres termes, ne vous répétez pas deux fois. Pour être clair - n'écrivez pas quelque chose qui a déjà été expliqué.

C'est ce qu'on appelle la tautologie, et lors de l'écriture de code, il faut l'éviter à tout moment. Par exemple, cela n'aurait-il pas été bien au lieu de lire ce long paragraphe si je me contentais d'utiliser les trois mots puissants «jamais, répète, toi-même»?

Eh bien, c'est ce que je vais vous montrer comment faire avec les méthodes .select .map et .reduce (ou .inject) de Ruby.

Exemple

Supposons que vous consultiez un dictionnaire rempli de noms d'employés, de titres de poste et de salaires. Imaginons également que vous vouliez connaître le montant total que l'entreprise dépensait pour les salaires des développeurs. Maintenant, sans utiliser une seule méthode dans Ruby, vous écririez probablement votre code quelque chose comme ceci:

people = [ { first_name: "Gary", job_title: "car enthusiast", salary: "14000" }, { first_name: "Claire", job_title: "developer", salary: "15000" }, { first_name: "Clem", job_title: "developer", salary: "12000" } ] person1 = people[0][:job_title] person2 = people[1][:job_title] person3 = people[2][:job_title] total = 0 if person1 == "developer" total += people[0][:salary].to_i end if person2 == "developer" total += people[1][:salary].to_i end if person3 == "developer" total += people[2][:salary].to_i end puts total

Wow - c'est beaucoup de lignes à écrire pour ne trouver que trois personnes. Imaginez si l'entreprise employait des centaines de personnes!

Maintenant, si vous en savez un peu plus sur les boucles, la prochaine étape la plus simple serait d'écrire une méthode à chaque pour rassembler tous les salaires. Cela peut ne prendre que cinq ou six lignes, mais vérifiez ceci!

puts people.selectx.mapy.reduce(:+)

Vous remarquerez que chaque méthode commence et se termine par un crochet bouclé. Cela peut être utilisé à la place des commandes do et end s'il s'agit d'un bloc d'une seule ligne.

{} == (do end) #for single-line blocks only

.sélectionner

Commençons par la méthode .select. Nous créons une variable (x) et itérons sur chaque méthode du tableau people. Il vérifie ensuite avec une expression booléenne si la clé de (: job_title) est égale à la chaîne «developer». Si la valeur booléenne renvoie true, la méthode select place le hachage qui a renvoyé true dans un nouvel objet.

.carte

La méthode map est utilisée pour créer un nouveau tableau qui n'affecte pas le tableau dans lequel il boucle. J'ai utilisé cette méthode pour créer une nouvelle variable (y), puis j'ai utilisé cette variable pour saisir la valeur de la clé (: salaire). Puis, enfin, j'ai transformé cette valeur d'une chaîne en un entier.

.Réduire

Celui-ci semble probablement le plus déroutant, alors développons-le un peu.

.reduce(0) sum + indv #is the same as .reduce(:+)

La méthode de réduction crée une nouvelle variable dont vous définissez la valeur égale dans les premières parenthèses (0). Vous créez ensuite deux nouvelles valeurs (sum et indv) dont l'une est la somme à laquelle vous ajoutez les salaires individuels.

J'espère que cela explique bien! S'il vous plaît laissez-moi savoir si vous avez des questions.