Решение на Първа задача от Христина Тодорова

Обратно към всички решения

Към профила на Христина Тодорова

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 8 успешни тест(а)
  • 0 неуспешни тест(а)

Код

def convert_to_bgn(price, currency)
case
when currency == :usd
result = price * 1.7408
when currency == :eur
result = price * 1.9557
when currency == :gbp
result = price * 2.6415
else
result = price
end
result.round(2)
end
def compare_prices(first_price, first_currency, second_price, second_currency)
convert_to_bgn(first_price, first_currency) -
convert_to_bgn(second_price, second_currency)
end

Лог от изпълнението

........

Finished in 0.00639 seconds
8 examples, 0 failures

История (2 версии и 2 коментара)

Христина обнови решението на 09.10.2015 20:33 (преди над 8 години)

+def convert_to_bgn(price, currency)
+ if currency == :usd
+ price = price*1.7408
+ end
+ if currency == :eur
+ price = price*1.9557
+ end
+ if currency == :gbp
+ price = price*2.6415
+ end
+ return price.round(2)
+end
+def compare_prices(first_price, first_currency, second_price, second_currency)
+ if first_currency != :bgn
+ first_price = convert_to_bgn(first_price, first_currency)
+ end
+ if second_currency != :bgn
+ second_price = convert_to_bgn(second_price, second_currency)
+ end
+ return first_price-second_price
+end

Привет :)

Няколко неща могат да се подобрят по решението ти:

  • Индентация. Виж отново изискванията за стил.

  • White space. Оставяй празно място около оператори като +, - и т.н. Може да използваш празни редове за да си разделяш смислово функциите на части. Оставяй празни редове и между дефинициите на функциите.

  • Погледни как се ползва case конструкцията, може да направи първата функция по-приятна за четене.

  • Нямаш нужда от return statement накрая на фунциите. В руби последния оценен израз от тялото на функцията е нейна върната стойност.

  • Опитай се да не преизползваш променливи по този начин. Когато чета convert_to_bgn, виждам "Ако валутата е евро, цената се променя на цената * 1.9557". Цената всъщност не се променя, просто имаш друга нейна версия, която е гарантирано в лева
  • Хвърли едно око на style guide-a. Имаш дребни нарушения (space-ове около оператори, нов ред между дефиниция на методи, една индентация навътре в тялото на if, експлицитни return-и)
  • Нужни ли са проверките в compare_prices, след като convert_to_bgn се оправя и с левове?
  • Всички тези проверки и присвоявания в convert_to_bgn изглеждат леко вербозно. Можеш да ги DRY-неш като използваш case ("switch"-ът в Ruby) или hash-ове

Христина обнови решението на 10.10.2015 23:09 (преди над 8 години)

def convert_to_bgn(price, currency)
- if currency == :usd
- price = price*1.7408
+ case
+ when currency == :usd
+ result = price * 1.7408
+
+ when currency == :eur
+ result = price * 1.9557
+
+ when currency == :gbp
+ result = price * 2.6415
+
+ else
+ result = price
+
end
- if currency == :eur
- price = price*1.9557
- end
- if currency == :gbp
- price = price*2.6415
- end
- return price.round(2)
+ result.round(2)
end
+
def compare_prices(first_price, first_currency, second_price, second_currency)
- if first_currency != :bgn
- first_price = convert_to_bgn(first_price, first_currency)
+ convert_to_bgn(first_price, first_currency) -
- end
+ convert_to_bgn(second_price, second_currency)
- if second_currency != :bgn
+end
- second_price = convert_to_bgn(second_price, second_currency)
- end
- return first_price-second_price
-end