دو نوع رایجترین عدد در Ruby عبارتاند از:
-6، 0، 1، 25، 976 و 500000.-2.4، 0.1، 3.14، 16.984025 و 1024.0.این اعداد از طریق کلاسهای Integer و Float پیادهسازی میشوند.
این کلاسها متدهایی دارند که مقادیر را از یکی به دیگری تبدیل میکنند. اعداد Integer به یک واحد کامل دقیقاند، در حالی که دقت Float کسری نسبت به یک عدد کامل است:
Integer#to_f: تبدیل به یک عدد اعشاری جدیدFloat#ceil: گرد کردن به بالا تا نزدیکترین عدد صحیحFloat#floor: گرد کردن به پایین تا نزدیکترین عدد صحیحFloat#round: گرد کردن به نزدیکترین عدد صحیحFloat#to_i: بریدن تا نزدیکترین عدد صحیحRuby چیزهایی دارد که به آنها عبارات کنترل جریان میگویند؛ اینها برای کنترل نحوهی اجرای برنامه به کار میروند و یک مقدار درستنما یا غلطنما میگیرند. عملگرهایی هم وجود دارند که میتوان با آنها مقادیر درستنما یا غلطنما ساخت؛ به اینها عملگرهای مقایسه میگویند.
دو عبارت کنترلی اصلی وجود دارند که تعیین میکنند کدام کد اجرا شود و کدام نشود؛ به بیان دیگر، کدام شاخهی دادهشده اجرا شود.
این دو عبارتاند از: if و عبارت unless.
از عملگرهای مقایسه برای مقایسهی مقادیر و برگرداندن مقدار true یا false استفاده میشود.
عملگرهای زیر نیاز دارند دو مقداری که با هم مقایسه میشوند از یک نوع باشند.
اگر مقادیر از یک نوع نباشند، کامپایلر خطا میدهد.
در ادامه فهرستی از این عملگرها و مثالی از زمانی که مقدار true میدهند آمده است:
| متد | توضیح | مثال |
|---|---|---|
| < | کوچکتر از | 4 < 5 |
| <= | کوچکتر یا مساوی | 4 <= 4 |
| > | بزرگتر از | 3 > 1 |
| >= | بزرگتر یا مساوی | 2 >= 2 |
برخلاف عملگرهایی که پیشتر گفته شد، از عملگرهای مساوی و نامساوی میتوان برای مقایسهی هر نوع مقداری استفاده کرد.
عملگر == برای بررسی برابری دو مقدار به کار میرود و نوع مقدار را هم بررسی میکند.
عملگر != هم به همین شکل کار میکند، اما اگر مقادیر نامساوی باشند true و اگر مساوی باشند false برمیگرداند.
در ادامه فهرستی از عملگرهای مساوی و نامساوی و مثالی از زمانی که مقدار true میدهند آمده است:
| متد | توضیح | مثال |
|---|---|---|
| == | مساوی | 4 == 4 |
| != | نامساوی | 5 != 4 |
دستور if برای بررسی این به کار میرود که یک شرط دادهشده «درستنما» است یا «غلطنما».
اگر شرط درستنما باشد، کد داخل دستور if اجرا میشود.
یک دستور if با کلیدواژهی end پایان مییابد.
value = 1
if value == 1
"1 is equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
end
# => nil
دستور unless بسیار شبیه دستور if کار میکند، اما کد داخل دستور unless را زمانی اجرا میکند که شرط غلطنما باشد.
value = 1
unless value == 1
"1 is not equal to 1"
end
# => nil
unless value > 2
"1 is not greater than 2"
end
# => "1 is not greater than 2"
دستور else میتواند همراه با دستور if به کار رود.
دستور else اگر شاخهی if اجرا نشود، اجرا میشود.
value = 1
if value == 1
"1 is equal to 1"
else
"1 is not equal to 1"
end
# => "1 is equal to 1"
دستور elsif میتواند همراه با دستور if به کار رود.
دستور elsif زمانی اجرا میشود که شاخهی if اجرا نشود و شرط دستور elsif درستنما باشد.
دستورهای elsif را میتوان به هم زنجیره کرد و نخستین شرط درستنما اجرا میشود.
همچنین میتوان یک دستور else در انتهای دستور if قرار داد که اگر هیچیک از دستورهای پیشین درست نبوده باشد، اجرا میشود.
value = 1
if value != 1
"1 is not equal to 1"
elsif value > 2
"1 is greater than 2"
else
"1 is not equal to 1 and 1 is not greater than 2"
end
# => "1 is not equal to 1 and 1 is not greater than 2"
در این تمرین کدی مینویسید که تولید یک خط مونتاژ در یک کارخانهی خودروسازی را تحلیل کند.
سرعت خط مونتاژ میتواند از 0 (خاموش) تا 10 (حداکثر) متغیر باشد.
در کندترین سرعتش (1)، هر ساعت 221 خودرو تولید میشود.
تولید بهصورت خطی با سرعت افزایش مییابد.
بنابراین با تنظیم سرعت روی 4، باید هر ساعت 4 * 221 = 884 خودرو تولید کند.
اما سرعتهای بالاتر احتمال تولید خودروهای معیوب را افزایش میدهد، خودروهایی که در این صورت باید دور انداخته شوند.
جدول زیر نشان میدهد که سرعت چگونه بر نرخ موفقیت تأثیر میگذارد:
1 تا 4: نرخ موفقیت ۱۰۰٪.5 تا 8: نرخ موفقیت ۹۰٪.9: نرخ موفقیت ۸۰٪.10: نرخ موفقیت ۷۷٪.دو کار پیش رو دارید.
متد AssemblyLine#production_rate_per_hour را پیادهسازی کنید تا نرخ تولید خط مونتاژ را در هر ساعت، با در نظر گرفتن نرخ موفقیتش، محاسبه کند.
توجه داشته باشید که مقدار بازگشتی نمونهای از Float است.
AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4
متد AssemblyLine#working_items_per_minute را پیادهسازی کنید تا محاسبه کنید در هر دقیقه چند خودروی کامل و سالم تولید میشود.
توجه داشته باشید که مقدار بازگشتی نمونهای از Integer است.
AssemblyLine.new(6).working_items_per_minute
#=> 19