Percursos
/
Ruby
Ruby
/
Exercícios
/
Melhorias no inventário da boutique
Melhorias no inventário da boutique

Melhorias no inventário da boutique

Exercício de aprendizagem

Introdução

O OpenStruct permite-te criar facilmente um objeto a partir de um Hash. Em vez de teres de aceder através das chaves de um Hash, o OpenStruct permite-nos usar métodos para aceder e definir valores.

attributes = { name: "Jeremy Walker", age: 21, location: "Nomadic" }
person = OpenStruct.new(attributes)

person.name
#=> Jeremy Walker

person.location
#=> Nomadic

# Update the age
person.age = 35

# It sets correctly
person.age
#=> 35

Uma vantagem desta abordagem é podermos tirar partido de um atalho ao usar a sintaxe de bloco. Nas situações em que um bloco chama um único método, podes substituir o bloco por &: seguido do nome do método. Por exemplo, estas duas linhas são sinónimas:

people.sum { |person| person.age }
people.sum(&:age)

Biblioteca Padrão

Todas as classes que viste nos exercícios anteriores fazem parte da Biblioteca Principal do Ruby.

O OpenStruct faz parte da Biblioteca Padrão do Ruby (muitas vezes abreviada para "stdlib"), uma coleção de classes para trabalhar com coisas como datas, json e redes. Também disponibiliza algumas funcionalidades úteis que tornam o teu código mais fácil de trabalhar.

Quando usas classes que não vêm da Biblioteca Principal, sejam o teu próprio código em ficheiros diferentes, classes da stdlib ou dependências externas, precisas de as importar com o método require antes de as poderes usar. Por exemplo:

require 'ostruct'

person = OpenStruct.new(name: "Jeremy Walker")
# ...

Instruções

Continuas a trabalhar no sistema de gestão de stock que construíste anteriormente. Depois de descobrires o OpenStruct e os atalhos de blocos, decidiste refatorar um pouco o código. Em vez de guardares os artigos como hashes, vais aproveitar as competências que acabaste de adquirir.

1. Permite obter os artigos

Queres continuar a obter a lista de artigos em stock, mas desta vez devem ser objetos aos quais podes chamar métodos.

inventory = BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
])

inventory.items.first.name
# => "Maxi Brown Dress"

inventory.items.first.price
# => 65

inventory.items.size
# => 4

2. Refatora o item_names

Refatora o item_names para usares o novo atalho de bloco que aprendeste, em vez de hashes. Como lembrete, o método deve devolver:

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).item_names

# => ["Bamboo Socks Cats", "Black Short Skirt", "Maxi Brown Dress", "Red Short Skirt"]

3. Refatora o total_stock

Refatora o total_stock para usares o método do OpenStruct, em vez de referenciar um hash. Como lembrete, o método deve devolver:

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).total_stock

# => 36
Editar via GitHub A ligação abre numa nova janela ou separador
Ruby Exercism

Estás pronto para começar Melhorias no inventário da boutique?

Inscreve-te no Exercism para aprenderes e dominares Ruby com 21 conceitos121 exercícios, e mentoria humana real, tudo grátis.