
Apsolutno se nikada ne biste trebali ponavljati prilikom pisanja koda. Drugim riječima, ne ponavljajte se dva puta. Da budemo jasni - ne pišite nešto što je već objašnjeno.
To se naziva tautologija, a prilikom pisanja koda to treba uvijek izbjegavati. Na primjer, ne bi li bilo lijepo umjesto da sam pročitao ovaj poduži odlomak da sam samo upotrijebio tri snažne riječi "nikad, ponavljaj, sam"?
Pa to ću vam pokazati kako se radi s Ruby-jevim metodama .select .map i .reduce (ili .inject).
Primjer
Pretpostavimo da gledate rječnik pun imena zaposlenika, naziva radnih mjesta i plaća. Zamislimo također da ste željeli saznati ukupan iznos koji je tvrtka trošila na plaće programera. Sada, bez korištenja jedne metode u Rubyju, najvjerojatnije biste napisali svoj kod otprilike ovako:
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 - to je puno redaka za pisanje kako bi se pronašlo samo troje ljudi. Zamislite kad bi tvrtka zapošljavala stotine ljudi!
Sad, ako znate nešto o petljama, sljedeći najlakši korak bio bi pisanje svake metode za slaganje svih plaća. Ovo bi moglo potrajati samo pet ili šest redaka, ali pogledajte ovo!
puts people.selectx.mapy.reduce(:+)

Primijetit ćete da svaka metoda započinje i završava kovrčavom zagradom. To se može koristiti umjesto naredbi do i end ako je riječ o bloku u jednom retku.
{} == (do end) #for single-line blocks only
.Odaberi
Počnimo s metodom .select. Izrađujemo varijablu (x) i ponavljamo svaku metodu u polju ljudi. Zatim provjerava logičkim izrazom je li ključ (: job_title) jednak nizu "programer". Ako logička vrijednost vrati true, tada metoda select smješta hash koji je vratio true u novi objekt.
.karta
Metoda mape koristi se za stvaranje novog niza koji ne utječe na niz kroz koji prolazi. Ovom metodom stvorio sam novu varijablu (y), a zatim sam pomoću te varijable dohvatio vrijednost ključa (: plaća). Tada sam konačno tu vrijednost iz niza pretvorio u cijeli broj.
.Smanjiti
Ovaj vjerojatno izgleda najzbunjujuće pa ga malo proširimo.
.reduce(0) sum + indv #is the same as .reduce(:+)
Metoda smanjenja stvara novu varijablu kojoj ste postavili vrijednost jednaku u prvim zagradama (0). Zatim stvarate dvije nove vrijednosti (zbroj i indv) od kojih je jedna zbroj kojem dodajete pojedinačne plaće.
Nadam se da to dobro objašnjava! Obavijestite me ako imate pitanja.