Михаела обнови решението на 10.10.2015 23:06 (преди около 9 години)
+def convert_to_bgn(price, currency)
+new_price = price
+ case currency
+ when :usd
+ new_price = price * 1.7408
+ when :eur
+ new_price = price * 1.9557
+ when :gbp
+ new_price = price * 2.6415
+ end
+ new_price.round(2)
+end
+
+def compare_prices(price, currency, s_price, s_currency)
+ if convert_to_bgn(price, currency) > convert_to_bgn(s_price, s_currency)
+ 1
+ elsif convert_to_bgn(price, currency) == convert_to_bgn(s_price, s_currency)
+ 0
+ else
+ -1
+ end
+end
Здравей :)
Имам някои коментари:
- Имаш доста проблеми с индентацията на кода. Прочети отново ръководството ни по стил. Използваме по две празни места за отместване - не 1 спейс и не табове.
- Помисли дали има по-добро име за цената в левове от
new_price
.new_price
означава нова цена, но всъщност цената не е нова - старата си е, просто е преобразувана в български левове. - Нямаш нужда от проверката в
compare_prices
. Прочети за оператора<=>
. :) - Ако не бях прочел още 20 решения на същата задача, никога нямаше да се сетя какво означава
s
вs_price
. Защо си го съкратила? Ако някой ред стане прекалено дълъг винаги можеш да запазиш резултата отconvert_to_bgn(first_price, first_currency)
в променлива и да използваш това. :) - Има някаква асиметрия в
price
vssecond_price
иcurrency
vssecond_currency
. Няма ли да е по-добре ако саfirst_price
иsecond_price
? - В Ruby всичко е израз и връща стойност - дори
case
. Тоест можеш да присвоиш резултата отcase
на променлива и после да го използваш. Можеш ли да използваш това знание, за да премахнеш малко дублиране на код? :)
Напомням, че до крайния срок можеш да ни изпращаш колкото искаш решения. :)