مسیرها
/
Ruby
Ruby
/
تمرین‌ها
/
ماشین‌حساب ساده
ماشین‌حساب ساده

ماشین‌حساب ساده

تمرین یادگیری

مقدمه

استثناها در Ruby، مانند بسیاری از زبان‌ها، راهی برای برخورد با رویدادهای غیرمنتظره فراهم می‌کنند. مدیریت درست استثناها زمانی مهم است که بخواهید جلوی از کار افتادن برنامه‌تان را بگیرید.

وقتی استثنایی ایجاد می‌شود، چه با ایجاد صریح آن و چه با ایجاد آن توسط مفسر Ruby، برنامه از روند عادی خود خارج می‌شود و در نهایت با یک پیام خطا پایان می‌یابد:

raise ArgumentError.new("Something went wrong!")
=> Traceback (most recent call last):
.
.
ArgumentError (Something went wrong!)
1/0
=> Traceback (most recent call last):
.
.
ZeroDivisionError (divided by 0)

اگر بخواهیم جلوی این فرایند خاتمه را بگیریم، باید به استثنا واکنش نشان دهیم. به این کار rescue کردن استثنا می‌گویند:

begin
  # ...any code that raises an exception
rescue
  puts 'Got an exception'
end

این برنامه از کار نمی‌افتد و «Got an exception» را نمایش می‌دهد. Ruby به جای خروج، کد داخل بلوک rescue را اجرا می‌کند که پیامی را چاپ می‌کند.

مانند هر چیز دیگری در Ruby، استثناها هم شیء هستند و معمولاً داده‌هایی درباره‌ی خود استثنا نگه می‌دارند. این‌گونه می‌توانیم شیء استثنا را به دست آوریم:

begin
  # ...any code that raises an exception
rescue => e
  puts "Exception class: #{ e.class.name }"
  puts "Exception Message:#{e.message}"
end

در Ruby همچنین می‌توانید استثناهای خودتان را ایجاد کنید. برای مثال:

begin
  raise ArgumentError.new("Invalid argument")
rescue ArgumentError => e
  puts e.message
end

استثنای قبلی یکی از استثناهای داخلی Ruby است، اما می‌توان استثناهای سفارشی هم تعریف کرد و آن‌ها را ایجاد کرد:

class CustomError < StandardError
end

raise CustomError.new("Something went wrong")

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

در این تمرین، مدیریت خطا را برای یک ماشین‌حساب ساده می‌سازید.

هدف این است که یک ماشین‌حساب کارآمد داشته باشید که با گرفتن آرگومان‌های 16، 51 و +، رشته‌ای با الگوی زیر برگرداند: 16 + 51 = 67.

SimpleCalculator.calculate(16, 51, "+")
# => "16 + 51 = 67"
SimpleCalculator.calculate(32, 6, "*")
# => "32 * 6 = 192"
SimpleCalculator.calculate(512, 4, "/")
# => "512 / 4 = 128"

1. رسیدگی به کدی که ممکن است در متد calculate خطا ایجاد کند

متد اصلی برای پیاده‌سازی در این تمرین، متد کلاس SimpleCalculator.calculate() خواهد بود. این متد سه آرگومان می‌گیرد. دو آرگومان اول اعدادی هستند که قرار است عملیاتی روی آن‌ها انجام شود. آرگومان سوم از نوع رشته است و برای این تمرین لازم است عملیات زیر پیاده‌سازی شوند:

  • جمع با استفاده از رشته‌ی +
  • ضرب با استفاده از رشته‌ی *
  • تقسیم با استفاده از رشته‌ی /

2. رسیدگی به عملیات غیرمجاز

متد SimpleCalculator.calculate() را به‌روزرسانی کنید تا برای نمادهای عملیات ناشناخته، یک «استثنا»ی UnsupportedOperation ایجاد کند.

SimpleCalculator.calculate(1, 2, '-')
# => Raises an UnsupportedOperation
Note

در این تمرین، انتظار می‌رود استثنای UnsupportedOperation را برای یک محدوده‌ی مشخص تعریف کنید.

3. رسیدگی به آرگومان‌های نامعتبر

متد SimpleCalculator.calculate() را به‌روزرسانی کنید تا برای نوع‌های نامعتبر آرگومان، یک استثنای ArgumentError ایجاد کند.

SimpleCalculator.calculate(1, '2', '*')
# => Raises an ArgumentError

4. رسیدگی به استثناهای DivideByZero

SimpleCalculator.calculate() را به‌روزرسانی کنید تا استثناهای ZeroDivisionError را مدیریت کند. کد مدیریت باید رشته‌ای با محتوای Division by zero is not allowed. برگرداند. هیچ استثنای دیگری نباید توسط متد SimpleCalculator.calculate() مدیریت شود.

SimpleCalculator.calculate(512, 0, "/")
# => returns "Division by zero is not allowed."
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Ruby Exercism

آماده‌اید ماشین‌حساب ساده را شروع کنید؟

در Exercism ثبت‌نام کنید تا Ruby را همراه با 21 مفهوم121 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.