Re[4]: Никогда не недооценивайте силу по умолчанию
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.09.22 17:31
Оценка: +2
Здравствуйте, vsb, Вы писали:

vsb>>>const. Параметры функций не могут быть mutable вообще.


N>>Почему? Я не могу например счётчик попыток принять и уменьшать?

N>>(Я понимаю, что скопировать нет проблем, но всё же)

vsb>Потому, что это редкий юз-кейс и путает. К примеру в одном из самых популярных codestyle для JS запрещается менять параметры. Фич должно быть как можно меньше. Если это приводит к тому, что в 1% функций ты создашь лишнюю локальную переменную — ну значит так тому и быть. Зато явно будет видно, что ты её создал, она мутабельная и можно отследить её изменения. А с параметрами можно не отслеживать и даже не смотреть на них, ты в 100% случаев знаешь, что они не меняются.


Ну вот почему-то ты сделал такое разделение. А другой скажет, что параметр функции — такая же локальная переменная, но автоматически присвоившая значение на входе. И я не вижу, чем один вариант существенно обоснованнее другого. Мне тоже _чуть-чуть_ было бы удобнее видеть, что параметры неизменяемы, но я не могу найти этому обоснования и не вижу силы за твоим обоснованием.

N>>Во всём коде функции используется kptm2, в одном месте kmpt2. Удачи в поиске. Особенно в конце спринта с рычащим тимлидом.


vsb>Если это неизменяемая переменная, то второе место не скомпилируется.


Кто из этих двоих переменных "это"?

vsb> Если это изменяемая, такой сюжет может пройти (хотя проверки вроде предупреждений о том, что значение присвоено, но не использовано, могут помочь), но изменяемых переменных априори должно быть слишком мало, чтобы это создавало проблемы на практике. Если у тебя это составляет проблему, вкупе с работающими юнит-тестами, ты что-то сильно не так делаешь.


"Что-то сильно не так делаешь" это слишком абстрактный аргумент, чтобы иметь хоть какую-то силу. Нужно, чтобы ситуации не происходило вообще, или в крайне малом количестве случаев.
А учитывая, что объявление переменной ещё и (обычно) должно задавать её тип (кроме случаев, когда ты явно разрешил компилятору автовывод типа) — то за аргументы за автосоздание переменной уходят в область бесконечно малых.

vsb>Я это не упоминал, но подразумевается, что во вложенном блоке нельзя объявить локальную переменную с тем же именем, что и снаружи. Как раз для того, чтобы исключить такую проблему.


По-моему, это не сильно связанные вещи.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.