Теодор обнови решението на 14.10.2016 23:18 (преди около 8 години)
Защо ти е да конвертираш резултата от цялата сметка към тип Rational
? Ако така избягваш закръглянето от целочисленото делене, може вместо да умножаваш по 5 / 9, просто да разделиш на 1.8.
Може да си спестиш част от формулите като конвертираш на 2 стъпки, ползвайки някоя мерна единица за междинна - Например вместо k => f да сметнеш k => c => f. Така за всяка нова мерна единица ще трябва да добавяш само формулата за нея от и до целзий, вместо до всички останали температурни скали.
Този ред ми прилича на C++. :)
- По-добре използвай
+
вместо<<
за конкатенация. Стрелките променят стринга, към който долепяш, докато + генерира нов стринг и запазва съдържанието на аргументите си. В Ruby, за разлика от C++-подобните езици, стринговете не са масиви от знаци и това добавяне в края им изглежда неестествено. А и предпочитаме да не си променяме данните in-place, особено ако е в резултат на страничен ефект на друго наше действие. Може да видиш разликата между двата метода тук: https://ruby-doc.org/core-2.2.0/String.html#method-i-2B - Името на тази променлива е малко особено - не е фатално да изпишеш целите думи, например
conversion_function_key
, ако в замяна ще получиш по-четим код. В Ruby (а и не само) като цяло предпочитаме кодът да прилича повече на естествен език, отколкото да "икономисаме" някой символ дължина на сорса. - Малко особено изглеждат имената на ключовете - за предпочитане е да използваме
snake_case
, напримерf_to_k
.
Също, конвертираш стринга до символ, за да може да достъпваш елементите в хеша, които са с ключове символи. В случая не е фатално вместо това директно да дефинираш хеша така, че ключовете да са стрингове. Въпреки, че така ще се наложи да ползваш ракетки вмсрто двуеточия, ще е по-лесно да се достъпват данните в него по-надолу в кода.
Тук също може да си дефинираш хешовете със стрингове за ключове, за да си спестиш to_sym
по-надолу. А не е лошо и да ги изнесеш като константи извън методите.