學習軌道
/
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)

如果我們想阻止這個關閉流程,就需要對例外做出反應。這就叫做「rescuing」例外:

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. 處理除以零的例外

請更新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,透過 21 個概念121 個練習 和真人引導來學習並精通 Ruby,全部免費。