Трюкачество как плохой код

Меня попросили ответить, что выдаст код:

Процедура ОбщийТест()
	
	Массив = Новый Массив; 
	МойМодуль.ИзменениеМассива(Массив);
	Сообщить(Массив.Количество());

КонецПроцедуры 


//МойМодуль
Процедура ИзменениеМассива(Знач Массив) Экспорт

	Массив.Добавить(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).