Решение на Първа задача от Огнян Ангелов
Резултати
- 6 точки от тестове
- 0 бонус точки
- 6 точки общо
- 8 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
........ Finished in 0.00733 seconds 8 examples, 0 failures
История (4 версии и 3 коментара)
Огнян обнови решението на 10.10.2015 13:41 (преди около 10 години)
Здравей :)
Добро решение! Имам няколко препоръки:
- Харесва ми, че си разгледал и използвал хеш. В 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 (преди около 10 години)
Привет,
Благодаря за коментара. Не знаех за краткия синтаксис на хешовете. Съгласен съм с аргументите срещу "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= "Сравнявам цената с другата цена."
Така ги разбирам аз.
