Христина качи първо решение на 04.11.2019 18:57 (преди почти 6 години)
Добро решение, но е добре след като го напишеш и се подсигуриш че работи, да минеш 1-2 пъти през него и да помислиш дали има начини да го направиш по-ясно и дали има излишен код, който можеш да премахнеш. Примерно, имаш немалко ненужни променливи -- понякога е напълно ок да присвоиш някакъв израз на променлива с цел яснота, но в случая не мисля, че това се получава.
Избора на имена на функции и променливи е учудващо труден и включва опит и интуиция -- експериментирай и си задавай въпроси. Разгледай и решения на колеги за вдъхновение.
Няма нужда от стойността
boolval
. Този код може доста по-просто да се напише така:Съхраняването на стойността в променлива не подобрява четимостта, понеже самата променлива няма интересна стойност, която използваме за нещо или която съхраняваме. Дори и в if-клаузата не си заслужава да върнем
boolval
-- ако сме влезли в if-клаузата, то със сигурностboolval
ще еfalse
, така чеreturn false
по-ясно указва какво искаме да изразим с този код.Този коментар би могъл да се преведе до по-ясно име на функцията:
digit_vector
или даже простоdigits
, понеже сигнатурата на функцията си връщаVec<u32>
. Името "char vector to u32 vector" вече е изразено в типовете на функцията -- приемаVec<char>
, връщаVec<u32>
. Няма нужда функцията да го повтаря. Това, че връща цифри е нова и интересна информация за това как превежда тези char-ове до u32-та.Пак --
to_dec
не е съвсем очевидно какво прави. Конвертира вектора от числа в едно число, но как? Като цифри? Не, като "decimal sum of the digits", така че може би имаше повече смисъл да се наречеdigit_sum
илиsum_of_digits
илиsum_digits
(като глагол). Защо не "dec" в името? Реално тази функция не ти дава десетична сума, тя просто сумира входните числа, така чеdec
може би дори е малко подвеждащо име.Коментара е подвеждащ -- входа "сума" ли е? Може би в контекста където е извикана функцията, но не в контекста на самата функция. Тя просто приема число и връща цифрите му в дадената бройна система -- няма нужда да мислим за "сума" като четем тази функция.
Няма нужда от тази временна променлива -- тялото на функцията можеше да бъде просто
calc(&input, 10)
(без;
накрая).