Справедливости ради - некоторые языки не допускают декларации переменных без инициализации. Хотя, конечно, используя глобальные переменные можно добиться невероятных девиаций поведения функций :) В тех же плюсах передача аргументов по ссылке требует железного здоровья при отладке.
Так как раз при создании я и инициализировал. Поэтому в функции, которая суммировала (долго объяснять что) я из не инициализировал. Ну а когда я стал использовать функцию не один раз в программе, а несколько, то получил мистическую проблему над которой несколько часов бился. :)
мораль другая: функция не должна использовать глобальных переменных без особой надобности. а если переменная должна быть обнулена, то стоит инициализировать эту переменную внутри функции или внутри конструктора класса, содержащего эту функцию и затем передавать результат вычислений вызывающему методу.
Вообще то, если переменная должна быть обнулена, то её надо обнулять в начале функции, а не надеяться на конструкторы. Переменные то надо передать другим функциям для дальнейшей работы.
Да ничего хитрого. Сумма зависит от некоторых переменных (a, b, c ...). Первоначально программа считала сумму один раз, а параметры задавались снаружи. А потом я стал менять параметры внутри программы. На самом деле всё было немного сложнее. Там была сумма 4 величин. Потом из них комбинировалось одно число, которое я максимизирую. Ну а параметров у меня 21*9+1. Но это всё внутренние вопросы, в которые я не хотел углубляться.
Ну и как могут особо помочь private переменные? Зачем мне лишний раз создавать переменную с нуля? Мне же надо её запомнить для дальнейшей работы и обнулить в начале нового цикла. Так я лучше прямо возьму и обнулю спецфункцией дублирующей конструктор. И у меня не будет болеть голова о том, что обнуление произойдёт не там, где надо.
Comments 11
Reply
Reply
Reply
Reply
функция не должна использовать глобальных переменных без особой надобности.
а если переменная должна быть обнулена, то стоит инициализировать эту переменную внутри функции или внутри конструктора класса, содержащего эту функцию и затем передавать результат вычислений вызывающему методу.
Reply
Reply
Reply
Ну и как могут особо помочь private переменные? Зачем мне лишний раз создавать переменную с нуля? Мне же надо её запомнить для дальнейшей работы и обнулить в начале нового цикла. Так я лучше прямо возьму и обнулю спецфункцией дублирующей конструктор. И у меня не будет болеть голова о том, что обнуление произойдёт не там, где надо.
Reply
Leave a comment