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

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

Към профила на Ивайло Христов

Резултати

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

Код

EXCHANGE_RATES = {
bgn: 1.0,
usd: 1.7408,
eur: 1.9557,
gbp: 2.6415
}
def convert_to_bgn(price, currency)
(price * EXCHANGE_RATES[currency]).round(2)
end
def compare_prices(price_a, currency_a, price_b, currency_b)
convert_to_bgn(price_a, currency_a) <=> convert_to_bgn(price_b, currency_b)
end

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

........

Finished in 0.00844 seconds
8 examples, 0 failures

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

Ивайло обнови решението на 09.10.2015 00:23 (преди около 9 години)

+EXCHANGE_RATES = {
+ BGN: 1.0,
+ USD: 1.7408,
+ EUR: 1.9557,
+ GBP: 2.6415
+}
+
+def convert_to_bgn(value, currency)
+ (value * EXCHANGE_RATES.fetch(currency.upcase)).round(2)
+end
+
+def compare_prices(value_a, currency_a, value_b, currency_b)
+ convert_to_bgn(value_a, currency_a) <=> convert_to_bgn(value_b, currency_b)
+end

Две дребни забележки:

  • Защо currency символите в EXCHANGE_RATES са uppercase? Направи ги lowercase и няма да има нужда да upcase-ваш постоянно.
  • Няма нужда от fetch в случая. Ползвай Hash#[]

Иначе, супер! Това е решението, което очаквахме.

Ивайло обнови решението на 09.10.2015 11:33 (преди около 9 години)

EXCHANGE_RATES = {
- BGN: 1.0,
- USD: 1.7408,
- EUR: 1.9557,
- GBP: 2.6415
+ bgn: 1.0,
+ usd: 1.7408,
+ eur: 1.9557,
+ gbp: 2.6415
}
def convert_to_bgn(value, currency)
- (value * EXCHANGE_RATES.fetch(currency.upcase)).round(2)
+ (value * EXCHANGE_RATES[currency]).round(2)
end
def compare_prices(value_a, currency_a, value_b, currency_b)
convert_to_bgn(value_a, currency_a) <=> convert_to_bgn(value_b, currency_b)
end

Добри имена си дал. И нали знаеш?

There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Karlton

Иначе ето аз как бих разсъждавал над именуването за тази задача:

Първата функция се нарича convert_to_bgn. Тя трябва да получава като аргументи цена и валута.

Това като си го преведа -> price, currency -> и ето ми ги имената на параметрите на първата функция.

А за втората функция имаме:

Втората функция се казва compare_prices и има за цел да сравнява две цени, взимайки под внимание валутите им. Аргументите, които приема са:

  • Първа цена
  • Валута на първата цена
  • Втора цена
  • Валута на втората цена

Пак си превеждам и получавам: first_price, first_price_currency, second_price, second_price_currency.

Извод: Идеята е, че избирам имена максимално близки до домейна (областта) на проблема (в случая задачата).

Ивайло обнови решението на 10.10.2015 11:34 (преди около 9 години)

EXCHANGE_RATES = {
bgn: 1.0,
usd: 1.7408,
eur: 1.9557,
gbp: 2.6415
}
-def convert_to_bgn(value, currency)
- (value * EXCHANGE_RATES[currency]).round(2)
+def convert_to_bgn(price, currency)
+ (price * EXCHANGE_RATES[currency]).round(2)
end
-def compare_prices(value_a, currency_a, value_b, currency_b)
- convert_to_bgn(value_a, currency_a) <=> convert_to_bgn(value_b, currency_b)
+def compare_prices(price_a, currency_a, price_b, currency_b)
+ convert_to_bgn(price_a, currency_a) <=> convert_to_bgn(price_b, currency_b)
end