![]() |
|
Определить имя процедуры, вызвавшей функцию | ☑ | ||
---|---|---|---|---|
0
Базис
naïve
30.03.21
✎
10:55
|
Понятно, что можно (и правильно) передать параметр. Но теоретически это можно сделать?
8.1, ИТРП, ОФ. |
|||
1
Волшебник
30.03.21
✎
10:59
|
Поставить точку останова и глянуть стек вызовов
|
|||
2
polosov
30.03.21
✎
11:03
|
(0) Программно получить стек вызовов можно ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), но нужно генерировать исключение.
|
|||
3
Базис
naïve
30.03.21
✎
11:03
|
Неточно сформулировал. Стек, ЖР, ТЖ не использовать, только программно.
|
|||
4
Базис
naïve
30.03.21
✎
11:04
|
(2) О, класс.
Хотя за это,наверное, надо бить по пальцам. |
|||
5
polosov
30.03.21
✎
11:06
|
(4) От задачи зависит. Если прям очень надо, то почему нет.
|
|||
6
VladZ
30.03.21
✎
11:53
|
(0) К чему эти нелепые телодвижения?
|
|||
7
mikecool
30.03.21
✎
11:54
|
(4) кто мне объяснить - что такого в Попытка - Исключение в 1С, что конструкцию рекомендуют использовать реже?
емнип, дельфи, всякие Си - считается нормальным использовать try-catch |
|||
8
Kassern
30.03.21
✎
11:58
|
(7) потому что такой конструкцией начинают пользоваться бездумно и там, где можно спокойно без нее обойтись.
|
|||
9
acht
30.03.21
✎
12:00
|
(7) Потому что большинство 1Сников - дебилы, которые перехватывают исключения наглухо а потом приходят на форум с вопросами, например "ой а почему в данной транзакции уже происходили ошибки"?
|
|||
10
Kassern
30.03.21
✎
12:01
|
(7) Вот почитай, можешь начиная с пункта 3.6
https://its.1c.ru/db/v8std/content/499/hdoc |
|||
11
mikecool
30.03.21
✎
12:22
|
т.е. если я пользуюсь
Попытка // проверяю что мне надо Исключение // логирую или нет ВызватьИсключение; КонецПопытки то я не выхожу за рамки парадигмы и временные затраты тут не при чем? |
|||
12
Kassern
30.03.21
✎
12:32
|
(11) если есть возможность использовать без вызова попытки, то лучше без попытки. К примеру, хочешь ты у первой строки ТЗ что нить записать.
Ты можешь конечно через попытку исключение написать ТЗ[0].ТвоеПоле=НужноеЗначение (но за это надо линейкой по пальцам лупить), а можешь проверить количество строк в ТЗ и если количество строк больше 0, тогда уже присваивать значение. |
|||
13
mikecool
30.03.21
✎
12:34
|
(12) это общие слова, у меня вопрос про идеологию
|
|||
14
Галахад
гуру
30.03.21
✎
12:34
|
(13) А как отладку делать? С остановкой по ошибке?
|
|||
15
polosov
30.03.21
✎
12:35
|
(11) Нет. Там речь о том, что в местах кода, выполняющихся в транзакции нельзя просто обработать исключение и не вызвать исключение, чтобы при выходе из транзакции не получить информацию об исключении внутри транзакции.
Просто так компенсировать свою неспособность правильно написать алгоритм оберткой в Попытку Исключение нельзя. |
|||
16
Kassern
30.03.21
✎
12:35
|
(14) а точки останова для чего?
|
|||
17
mikecool
30.03.21
✎
12:36
|
(14) давно у нас отладчик в Исключение не заходит?
|
|||
18
polosov
30.03.21
✎
12:36
|
+(15) Ну и надо помнить, что Попытка Исключение это обработка ИСКЛЮЧИТЕЛЬНЫХ ситуаций.
|
|||
19
Галахад
гуру
30.03.21
✎
12:37
|
(16) (17) Ну, ожидаешь остановиться единожды, на нужной ошибке, а попадаешь у кучку исключений.
|
|||
20
fisher
30.03.21
✎
12:47
|
(13) Аргументов несколько:
- главный для меня - "некрасивенько". Код хуже читается и вызывает больше wtf. - теряется удобство инструментария остановки по ошибке в отладчике - в других языках считается дорогостоящей операцией - повышается риск появления трудновыявляемых ошибок. Даже если свой try ты идеально локализировал, то при рефакторинге это может оказаться уже не так и внутри него "похоронится" что-то еще. |
|||
21
fisher
30.03.21
✎
12:50
|
(15) ЕМНИП, это касается не всех исключений, а только связанных с СУБД.
|
|||
22
fisher
30.03.21
✎
12:51
|
То есть если в транзакции поделить на ноль и "загасить" этот эксепшн - то транзакцию зафиксировать даст.
|
|||
23
mikecool
30.03.21
✎
12:53
|
(20) - в других языках считается дорогостоящей операцией
вот тут сложно мне спорить, но создание классов всегда оборачивается в try-catch-finally, так что - хз (22) дык я и упоминаю, что если я передаю исключение выше по цепочке, используя ВызватьИсключение, то кроме удобочитаемости вроде особо ничего и не страдает |
|||
24
fisher
30.03.21
✎
12:56
|
(23) Обычно для ввода-вывода. А оттуда ведь в самом деле может прилететь исключение. Речь о том, что некошерно использовать исключение для рядовых ситуаций, которые сами по себе обработки исключений не требуют. Типичный пример - преобразование строки в число.
|
|||
25
Волшебник
30.03.21
✎
13:08
|
(23) Создание классов в попытку обычно не оборачивается. Это же просто выделение памяти.
|
|||
26
fisher
30.03.21
✎
13:10
|
(23) Затраты возникают, только когда возникает исключение. Поэтому до тех пор, пока это именно исключение (т.е. происходит очень редко) - с производительностью никаких проблем.
Если ты просто пробрасываешь возникшее исключение - тоже никаких проблем. Проблемы если их бездумно генерить в неисключительных ситуациях или бездумно "тушить". (25) > Это же просто выделение памяти В конструкторе чего угодно может быть. |
|||
27
Волшебник
30.03.21
✎
13:11
|
(26) >> В конструкторе чего угодно может быть.
Ну тогда надо всю процедуру оборачивать в попытку. Прямо с начала до самого конца. Мало ли чего там может быть... |
|||
28
mikecool
30.03.21
✎
13:11
|
(25) как я припоминаю - это делается для того, что бы в finally вызвать деструктор в любом исходе
|
|||
29
Волшебник
30.03.21
✎
13:12
|
(28) Это далеко не всякий класс. В Java есть специальная конструкция для таких классов.
Оператор try with resources https://javarush.ru/quests/lectures/questsyntaxpro.level15.lecture00 |
|||
30
fisher
30.03.21
✎
13:14
|
(27) Я не к тому, что любой конструктор любого класса нужно заворачивать в попытку. А про то, что можно создать класс по работе с файлом например, который при создании может уже чего-то такое делать, что может вызвать исключение. И тогда естественно создание экземпляра объекта такого класса нужно делать в попытке.
|
|||
31
Волшебник
30.03.21
✎
13:15
|
Java 7 умеет так:
try(FileOutputStream output = new FileOutputStream(path)) { output.write(1); } Дальше система сама сконструирует вызов close() в блоке finally. |
|||
32
fisher
30.03.21
✎
13:19
|
Мне, кстати, очень нравится в java концепция checked exception
Не понимаю, почему ее все ругают. Ну да - если издалека ее пробрасывать - то нужно указывать в сигнатурах функций по всей цепочке. Зато какая самодокументированность! |
|||
33
fisher
30.03.21
✎
13:23
|
(32) + В определениях функций. В сигнатуру строго говоря это не входит.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |