Map و select
هر مرحله فقط یک تبدیل مشخص انجام میدهد.
active_names = users .select(&:active?) .map(&:name) .sort
راهنمای زبان Ruby برای متغیرها، collectionها، بلوکها، کلاس و مدیریت خطا. Enumerable با blockها الگوهای رایج تبدیل و فیلتر را ساده میکند. برای مجموعهٔ بزرگ، eager و lazy بودن زنجیره را بسنجید. API را با آرگومانهای نامدار و خروجی روشن طراحی کنید. بلوکها را برای رفتار قابلتزریق و ensure را برای cleanup بهکار ببرید. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
هر مرحله فقط یک تبدیل مشخص انجام میدهد.
active_names = users .select(&:active?) .map(&:name) .sortخروجی Hash شامل کلید و آرایهٔ اعضای هر گروه است.
orders_by_customer = orders.group_by(&:customer_id)tally تعداد هر مقدار را در Hash جمع میکند.
word_counts = words .map(&:downcase) .tallyنام آرگومانها در call site قرارداد را خواناتر میکند.
def connect(host:, port: 443, timeout: 5) Client.new(host: host, port: port, timeout: timeout)endclient = connect(host: "example.test")yield رفتار را به caller میسپارد و کد تکراری را کم میکند.
def with_timing started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) yieldensure elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at puts "elapsed: #{elapsed.round(3)}s"endوضعیت را با instance variable نگه دارید و API عمومی کوچک بماند.
class Counter def initialize(value = 0) @value = value end def increment @value += 1 endendfetch مقدار پیشفرض میدهد و نبود کلید را از مقدار nil جدا میکند.
settings = { theme: "dark" }theme = settings.fetch(:theme, "system")locale = settings.fetch(:locale, "fa")module نامها را گروهبندی میکند و متدهای ماژولار را جدا نگه میدارد.
module Billing class Invoice def total line_items.sum(&:amount) end endendنوع خطا را محدود کنید و جزئیات را برای تشخیص حفظ کنید.
begin JSON.parse(payload)rescue JSON::ParserError => error warn "invalid JSON: #{error.message}" {}endمتغیر محلی ساده و نماد با :name نوشته میشود؛ محدوده هرکدام را بشناسید.
آرایه با [] و hash با { key: value } تعریف میشود.
برای پیمایش collection از each، برای تبدیل از map و فیلتر از select استفاده کنید.
بلوک را با do ... end یا { ... } متناسب با خوانایی بنویسید.
متد را با def تعریف و مقدار بازگشتی را آگاهانه مشخص کنید.
کلاس را با class بسازید؛ سطح دسترسی متدها را روشن کنید.
رشته قالبی: "Hello, #{name}"; داده را قبل از استفاده در HTML ایمن کنید.
استثنای مشخص را با begin/rescue/ensure مدیریت کنید.
وابستگیها را در Gemfile تعریف و lockfile را نگه دارید.
با ruby -c نحو را بررسی و منطق مهم را در تست پوشش دهید.
برای منابع و بلوکهایی که باید آزادسازی تضمینشده داشته باشند، الگوی block و ensure را بهکار ببرید.
برای پیمایش مجموعهها از Enumerable و زنجیرهٔ کوتاه و خوانای map، select و reduce استفاده کنید.