Обращение к объекта сразу после создания
Мои вкусы очень специфичны...
В продолжение викторины про обращение к методу объекта сразу после его создания.
🤔 У многих может возникнуть справедливый вопрос: а зачем?
❌ И, конечно, подобные костыли использовать в коде нельзя. Это просто не имеет смысла.
🛠 Но при этом, иногда знание их может стать для вас удобным инструментом.
🔍 Конкретно данный пример в викторине может пригодиться во время отладки. Когда вы долго и нудно ползли по веренице типового кода и вдруг очень нужно, например, выполнить запрос к базе. Прям внутри отладки (тут может быть транзакция). А возможности отладчика ограничены и вот на помощь приходит столь мерзкий костыль:
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, Новый ОписаниеТипов("МойТип")).ПривестиЗначение(МоеЗначение)
А ещё подобное можно использовать в точке останова с условиями. И тогда, без каких-то расширений, внедрить некое логирование кода
😁😁😁В “штатных” ситуациях это ненужно. Но когда у вас суровые ограничения, надо срочно, надо быстро, вот в отладке что-то подкрутить и проверить поведение, то на помощь приходит безумие и смекалка =)