Была функция, которая что-то считала. У неё были переменные a, b, c.
Мне нужна была другая функция, которая тоже считала бы примерно то же самое, но два раза и чуть-чуть по-разному.
Я сделал два дубликата первой функции и вписал их последовательно в новую функцию. Подумав, я назвал переменные a1, b1, c1, a2, b2, c2. Первые были для первого расчёта, вторые для второго. А потом ничего не заработало.
А почему? Потому что кроме a, b, c у меня ещё был набор глобальных захардкоженых констант для вычислений. И константы эти назывались a0, a1, a2. Мои новые переменные их перекрывали.
Мне нужна была другая функция, которая тоже считала бы примерно то же самое, но два раза и чуть-чуть по-разному.
Я сделал два дубликата первой функции и вписал их последовательно в новую функцию. Подумав, я назвал переменные a1, b1, c1, a2, b2, c2. Первые были для первого расчёта, вторые для второго. А потом ничего не заработало.
А почему? Потому что кроме a, b, c у меня ещё был набор глобальных захардкоженых констант для вычислений. И константы эти назывались a0, a1, a2. Мои новые переменные их перекрывали.
11.10.2020 в 05:00
11.10.2020 в 08:37
11.10.2020 в 10:21
11.10.2020 в 19:17
а ещё ты сделал git blame и настучал по голове человеку, что делает глобальные константы?
11.10.2020 в 19:31
а вот за глобальную константу a0 нужно стучать по голове
11.10.2020 в 19:44
korrshun, мне себя по голове бить? Нет уж. А ты предлагаешь локальные константы что ли? Это коэффициенты в некотором математическом выражении, которое в разных качествах используется в разных местах.
CD_Eater, во, про длинное название -- это дельно. Короткие получились, потому что мне принесли эти константы наши математики вместе с выражением типа y=a0*x0+a1*x1...
11.10.2020 в 20:07
Я бы рассмотрел возможность оформить всё это выражение как функцию с понятным названием и константами, скрытыми внутри.
11.10.2020 в 21:12
В общем случае да, константы именовать посемантичнее и делать их как можно более локальными. Я после того как стукнулся головой об нечто аналогичное, всегда их объявляю локально. (хотя этож сишечка, у вас их там можно ненароком переписать )
Ну и да, логично написать какую-нибудь inline-функцию для сложных мат. портянок, если они повторяются из раза в раз.
Хм. хотя тут сложный момент, т.к. когда приходится матан кодить, то там чтоб записать какое-нибудь численное интегрирование, приходится небольшую простынку написать для этого вместо одной строки в оригинальной формуле. Но когда формула повторяется один в один, то 100% лучше инкапсулировать, и пусть компилятор это инлайнить пытается. Случаются, правда, серьёзные ограничения на if вычислительном коде, т.е. если оно почти такое, но другое, то возможно придётся копипастить, что печально. А скопипастить с константами нельзя там, или вы жестите и через них подгоняете под реальный мир, компилируя код под конкретную установку? Это тоже очень печально и лучше так не делать, т.к. это не константы на самом деле.
12.10.2020 в 15:32
12.10.2020 в 16:16
korrshun,
>>А скопипастить с константами нельзя там, или вы жестите и через них подгоняете под реальный мир, компилируя код под конкретную установку?
Скопипастить можно, но не нужно. Хотя шансы того, что константы эти будут меняться когда либо вообще -- крайне малы.