Трюкачество как плохой код
Меня попросили ответить, что выдаст код:
Процедура ОбщийТест() Массив = Новый Массив; МойМодуль.ИзменениеМассива(Массив); Сообщить(Массив.Количество()); КонецПроцедуры //МойМодуль Процедура ИзменениеМассива(Знач Массив) Экспорт Массив.Добавить(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).




Так ты знаешь правильный ответ в примере?
мне не интересен правильный ответ в плохом коде. надеюсь это понятно?
этот код нуждается в рефакторинге.
это код всего лишь тест. А ты до сих пор не знаешь на него ответ. Живи с этим
я ответ написал в этой статье. хотя в целом мне такие нюансы кривокодирования не интересны. на практике не применимо.
Дед, не хочу про это, но то, что ты шабашник 1С это видно в коде. Вот из последнего твоего «творения» — это пиздец конечно.
Сообщить(
«У товара перемещается: » + Выборка.Количество
+ » на остатке: » + Выборка.Остаток
+ » после проведения остаток: » + Остаток
+ «, что меньше допустимого: » + ДопустимыйПорогОстатка + «! »
+ » » + Выборка.Номенклатура + » » + Выборка.Характеристика);
В моей конторе даже джун такое не пишет, а почему ? А потому что он знаком со стандартами разработки 1С.
»
2. В том случае если строка является составной и включает в себя части, зависящие от тех или иных условий, тем не менее, следует использовать логически завершенные, целостные фразы (предложения). Необходимо применять функцию СтрШаблон (или аналогичную) для подстановки параметров в строки сообщений пользователю.
Это требование обусловлено, во-первых, разным расположением параметров в тексте предложения на различных языках, что приводит к необходимости изменения исходного кода для перестановки складываемых фрагментов строк, а во-вторых, невозможностью корректно перевести отдельные несогласованные части предложения (наличие или отсутствие артиклей, предлогов, разное расположение знаков препинания в тексте предложения на различных языках и т.п.).
Неправильно:
СообщениеОНехватке = «Не хватает товара » + НаименованиеТовара + » на складе » + НаименованиеСклада + «.»;
Правильно:
ТекстСообщения = НСтр(«ru = ‘Не хватает товара %1 на складе %2.'»);
СообщениеОНехватке = СтрШаблон(ТекстСообщения, НаименованиеТовара, НаименованиеСклада);»
Не благодари.
Мон шер, и часто вы пишете на разных языках? а то у вас два пункта касаются языков.
И кстати, почитайте мою статью про недостаток в платформе, касающийся расширений под НСтр, если хотите узнать что-то умное.
https://geniy1s.ru/bolshoj-proval-malenkoj-funkczii-1s/
Тебя не спрашивали, хороший ли это код. Тебя спрашивали, что он выведет. Ты ответил неправильно. К чему рассуждения о трюкачестве-то?
я ответил в статье. если вы не уловили суть, вам не стоит в 1с. в 1С важно улавливать желания клиента, тут не работают по строгому ТЗ.
Я правильно понял, что полного ответа ты не знаешь?
на какой вопрос?
Причём тут желания клиента? Вопрос был про язык, а не про его применение. Ты когда математику в институте решал, тоже вопил про желания заказчиков? Или когда на собесе спрашивают «что выведет следующий код», ты тоже кричишь, что он плохой?
в чем ваш вопрос, не уловил? Напишите целиком.
Тебе задали вопрос, что выведет конкретный код, не связанный с какой-либо реальной задачей. Зачем ты стал оценивать этот код? Хочешь этим нивелировать то, что неправильно ответил?
я ответил неправильно. и написал, почему меня это не беспокоит.