مسیرها
/
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)

کتابخانه‌ی استاندارد

همه‌ی کلاس‌هایی که در تمرین‌های قبلی دیده‌اید بخشی از کتابخانه‌ی هسته‌ی Ruby بوده‌اند.

OpenStruct بخشی از کتابخانه‌ی استاندارد Ruby است (که اغلب به «stdlib» کوتاه می‌شود)، مجموعه‌ای از کلاس‌ها برای کار با مواردی مانند تاریخ‌ها، json و شبکه. همچنین قابلیت‌های مفیدی فراهم می‌کند که کار با کدتان را آسان‌تر می‌کند.

وقتی از کلاس‌هایی استفاده می‌کنیم که از کتابخانه‌ی هسته نیستند (کد خودتان در فایل‌های دیگر، کلاس‌های stdlib، یا وابستگی‌های بیرونی)، باید پیش از استفاده آن‌ها را با متد require وارد کنیم. برای نمونه:

require 'ostruct'

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

دستورالعمل‌ها

شما به کار روی سیستم مدیریت موجودی‌ای که پیش‌تر ساخته‌اید ادامه می‌دهید. از زمانی که OpenStruct و میانبرهای بلوک را کشف کرده‌اید، تصمیم گرفته‌اید کد را کمی بازنویسی کنید. به‌جای ذخیره کردن عناصر به‌صورت هش، از مهارت‌های تازه‌ی خود استفاده می‌کنید.

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 را بازنویسی کنید تا به‌جای هش‌ها از میانبر بلوک تازه‌ای که یاد گرفته‌اید استفاده کند. یادآوری: متد باید این را برگرداند:

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 استفاده کند، نه از ارجاع به یک هش. یادآوری: متد باید این را برگرداند:

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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.