Болталка PascalABC.NET

Если “кода много” - человек нарушает каноны структурного программирования: распечатка ни одной программной единицы не должна превышать лист, иначе код станет плохо управляем.

Зависит от того, что это за программная единица. Класс вполне может превышать. А вот для методов не рекомендуется.

не в 1 подпрограмме, а вообще, во всей программе.

А теперь еще раз, но уже по-русски, пожалуйста

Если программа большая - про то что какую то переменную в какой то функции нельзя менять - изи забыть. Комментарии конечно как то помогут, но так многовато комментариев придётся делать. А если объявить переменную константной - то предупреждать будет компилятор, это и компактнее и точно не пропустишь, не зависимо от того на сколько вы идеальный человек/робот.

Я уже говорил выше про контроль со стороны компилятора.

А тут кое-кто разделили эту писанину на две части, поэтому я не буду повторять только что написанное в параллельной ветке про “большую программу”.

Представьте себе количество таких файлов для пакета библиотек в .NET.

Тут дело не в структурировании. Ещё раз, речь не про ПОДпрограмму, то есть функцию или что то типа того. Речь про просто программу, то есть всё целиком. Все файлы исходников вместе. Вот в этом лесе, из нескольких десятков файлов, которые в сумме у меня достикали и больше 10к строк - легко забыть что в какой то 1 функции нельзя чтоб 1 переменную меняло.

Так речь же не том, что константы надо анафеме предать! Что же Вы все время передергиваете? Если это большой модуль, в нем константы, общие для модуля и пишутся. В одном месте и каждый знает, где их искать. А если константы локальные, в пределах функции, какой смысл говорить о 10К строках кода? Чтобы впечатлить количеством и отвлечь от сути? Функция-то сама маленькая, как там можно не увидеть, что менять, что нет? А главное - ЗАЧЕМ их менять?

Еще раз, наверное Вы меня не услышали, не всегда удобно в одном месте описывать, смешивая тем самым константы для различных задач. Все зависит от предназначения констант.

1 лайк

В моём проекте она может достигать 1000 строк.

И ещё раз, речь идёт не про константы вроде Pi, а про константы которые динамические переменные, которые просто нельзя менять после инициализации.

Давайте - ка перенесём это обсуждение в болталку.

Нет, ну это как раз надо разбивать на функции поменьше)) В это разобраться нереально, + оптимизации это не поможет. В IL коде все переменные или глобальные, или описываются при старте функции. И если их будет много в 1 функции - ничего хорошего из этого не выйдет (хотя это не точно, но вроде я где то читал что это плохо, когда много переменных в 1 функции).

2 лайка

А давайте потом, когда @RAlex наконец то все части услышит, потому что я только что ему не первый раз повторил всё))

“В военное время значение синуса может достигать четырех!” (с)

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

Ох уж эти обсуждения констант, к чему приводят… Товарищи, константы, причем явно объявленные - нужны, и существовать просто обязаны. Почему? Потому, что переменную, объявленную константой, компилятор может безжалостно инлайнить, что изрядно улучшает работу со стеком (переменных становится меньше) и кэшем (меньше прыжков по разным кускам памяти, мутабельность же переменной обязывает код обращаться к ней по ее адресу, что потенциально портит обращения к кэшу процессора, особенно если “константа без константности” объявлена глобально).

Кроме того, константность на уровне параметров позволяет явно указать пользователю API, что будет меняться в процессе выполнения, а что - нет. Более того, в неконстантный параметр чего либо (функции, и прочих) запрещено передавать константную переменную, что ограждает от косяков и следит за мутабельностью в принципе.

Аргумент вроде “ну как же я забуду” - бред, т.к. проекты не пишутся одним человеком. И когда я пользуюсь чьим-то API, я хочу прочитать документацию, и выполнить функцию. Не хочу читать, что там внутри, и меняет ли оно что-нибудь. И я не один такой ©

+RAlex, функции в 1000 строк надо делить по логическим кускам. Читать такое, а хуже того, отлаживать - редкостная боль. Говорю как человек, который в легаси-коде от старперов, возомнивших себя программистами (перешедших с mathcad на С++), такого насмотрелся вдоволь… Когда от числа объявленных переменных окно дебага начинает тормозить, хочется записаться к психотерапевту.

1 лайк

А с этим никто не спорит и это давно реализовано.

function F(const a:integer; b:integer; const c:integer):real;
begin
  Result:=(a+b)/c;
end;

begin
  var (x,y,z):=(1,2,8);
  F(x,y,z).Println
end.
1 лайк

Эх, если б я это понимал тогда, когда писал такое.))