Трюкачество как плохой код
Меня попросили ответить, что выдаст код:
Процедура ОбщийТест() Массив = Новый Массив; МойМодуль.ИзменениеМассива(Массив); Сообщить(Массив.Количество()); КонецПроцедуры //МойМодуль Процедура ИзменениеМассива(Знач Массив) Экспорт Массив.Добавить(42); КонецПроцедуры
Я сначала ответил 1, а потом заметил что Массив передается по значению и ответил 0.
На что вопрошающий радостно ответил, что я «плохо знаю 1С», мол, если массив передается по ссылке, то он все равно меняется.
Я ответил, что не использую в своей практике такие сомнительные, плохо читаемые и понимаемые по смыслу конструкции, заботясь о тех, кто будет сопровождать мой код после меня.
Вот даже попросил ИИ прокомментировать этот случай.
[Gemini 3.7 Flash 🌐]
Изменение массива, переданного по значению, но оказавшегося измеряемым внешне, не является признаком хорошего кода. Это создает скрытые побочные эффекты (side effects), усложняет отладку и нарушает принцип наименьшей неожиданности (Principle of Least Astonishment).
Поведение массива после возврата из функции в разных языках
Поведение зависит от того, передается ли «по значению» сам массив (копируются данные) или передается по значению ссылка/указатель на массив.

Как называются такие решения в программировании
⦁ Неявный побочный эффект (Implicit Side Effect): Когда функция делает что-то помимо возврата значения, о чем не написано в ее названии.
⦁ Трюкачество / Говнокод (Clever Code / Code Smell): Использование неочевидных механизмов языка ради «красоты» или экономии строк в ущерб читаемости.
⦁ Ловушка / Подводный камень (Gotcha / Pitfall): Специфическое поведение языка, в которое легко попасть по незнанию (например, неявная передача по ссылке).
⦁ Зацепление по содержанию (Content Coupling): Ситуация, когда одна часть программы напрямую меняет внутреннее состояние другой.
Для чистоты кода рекомендуется либо явно делать функцию чистой (возвращать новый массив), либо явно указывать модификацию в названии и ключевых словах (например, ref / out в C# или pass-by-reference &mut в C++/Rust).




Так ты знаешь правильный ответ в примере?