Пост

Обращение к объекта сразу после создания

Мои вкусы очень специфичны...


В продолжение викторины про обращение к методу объекта сразу после его создания.

🤔 У многих может возникнуть справедливый вопрос: а зачем?

❌ И, конечно, подобные костыли использовать в коде нельзя. Это просто не имеет смысла.

🛠 Но при этом, иногда знание их может стать для вас удобным инструментом.

🔍 Конкретно данный пример в викторине может пригодиться во время отладки. Когда вы долго и нудно ползли по веренице типового кода и вдруг очень нужно, например, выполнить запрос к базе. Прям внутри отладки (тут может быть транзакция). А возможности отладчика ограничены и вот на помощь приходит столь мерзкий костыль:

1
?(0,0,Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Валюты")).Выполнить().Выгрузить()

Для облегчения жизни в отладке мастера делали разные варианты “подсистем” в общих модулях или просто внешних обработках. Тут я кстати писал про вызов процедуры в отладке. А тут делал метод для анализа выполнения запроса и просмотр его данных, времени и так далее.

🦖 А когда-то давно люди отладчиком не могли даже значение переменной установить (привет, динозавры). И умение использовать костыли было ой как кстати. Например, так можно в отладке “отключить” Отказ:

1
?(0,0, Новый Структура("А", Ложь)).Свойство("А", Отказ)

🫣 И это я ещё более красивые примеры с ?(,,) привожу, а я-то тогда не знал про эту возможность и юзал Вычислить("Новый Структура...").Свойство(...). На первый взгляд кажется, что это одинаковое решение, но чем сложнее манипуляции, тем больше нужно было “экранировать” кавычки в Вычислить (например, в тексте запроса).

🩼 Сейчас мы, конечно, можем без проблем установить значение переменной, но умение “костылить” мне всё равно периодически помогает. Например, что можно сделать в отладчике:

➖ Проверить существование файла:

1
?(0,0, Новый Файл("МойФайликНаСервере.ффф")).Существует()

➖ Выполнить HTTP запрос и поместить результат в файл (или просто получить как текст в отладке):

1
?(0,0, Новый HTTPСоединение("cbr.ru")).Получить("/scripts/XML_val.asp?d=0", "D:\Temp\1\1.xml")

➖ Сравнить две переменные через “сравнятор”

1
?(0,0, Новый СравнениеЗначений).Сравнить(1, 2)

➖ Привести значение к типу и квалификатору

1
?(0,0, Новый ОписаниеТипов("МойТип")).ПривестиЗначение(МоеЗначение)

А ещё подобное можно использовать в точке останова с условиями. И тогда, без каких-то расширений, внедрить некое логирование кода

😁😁😁В “штатных” ситуациях это ненужно. Но когда у вас суровые ограничения, надо срочно, надо быстро, вот в отладке что-то подкрутить и проверить поведение, то на помощь приходит безумие и смекалка =)

Авторский пост защищен лицензией CC BY 4.0 .