Mòdul Enumerable

El mòdul Enumerable és una de les característiques més potents i útils de Ruby. Proporciona una sèrie de mètodes que permeten treballar amb col·leccions de dades de manera eficient i elegant. Aquest mòdul és inclòs en classes com Array, Hash i Range, entre d'altres.

Objectius d'Aprenentatge

  • Comprendre què és el mòdul Enumerable i com s'utilitza.
  • Aprendre els mètodes més comuns del mòdul Enumerable.
  • Aplicar aquests mètodes en exemples pràctics.

Què és el Mòdul Enumerable?

El mòdul Enumerable inclou mètodes que permeten iterar, buscar, ordenar i manipular col·leccions de dades. Perquè una classe pugui utilitzar Enumerable, ha d'incloure el mètode each, que és la base de la majoria dels mètodes d'aquest mòdul.

Mètodes Comuns del Mòdul Enumerable

A continuació, es presenten alguns dels mètodes més utilitzats del mòdul Enumerable:

each

Itera sobre cada element de la col·lecció.

[1, 2, 3].each do |num|
  puts num
end

map

Crea una nova col·lecció aplicant el bloc a cada element de la col·lecció original.

squared_numbers = [1, 2, 3].map { |num| num ** 2 }
puts squared_numbers.inspect # [1, 4, 9]

select

Retorna una nova col·lecció amb els elements que compleixen la condició del bloc.

even_numbers = [1, 2, 3, 4, 5].select { |num| num.even? }
puts even_numbers.inspect # [2, 4]

reject

Retorna una nova col·lecció amb els elements que no compleixen la condició del bloc.

odd_numbers = [1, 2, 3, 4, 5].reject { |num| num.even? }
puts odd_numbers.inspect # [1, 3, 5]

reduce (o inject)

Combina tots els elements de la col·lecció en un sol valor segons el bloc.

sum = [1, 2, 3, 4, 5].reduce(0) { |acc, num| acc + num }
puts sum # 15

find

Retorna el primer element que compleix la condició del bloc.

first_even = [1, 2, 3, 4, 5].find { |num| num.even? }
puts first_even # 2

all?

Retorna true si tots els elements compleixen la condició del bloc.

all_even = [2, 4, 6].all? { |num| num.even? }
puts all_even # true

any?

Retorna true si algun element compleix la condició del bloc.

any_even = [1, 3, 5, 6].any? { |num| num.even? }
puts any_even # true

Exemple Pràctic

Suposem que tenim una llista de persones amb les seves edats i volem trobar les persones majors d'edat (18 anys o més).

people = [
  { name: "Anna", age: 17 },
  { name: "John", age: 23 },
  { name: "Mike", age: 15 },
  { name: "Sara", age: 20 }
]

adults = people.select { |person| person[:age] >= 18 }
puts adults.inspect
# [{:name=>"John", :age=>23}, {:name=>"Sara", :age=>20}]

Exercicis Pràctics

  1. Filtrar Nombres Parells Escriu un programa que filtri els nombres parells d'una llista donada.

    numbers = [10, 15, 20, 25, 30]
    even_numbers = numbers.select { |num| num.even? }
    puts even_numbers.inspect
    
  2. Transformar Nombres Escriu un programa que multipliqui cada nombre d'una llista per 3.

    numbers = [1, 2, 3, 4, 5]
    tripled_numbers = numbers.map { |num| num * 3 }
    puts tripled_numbers.inspect
    
  3. Sumar Nombres Escriu un programa que sumi tots els nombres d'una llista.

    numbers = [5, 10, 15, 20]
    total_sum = numbers.reduce(0) { |acc, num| acc + num }
    puts total_sum
    

Solucions

  1. Filtrar Nombres Parells

    numbers = [10, 15, 20, 25, 30]
    even_numbers = numbers.select { |num| num.even? }
    puts even_numbers.inspect # [10, 20, 30]
    
  2. Transformar Nombres

    numbers = [1, 2, 3, 4, 5]
    tripled_numbers = numbers.map { |num| num * 3 }
    puts tripled_numbers.inspect # [3, 6, 9, 12, 15]
    
  3. Sumar Nombres

    numbers = [5, 10, 15, 20]
    total_sum = numbers.reduce(0) { |acc, num| acc + num }
    puts total_sum # 50
    

Conclusió

El mòdul Enumerable és una eina poderosa que facilita el treball amb col·leccions en Ruby. Els mètodes que proporciona permeten realitzar operacions complexes de manera senzilla i llegible. Practicar amb aquests mètodes és essencial per dominar la manipulació de col·leccions en Ruby.

© Copyright 2024. Tots els drets reservats