Решение на Първа задача от Огнян Ангелов
Резултати
- 6 точки от тестове
- 0 бонус точки
- 6 точки общо
- 8 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
........ Finished in 0.00733 seconds 8 examples, 0 failures
История (4 версии и 3 коментара)
Огнян обнови решението на 10.10.2015 13:41 (преди около 9 години)
Здравей :)
Добро решение! Имам няколко препоръки:
- Харесва ми, че си разгледал и използвал хеш. В Ruby има по-кратък запис за хешове с ключове, които са символи:
{bgn: 1, usd: 1.7408, ...}
- препоръчително е да се използва той, когато е възможно. - Не ми допада името на променливата
val
. За това има две причини:- Какво е
val
? Защо неvalue
? Два символа толкова ли ще спестят и дали си заслужава? Ако да, защо нямаcurr
вместоcurrency
?curr
ще спести 4 букви :) Може направоc
. Къде е границата? :) -
value
означавастойност
. Добре, променливата съдържа стойност. Каква стойност? Всяка една променлива може да се кръстиvalue
и името ѝ няма да дава никаква информация за съдържанието. Според менprice
ще бъде по-ясно описание. :)
- Какво е
- В
compare_prices
втората част от променливите започват сcompared
. Това означава, че те се сравняват. Първите няматcompared
. Означава ли това, че не се сравняват? :) Това дали се сравняват не е нещо разграничаващо за двете двойки аргументи. Може да ги разграничиш по друг начин - напримерfirst_price
иsecond_price
. Сравняваш първата цена с втората. -
converted
също не е особено описателно. Конвертирано какво? От какво? В какво?price_in_bgn
би отговорило на тези въпроси.
Тези коментари може да ти се сторят дребнави, но имената на променливи и функции са едно от най-важните неща за четимостта на кода. Стреми се да измисляш максимално описателни имена, за да не се налага хората, които четат кода да си задават въпроси, чиито отговор трябва да намерят ровейки из кода. За тази задача е очевидно какво се случва дори имената да са a
, b
, c
и т.н., но в един малко по-сложен код няма да е така.
Напомням, че все още имаш възможност да подобриш кода и да ни изпратиш ново решение :) И ако не си съгласен с някой от коментарите сподели, за да го дискутираме. Целта не е да се съгласиш безусловно, а в дискусия да се зароди истината. :)
Огнян обнови решението на 10.10.2015 16:45 (преди около 9 години)
Привет,
Благодаря за коментара. Не знаех за краткия синтаксис на хешовете. Съгласен съм с аргументите срещу "val" също и за "converted".
Не съм сигурен относно префикса на аргументите - "compared". Не виждам как имена като "first_x", "second_x", "x1", "x2", etc. са ясни и спомагат за четимостта на кода (Първоначално така ги бях кръстил). Идеята на compared е, че ние сравняваме две суми една спрямо друга (amount compared to another amount). Не ми звучи добре compared_to_amount за това реших да го оставя така.
Поздрави
Супер, така е доста по-добре :)
Логиката ми за compared
е, че това е като някаква характеристика, която я даваш на втората цена - тя се сравнява. Но не я даваш на първата. Това за мен означава, че първата цена не се сравнява. Реално и двете цени са compared
, защото се сравняват една с друга. Тоест трябва да ги различим не по тяхна характеристика, а по нещо друго.
-
first_price
,second_price
= "Сравнявам първата цена с втората цена." -
price_one
,price_two
= "Сравнявам цена едно с цена две." -
price
,compared_price
= "Сравнявам цената със сравнената цена." -
price
,another_price
= "Сравнявам цената с другата цена."
Така ги разбирам аз.