zHz00 Untitled

суббота, 10 октября 2020
23:59 Проблемы тупого рефакторинга
Была функция, которая что-то считала. У неё были переменные a, b, c.

Мне нужна была другая функция, которая тоже считала бы примерно то же самое, но два раза и чуть-чуть по-разному.

Я сделал два дубликата первой функции и вписал их последовательно в новую функцию. Подумав, я назвал переменные a1, b1, c1, a2, b2, c2. Первые были для первого расчёта, вторые для второго. А потом ничего не заработало.

А почему? Потому что кроме a, b, c у меня ещё был набор глобальных захардкоженых констант для вычислений. И константы эти назывались a0, a1, a2. Мои новые переменные их перекрывали.

@темы: Программирование, Говнокод

URL
Сегодня случайно встретил Визарта. Хм... Оказывается он н...
http://www.kip.ru/s/Dekret1.jpg
Такое вот давеча было в Дневниках соседство :) Радуют ...
Мне очень дорого ночное небо, с множеством маленьких звез...
Вся боль находится внутри нас, она не существует сама по ...
Просто взять и улететь....

11.10.2020 в 05:00

11.10.2020 в 05:00
и компилятор не ругнулся на перекрытие имён?
URL

11.10.2020 в 08:37

11.10.2020 в 08:37
CD_Eater, перекрытие глобальных идентификаторов локальными -- стандартная ситуация. Предупреждение не выдаётся, т.к. это не баг, а фича. Возможно есть способ его включить, но я о нём не знаю.
URL

11.10.2020 в 10:21

11.10.2020 в 10:21
Хм.. Если эти константы использовались в новых функциях, то странно что ты этого не заметил на этапе их написания. А если не использовались, то почему сломалось? Константы не такие уж и постоянные оказались?)
URL

11.10.2020 в 19:17

11.10.2020 в 19:17
-Wall ? =]
а ещё ты сделал git blame и настучал по голове человеку, что делает глобальные константы?
URL

11.10.2020 в 19:31

11.10.2020 в 19:31
глобальные константы - это хорошо, но они должны иметь понятное и длинное название
а вот за глобальную константу a0 нужно стучать по голове
URL

11.10.2020 в 19:44

11.10.2020 в 19:44
LizardOfOzz, эти константы использовались и в старых функциях. Их нормальное использование попало в новую функцию через копипасту, которую я не стал вычитывать, потому что "да там всё работает".
korrshun, мне себя по голове бить? Нет уж. А ты предлагаешь локальные константы что ли? Это коэффициенты в некотором математическом выражении, которое в разных качествах используется в разных местах.
CD_Eater, во, про длинное название -- это дельно. Короткие получились, потому что мне принесли эти константы наши математики вместе с выражением типа y=a0*x0+a1*x1...
URL

11.10.2020 в 20:07

11.10.2020 в 20:07
> Короткие получились, потому что мне принесли эти константы наши математики вместе с выражением типа y=a0*x0+a1*x1
Я бы рассмотрел возможность оформить всё это выражение как функцию с понятным названием и константами, скрытыми внутри.
URL

11.10.2020 в 21:12

11.10.2020 в 21:12
zHz00, я себя регулярно по голове бью за сделанные ранее глупости. это норма.

В общем случае да, константы именовать посемантичнее и делать их как можно более локальными. Я после того как стукнулся головой об нечто аналогичное, всегда их объявляю локально. (хотя этож сишечка, у вас их там можно ненароком переписать :()

Ну и да, логично написать какую-нибудь inline-функцию для сложных мат. портянок, если они повторяются из раза в раз.
Хм. хотя тут сложный момент, т.к. когда приходится матан кодить, то там чтоб записать какое-нибудь численное интегрирование, приходится небольшую простынку написать для этого вместо одной строки в оригинальной формуле. Но когда формула повторяется один в один, то 100% лучше инкапсулировать, и пусть компилятор это инлайнить пытается. Случаются, правда, серьёзные ограничения на if вычислительном коде, т.е. если оно почти такое, но другое, то возможно придётся копипастить, что печально. А скопипастить с константами нельзя там, или вы жестите и через них подгоняете под реальный мир, компилируя код под конкретную установку? Это тоже очень печально и лучше так не делать, т.к. это не константы на самом деле.
URL

12.10.2020 в 15:32

12.10.2020 в 15:32
Я бы сделал глобальные константы с длинными и понятными именами, а внутри локальной функции создал бы для них короткие алиасы, например, по конст ссылке.
URL

12.10.2020 в 16:16

12.10.2020 в 16:16
Foul thing, ооо, отличная идея!
korrshun,
>>А скопипастить с константами нельзя там, или вы жестите и через них подгоняете под реальный мир, компилируя код под конкретную установку?


Скопипастить можно, но не нужно. Хотя шансы того, что константы эти будут меняться когда либо вообще -- крайне малы.
URL
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии