Track
/
Ruby
Ruby
/
Esercizi
/
Miglioramenti dell'inventario della boutique
Miglioramenti dell'inventario della boutique

Miglioramenti dell'inventario della boutique

Esercizio di apprendimento

Introduzione

OpenStruct ti permette di creare facilmente un oggetto da un Hash. Invece di dover accedere usando le chiavi di Hash, OpenStruct ci permette di usare metodi per accedere e impostare i valori.

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

Un vantaggio di questo approccio è che possiamo sfruttare una scorciatoia quando usiamo la sintassi con i blocchi. Quando un blocco chiama un singolo metodo, puoi sostituire il blocco con &: seguito dal nome del metodo. Per esempio, queste due righe sono sinonime:

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

Libreria standard

Tutte le classi che hai visto negli esercizi precedenti facevano parte della libreria core di Ruby.

OpenStruct fa parte della libreria standard di Ruby (spesso abbreviata in «stdlib»): una raccolta di classi per lavorare con cose come date, JSON e networking. Fornisce anche alcune funzionalità utili per rendere il codice più facile da usare.

Quando usi classi che non provengono dalla libreria core (codice in file diversi, classi della stdlib o dipendenze esterne), dobbiamo importarle usando il metodo require prima di poterle usare. Per esempio:

require 'ostruct'

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

Istruzioni

Continui a lavorare sul sistema di gestione del magazzino che hai costruito in precedenza. Dopo aver scoperto OpenStruct e le scorciatoie di blocco, hai deciso di riorganizzare un po' il codice. Invece di memorizzare gli articoli come hash, metterai a frutto le tue nuove competenze.

1. Consenti il recupero degli articoli

Vuoi continuare a recuperare l'elenco degli articoli in magazzino, ma questa volta devono essere oggetti su cui poter chiamare dei metodi.

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. Riorganizza item_names

Riorganizza item_names in modo che usi la nuova scorciatoia di blocco che hai imparato, invece degli hash. Come promemoria, il metodo deve restituire:

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. Riorganizza total_stock

Riorganizza total_stock in modo che usi il metodo di OpenStruct, invece di fare riferimento a un hash. Come promemoria, il metodo deve restituire:

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
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Ruby Exercism

Vuoi iniziare Miglioramenti dell'inventario della boutique?

Iscriviti a Exercism per imparare e padroneggiare Ruby con 21 concetti121 esercizi e il mentoring di persone reali, tutto gratis.