Отримайте максимум від Ruby за допомогою методів .select .map та .reduce разом

Вам абсолютно ніколи не слід повторюватись при написанні коду. Іншими словами, не повторюйтесь двічі. Щоб бути зрозумілим - не пишіть щось, що вже було пояснено.

Це називається тавтологією, і під час написання коду його слід уникати постійно. Наприклад, чи не було б приємно замість прочитати цей об’ємний абзац, якби я просто вжив три потужні слова «ніколи, не повторюйся, сам»?

Ну, це те, що я збираюся показати вам, як робити за допомогою методів .select .map та .reduce (або .inject) Рубі.

Приклад

Припустимо, ви переглядаєте словник, повний імен працівників, назв посад та заробітної плати. Давайте також уявимо, що ви хотіли з’ясувати загальну суму, яку компанія витрачала на зарплату розробників. Тепер, не використовуючи жодного методу в Ruby, ви, швидше за все, виписали б свій код приблизно так:

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, якщо це однорядковий блок.

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

.виберіть

Почнемо з методу .select. Ми створюємо змінну (x) і перебираємо кожен метод у масиві людей. Потім він перевіряє булевим виразом, чи дорівнює ключ (: job_title) рядку “розробник”. Якщо логічне значення повертає true, тоді метод select розміщує хеш, який повернув true, у новий об'єкт.

.map

Метод map використовується для створення нового масиву, який не впливає на масив, який він переглядає. Я використовував цей метод для створення нової змінної (y), а потім використовував цю змінну, щоб захопити значення ключа (: зарплата). Потім, нарешті, я перетворив це значення із рядка на ціле число.

.Зменшити

Цей, мабуть, виглядає найбільш заплутаним, тому давайте його трохи розширимо.

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

Метод зменшення створює нову змінну, якій ви встановлюєте значення, рівне першим дужкам (0). Потім ви створюєте два нових значення (сума та indv), з яких одне - сума, до якої ви додаєте індивідуальні зарплати.

Сподіваюся, це добре пояснює це! Будь ласка, повідомте мене, якщо у вас виникнуть запитання.