A kivételek a Rubyben, akárcsak sok más nyelvben, a váratlan események kezelésének egy módját adják. Ha meg akarod akadályozni, hogy a programod összeomoljon, fontos, hogy megfelelően kezeld a kivételeket.
Amikor kivétel keletkezik, akár explicit módon dobod, akár a Ruby-értelmező dobja, a program letér a normál működés útjáról, és végül egy hibaüzenettel kilép:
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)
Ha meg akarjuk állítani ezt a leállási folyamatot, reagálnunk kell a kivételre. Ezt nevezik a kivétel „elkapásának”:
begin
# ...any code that raises an exception
rescue
puts 'Got an exception'
end
Ez a program nem omlik össze, és kiírja, hogy „Got an exception”. Kilépés helyett a Ruby lefuttatja a rescue blokkban lévő kódot, ami kiír egy üzenetet.
Ahogy a Rubyben minden, a kivételek is objektumok, és általában adatokat tárolnak a kivételről. Így juthatunk hozzá a kivétel objektumához:
begin
# ...any code that raises an exception
rescue => e
puts "Exception class: #{ e.class.name }"
puts "Exception Message:#{e.message}"
end
A Rubyben saját kivételeket is dobhatsz. Például:
begin
raise ArgumentError.new("Invalid argument")
rescue ArgumentError => e
puts e.message
end
Az előző kivétel a Ruby beépített kivételei közül való, de egyéni kivételeket is definiálhatsz, és dobhatod őket:
class CustomError < StandardError
end
raise CustomError.new("Something went wrong")
Ebben a feladatban egy egyszerű számológép hibakezelését építed fel.
A cél egy működő számológép, amely a következő mintázatú stringet adja vissza: 16 + 51 = 67, ha a 16, 51 és + argumentumokat kapja.
SimpleCalculator.calculate(16, 51, "+")
# => "16 + 51 = 67"
SimpleCalculator.calculate(32, 6, "*")
# => "32 * 6 = 192"
SimpleCalculator.calculate(512, 4, "/")
# => "512 / 4 = 128"
calculate metóduson belülEbben a részfeladatban a fő megvalósítandó metódus a SimpleCalculator.calculate() osztálymetódus lesz.
Három argumentumot vár.
Az első két argumentum az a két szám, amelyeken a műveletet elvégzed.
A harmadik argumentum string típusú, és ehhez a feladathoz a következő műveleteket kell megvalósítanod:
+ stringgel* stringgel/ stringgelFrissítsd a SimpleCalculator.calculate() metódust, hogy ismeretlen műveleti jelek esetén UnsupportedOperation kivételt dobjon.
SimpleCalculator.calculate(1, 2, '-')
# => Raises an UnsupportedOperation
Ebben a feladatban a UnsupportedOperation kivételt egy adott scope-ra kell definiálnod.
Frissítsd a SimpleCalculator.calculate() metódust, hogy érvénytelen argumentumtípusok esetén ArgumentError kivételt dobjon.
SimpleCalculator.calculate(1, '2', '*')
# => Raises an ArgumentError
Frissítsd a SimpleCalculator.calculate() metódust, hogy kezelje a ZeroDivisionError kivételeket.
A kezelő kódnak a Division by zero is not allowed. tartalmú stringet kell visszaadnia.
A SimpleCalculator.calculate() metódus más kivételt ne kezeljen.
SimpleCalculator.calculate(512, 0, "/")
# => returns "Division by zero is not allowed."
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Ruby nyelvet 21 fogalom121 feladat segítségével, valódi emberi mentorálással, mindez ingyen.