Διαδρομές
/
Ruby
Ruby
/
Ασκήσεις
/
Βελτιώσεις στο απόθεμα μπουτίκ
Βελτιώσεις στο απόθεμα μπουτίκ

Βελτιώσεις στο απόθεμα μπουτίκ

Άσκηση εκμάθησης

Εισαγωγή

Το OpenStruct σου επιτρέπει να δημιουργήσεις εύκολα ένα αντικείμενο από ένα Hash. Αντί να χρειάζεται να έχεις πρόσβαση μέσω των κλειδιών του Hash, το OpenStruct μάς επιτρέπει να χρησιμοποιούμε μεθόδους για να προσπελαύνουμε και να ορίζουμε τιμές.

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

Ένα επιπλέον πλεονέκτημα αυτής της προσέγγισης είναι ότι μπορούμε να εκμεταλλευτούμε μια συντόμευση όταν χρησιμοποιούμε σύνταξη μπλοκ. Σε περιπτώσεις όπου ένα μπλοκ καλεί μία μόνο μέθοδο, μπορείς να αντικαταστήσεις το μπλοκ με &: ακολουθούμενο από το όνομα της μεθόδου. Για παράδειγμα, αυτές οι δύο γραμμές είναι συνώνυμες:

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

Standard Library

Όλες οι κλάσεις που έχεις δει σε προηγούμενες ασκήσεις ήταν μέρος της Core Library της Ruby.

Το OpenStruct είναι μέρος της Standard Library της Ruby (συχνά συντομεύεται σε "stdlib"), μιας συλλογής κλάσεων για την εργασία με πράγματα όπως ημερομηνίες, json και δικτύωση. Παρέχει επίσης χρήσιμες λειτουργίες που κάνουν τον κώδικά σου πιο εύκολο στη χρήση.

Όταν χρησιμοποιείς κλάσεις που δεν προέρχονται από την Core Library (τον δικό σου κώδικα σε διαφορετικά αρχεία, κλάσεις από τη stdlib ή εξωτερικές εξαρτήσεις), πρέπει να τις εισάγουμε με τη μέθοδο require πριν μπορέσουμε να τις χρησιμοποιήσουμε. Για παράδειγμα:

require 'ostruct'

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

Οδηγίες

Συνεχίζεις να δουλεύεις στο σύστημα διαχείρισης αποθέματος που έφτιαξες προηγουμένως. Αφού ανακάλυψες το OpenStruct και τις συντομεύσεις με block, αποφάσισες να αναδιαμορφώσεις λίγο τον κώδικα. Αντί να αποθηκεύεις τα είδη ως hashes, θα αξιοποιήσεις τις νέες σου γνώσεις.

1. Να επιτρέπεται η ανάκτηση των ειδών

Θέλεις να συνεχίσεις να ανακτάς τη λίστα με τα είδη σε απόθεμα, αλλά αυτή τη φορά να είναι αντικείμενα στα οποία μπορείς να καλέσεις μεθόδους.

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. Αναδιαμόρφωσε την item_names

Αναδιαμόρφωσε την item_names ώστε να χρησιμοποιεί τη νέα σύντμηση με block που έμαθες, αντί για hashes. Υπενθύμιση: η μέθοδος πρέπει να επιστρέφει:

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. Αναδιαμόρφωσε την total_stock

Αναδιαμόρφωσε την total_stock ώστε να χρησιμοποιεί τη μέθοδο του OpenStruct, αντί να αναφέρεται σε ένα hash. Υπενθύμιση: η μέθοδος πρέπει να επιστρέφει:

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
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Ruby Exercism

Έτοιμος να ξεκινήσεις την άσκηση Βελτιώσεις στο απόθεμα μπουτίκ;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ruby με 21 έννοιες121 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.