Христина качи първо решение на 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)(без;накрая).