Михаела обнови решението на 10.10.2015 23:06 (преди около 10 години)
+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)в променлива и да използваш това. :) - Има някаква асиметрия в
pricevssecond_priceиcurrencyvssecond_currency. Няма ли да е по-добре ако саfirst_priceиsecond_price? - В Ruby всичко е израз и връща стойност - дори
case. Тоест можеш да присвоиш резултата отcaseна променлива и после да го използваш. Можеш ли да използваш това знание, за да премахнеш малко дублиране на код? :)
Напомням, че до крайния срок можеш да ни изпращаш колкото искаш решения. :)
