Tracks
/
Ruby
Ruby
/
Übungen
/
Verbesserungen am Boutique-Inventar
Verbesserungen am Boutique-Inventar

Verbesserungen am Boutique-Inventar

Lernübung

Einführung

Mit OpenStruct kannst du auf einfache Weise ein Objekt aus einem Hash erstellen. Statt über Hash-Schlüssel darauf zugreifen zu müssen, erlaubt uns OpenStruct, Methoden zu verwenden, um Werte abzurufen und zu setzen.

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

Ein Vorteil dieses Ansatzes ist, dass wir eine Abkürzung nutzen können, wenn wir die Block-Syntax verwenden. In Situationen, in denen ein Block eine einzelne Methode aufruft, kannst du den Block durch &: gefolgt vom Methodennamen ersetzen. Zum Beispiel sind diese beiden Zeilen gleichbedeutend:

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

Standardbibliothek

Alle Klassen, die du in vorherigen Übungen gesehen hast, waren Teil der Ruby-Kernbibliothek.

OpenStruct ist Teil der Ruby-Standardbibliothek (oft kurz „stdlib“ genannt): eine Sammlung von Klassen für die Arbeit mit Dingen wie Datumsangaben, JSON und Netzwerk. Sie bietet außerdem einige nützliche Funktionen, mit denen du leichter mit deinem Code arbeiten kannst.

Wenn du Klassen verwendest, die nicht aus der Kernbibliothek stammen (dein eigener Code in anderen Dateien, Klassen aus der Standardbibliothek oder externe Abhängigkeiten), musst du sie mit der require-Methode importieren, bevor du sie verwenden kannst. Zum Beispiel:

require 'ostruct'

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

Anleitung

Du arbeitest weiter an dem Lagerverwaltungssystem, das du zuvor gebaut hast. Seit du OpenStruct und Block-Kurzschreibweisen entdeckt hast, hast du beschlossen, den Code ein wenig zu refaktorieren. Statt die Artikel als Hashes zu speichern, wirst du deine neu entdeckten Fähigkeiten einsetzen.

1. Ermögliche das Abrufen von Artikeln

Du möchtest weiterhin die Liste der Artikel auf Lager abrufen, aber diesmal sollen es Objekte sein, auf denen Methoden aufgerufen werden können.

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

Refaktoriere item_names, sodass die Methode statt Hashes die neue Block-Kurzschreibweise verwendet, die du gelernt hast. Zur Erinnerung: Die Methode sollte zurückgeben:

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

Refaktoriere total_stock, sodass die Methode die OpenStruct-Methode verwendet, anstatt auf einen Hash zu verweisen. Zur Erinnerung: Die Methode sollte zurückgeben:

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
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Ruby Exercism

Bereit, mit Verbesserungen am Boutique-Inventar zu starten?

Melde dich bei Exercism an, um Ruby mit 21 Konzepte121 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.