Решение на Първа задача от Георги Стефанов
Към профила на Георги Стефанов
Резултати
- 6 точки от тестове
- 0 бонус точки
- 6 точки общо
- 8 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
........ Finished in 0.00712 seconds 8 examples, 0 failures
История (4 версии и 4 коментара)
Георги обнови решението на 10.10.2015 12:03 (преди около 9 години)
Здравей :)
Няколко бързи коментара:
- Празните редове в началото и края на методите са излишни. Не помагат за прегледността на кода, а само го разширяват.
- Помисли дали няма да е по-добре ако използваш
case ... when ...
илиif ... elsif ... else ...
. Също така в момента имаш доста дублиране наprice =
. Подсещам, че всичко е израз и връща резултат - дориif
иcase
. Краткотодействие if условие
обикновено се използва за единични проверки, когато има граничен случай за нещо. Не е особено прегледно за повече от една проверка от един вид. - Последното присвояване
price = price.round(2)
е излишно. Променливатаprice
не я използваш след това. Защо не простоprice.round(2)
? - Умножението с
1.0000
също е излишно. Защо ти е изобщо този ред? -
first_price
иsecond_price
според мен звучат по-добре отprice_1
иprice_2
. Какво мислиш за това?
Можеш да предадеш колкото искаш решения, като ние ще оценяваме само последното. Все още имаш възможност да го подобриш :)
Георги обнови решението на 10.10.2015 19:02 (преди около 9 години)
Благодаря за важните забележки!
Смених if-а с case, като поправих и дублирането на "price =". Бял поставил случай, в който сме въвели bgn, но не се сетих, че всъщност няма проблем за метода ако няма дефинирано действие за тази стойност на параметъра. Сега с case съм го сложил на else - това е случаят, в който се въвежда bgn, защото иначе case ще върне nil, нали така?
Относно имената на параметрите в compare_prices - съгласен съм, че е доста по-четливо когато се ползва "first" и "second", но 13-ти ред става повече от 80 символа: мога да го пренеса, но не знам дали стилистично е по-добре.
Естествено ще помисля малко повече върху задачата.
Супер стана :)
Сега с case съм го сложил на else - това е случаят, в който се въвежда bgn, защото иначе case ще върне nil, нали така?
В момента с else
ще върне просто цената, каквато е била ако е подадена невалидна валута. Иначе ако беше с проверка и без else
щеше да върне nil
, да. И двата варианта са ОК в случая, защото не сме дефинирали конкретно поведение за този случай => ползваме това, което е най-лесно и прегледно за решението.
Относно дължината на реда - може да го пренесеш
convert_to_bgn(price_1, currency_1) <=>
convert_to_bgn(price_2, currency_2)
или (по-добре) - да си запазиш двата резултата в променливи и да ги сравниш след това :)
Георги обнови решението на 10.10.2015 22:12 (преди около 9 години)
:D Да видим, така също изглежда добре. Не успях да измисля по-удачни имена на променливите first_price_bgn и second_price_bgn.