Få mest muligt ud af Ruby ved hjælp af .select .map- og .reduceringsmetoderne sammen

Du bør aldrig gentage dig selv, når du skriver kode. Med andre ord, gentag ikke dig selv to gange. For at være klar - skriv ikke noget, der allerede er forklaret.

Dette kaldes tautologi, og når man skriver kode, skal det altid undgås. For eksempel, ville det ikke have været rart i stedet for at læse dette lange afsnit, hvis jeg bare brugte de tre kraftfulde ord "aldrig, gentag, dig selv"?

Nå, det er det, jeg vil vise dig, hvordan du gør med Ruby's .select .map og .reduce (eller .inject) metoder.

Eksempel

Lad os antage, at du kigger på en ordbog fuld af medarbejderens navne, jobtitler og lønninger. Lad os også forestille os, at du ønskede at finde ud af det samlede beløb, som virksomheden brugte på udvikleres løn. Uden at bruge en enkelt metode i Ruby ville du sandsynligvis skrive din kode noget som dette:

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 - der er mange linjer at skrive for kun at finde tre personer. Forestil dig, at virksomheden beskæftigede hundredvis af mennesker!

Nu hvis du ved lidt om sløjfer, så er det næste nemmeste skridt at skrive en hver metode for at sætte alle lønningerne sammen. Dette tager måske kun fem eller seks linjer, men tjek dette!

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

Du vil bemærke, at hver metode begynder og slutter med et krøllet beslag. Dette kan bruges i stedet for kommandoer do og end, hvis det er en enkelt linjeblok.

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

.Vælg

Lad os starte med .select-metoden. Vi opretter en variabel (x) og gentager over hver metode i folkeopstillingen. Derefter kontrolleres det med et boolsk udtryk, om nøglen til (: job_title) er lig med "udvikler" -strengen. Hvis den boolske returnerer true, placerer den valgte metode den hash, der returnerede true, til et nyt objekt.

.kort

Kortmetoden bruges til at oprette et nyt array, der ikke påvirker det array, det går igennem. Jeg brugte denne metode til at oprette en ny variabel (y) og brugte derefter den variabel til at få fat i værdien på nøglen (: løn). Derefter vendte jeg denne værdi fra en streng til et heltal.

.Reducere

Denne ser sandsynligvis den mest forvirrende ud, så lad os udvide den lidt.

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

Reduceringsmetoden opretter en ny variabel, som du indstiller værdien lig med i de første parenteser (0). Du opretter derefter to nye værdier (sum og indv), hvoraf den ene er summen, som du tilføjer de individuelle lønninger til.

Jeg håber, det forklarer det godt! Lad mig vide, hvis du har spørgsmål.