Извуците максимум из Руби-а користећи методе .селецт .мап и .редуце заједно

Апсолутно се никада не бисте требали понављати када пишете код. Другим речима, не понављајте се два пута. Да будемо јасни - не пишите нешто што је већ објашњено.

То се назива таутологија, а приликом писања кода то треба увек избегавати. На пример, зар не би било лепо уместо да прочитам овај подужи пасус да сам само употребио три снажне речи „никад, понови се, сам“?

Па то ћу вам показати како да радите са Руби-јевим методама .селецт .мап и .редуце (или .ињецт).

Пример

Претпоставимо да гледате речник пун имена запослених, наслова послова и плата. Замислимо такође да сте желели да сазнате укупан износ који је компанија трошила на плате програмера. Сада, без употребе једне методе у Руби-у, највероватније бисте написали свој код отприлике овако:

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

Вау - то је пуно редова за писање да би се пронашло само троје људи. Замислите да је компанија запошљавала стотине људи!

Сада, ако знате нешто о петљама, следећи најлакши корак био би писање сваке методе за слагање свих плата. Ово би могло потрајати само пет или шест редова, али погледајте ово!

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

Приметићете да свака метода почиње и завршава се коврџавом заградом. Ово се може користити уместо наредби до и енд ако је блок у једној линији.

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

.селецт

Почнимо са методом .селецт. Стварамо променљиву (к) и понављамо сваку методу у пољу људи. Затим проверава логичким изразом да ли је кључ (: јоб_титле) једнак низу „програмер“. Ако логичка вредност врати труе, тада метода селецт смешта хеш који је вратио труе у нови објекат.

.Мапа

Метода мапе користи се за стварање новог низа који не утиче на низ кроз који се петља. Овом методом сам креирао нову променљиву (и), а затим употребио ту променљиву да зграбим вредност кључа (: плата). Затим сам, коначно, ту вредност из низа претворио у цео број.

.Смањи

Овај вероватно изгледа најзбуњујуће па га мало проширимо.

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

Метода редукције ствара нову променљиву којој сте поставили вредност једнаку у првим заградама (0). Затим креирате две нове вредности (збир и индв) од којих је једна сума којој додајете појединачне зараде.

Надам се да то добро објашњава! Обавестите ме ако имате питања.