Имя: Пароль:
1C
1С v8
Использование Попыток в коде
0 Азат
 
30.12.11
03:33
1. Время от времени 45% (18)
2. Редко 33% (13)
3. Оч часто 13% (5)
4. Никогда 10% (4)
Всего мнений: 40

Как часто вы используете конструкции вида Попытка-Исключение-Конец попытки? К слову, попала в руки одна обработочка на пару-тройку тысяч строк, так в ней через каждые 20-30 строк очередная попытка...
1 H A D G E H O G s
 
30.12.11
03:35
Попытка - неглубоко закопанное тело.

Оч часто
2 Андрюха
 
30.12.11
03:35
Наверное не очень часто

Время от времени
3 Андрюха
 
30.12.11
03:36
А вот в Дельфе - там да, практически постоянно try-except/finally

Оч часто
4 rotting
 
30.12.11
03:52
часто

Оч часто
5 ParaWiz
 
30.12.11
03:54
почему тема ограничивается снеговиком ?

Время от времени
6 ZanderZ
 
30.12.11
04:04
бывает

Время от времени
7 Grusswelle
 
30.12.11
04:55
Плохо это... Но приходится.

Редко
8 Kraft
 
30.12.11
05:16
(7) +многа

Редко
9 Упанишады
 
30.12.11
05:47
Чем больше работаю на 8.Х, тем реже. Попытка может помочь, когда не знаешь, как штатно обработать ту или иную ситуацию. По мере появления знаний код становится более стандартным.

Время от времени
10 skunk
 
30.12.11
05:52
стараюсь как можно реже ... только в тех случиях когда выполнить проверку всех месячных другими средствами нельзя ... причем не важно где ... в ван си или паскале ...

зы: второй самый некошерный оператор после гоуту

Время от времени
11 Simod
 
30.12.11
06:17
Тупой опрос. Использование обработки исключений не определяется "нравится - не нравится" или "часто - редко", а необходимостью.

Общим недостатком, для большинства ЯП, является увеличение времени выполнения и расхода используемой памяти. Компиляторы почти не оптимизируют код внутри этой конструкции. Как это реализовано внутри 1С не знаю, не видел никакой информации, но думаю аналогично остальным ЯП.

(10) В отличии от гоуту обработка исключений не является анахронизмом и порой не имеет никакой замены. Может ты просто "не умеешь их готовить?".
12 alkov
 
30.12.11
06:37
Всё зависит от того, что делает код

Время от времени
13 forforumandspam
 
30.12.11
06:39
Редко, но иногда без них нельзя.

Редко
14 guitar_player
 
30.12.11
06:40
По необходимости

Время от времени
15 skunk
 
30.12.11
06:47
(11)если ты незнаешь как проверить месячные своих подруг ... и занимаешься секасом чисто в презервативах ... это еще не значит, что ты получаешь кайф от секаса
16 IamAlexy
 
30.12.11
06:49
(15) бгыыыы
это типа ты его гипнотизируешь:

"ты не получаешь кайф от секса.. ты исптываешь страх боль и отчаяние занимаясь сексом.." ?

типа надеешся убедить ?
17 skunk
 
30.12.11
06:50
нет ... просто объясняю, что кроме онанизма есть куча других интересных вещей
18 guitar_player
 
30.12.11
06:54
(15), (17) у вас проблемы? Вы хотите поговорить об этом?)
19 Simod
 
30.12.11
06:56
(15) Иди протрезвей...
(16) Молодца, хорошо лизнул.
20 skunk
 
30.12.11
06:58
(19)я трезвый ... в отличии от тебя
21 Азат
 
30.12.11
08:16
ок, а чем плохо использование попытки кроме того, что компилятор не оптимизирует код? ну такие вещи, как абсолютная нечитабельность кода даже не рассматриваем
22 dk
 
30.12.11
08:29
в основном при потоковом создании / изменении / проведении документов / справочников / файлов

Редко
23 dk
 
30.12.11
08:29
потоковом = массовом
24 GROOVY
 
30.12.11
08:31
Попытка - это транзакция, использование ее в других транзакция может привести к не всегда очевидным последствиям отмены транзакции-родителя.
Использование оператора Попытка оправдано лишь в случае когда нет другого способа проверки корректности исполняемого кода. К примеру удаление файла с диска, есть файл или нет мы гарантировать системе не можем. (Для особо дотошных: после проверки на то что файл физически существует и до строки с удалением этого файла он может быть удален другим процессом).
25 Ненавижу 1С
 
гуру
30.12.11
08:34
как можно реже

Редко
26 ado
 
30.12.11
08:46
(11) +1

Время от времени
27 Lex_Liven
 
30.12.11
08:53
В крайних случаях, когда голова уже пухнет от конструкций "Если/ИначеЕсли/ИначеЕсли/...", а ошибка все еще продолжает выпадать. Считаю, что код должен предусматривать все варианты развития событий и всегда адекватно себя вести.

Время от времени
28 y88
 
30.12.11
08:56
(24) спасибо
хотя видел код загрузки данных в базу с кучей попыток и eval-ов - работал долго, но правильно

Время от времени
29 Aleksey
 
30.12.11
08:57
(0) Это ты обработку от КД не видел. Там ВСЕ процедуры обернуты в попытку/исключение
30 Азат
 
30.12.11
08:58
(29) я хз, меня с детства учили, что и попытка, и метка - одного уровня зло
31 Dmitrii
 
гуру
30.12.11
09:01
(24) +1 Присоединяюсь.
Использую только в тех случаях, когда проверить корректность исполняемого кода невозможно стандартными методами, и еще когда трудоемкость локализации всех возможных ошибок значительно превышает разумные пределы (при сложных обменах с загрузками/выгрузками часто бывает).

Время от времени
32 skunk
 
30.12.11
09:11
вот как раз таки при загрузках/выгрузках за такое надо сразу руки отрывать
33 ДенисЧ
 
30.12.11
09:14
(30) Вот такое фиговое детство...
34 Волесвет
 
30.12.11
09:18
кг/ам
зы если есть необходимость
35 Scooter
 
30.12.11
09:29
по необходимости

Время от времени
36 SerMaxim
 
30.12.11
09:32
По сути того как это реализовано в 1С использовать попытки не правильно!

Никогда
37 Stepa86
 
30.12.11
09:34
(24) попытка - это транзакция??? а чо она тогда не откатывается, когда в исключение упадет?

я у нас для других программистов вот такую заметку про попытку сделал:

1) Чем их меньше, тем лучше. Рассматривайте попытку и переход по исключению в блок исключение как неявный GoTo.
2) Если можно обойтись без попытки, нужно обойтись без попытки. Например при преобразовании строки в число можно написать


Попытка
Возврат Число(стрЧисло);
Исключение
КонецПопытки;


и ловить исключение каждый раз при возведенном флажке "Останавливаться на ошибке"

или можно написать сложнее:


стрЧисло = "";

Для цИндекс = 0 По СтрДлина( стрЗначение ) Цикл

цСимвол = Сред( стрЗначение , цИндекс , 1 );

Если ЭтоЦифра( цСимвол ) Тогда

стрЧисло = стрЧисло + цСимвол;

КонецЕсли;

КонецЦикла;

Возврат Число( стрЧисло );

Функция ЭтоЦифра( пСимвол )

Для ц=0 По 9 Цикл
Если пСимвол = Строка(ц) Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;

Возврат Ложь;

КонецФункции // ЭтоЦифра()



но код не будет генерить ненужных исключений

3) любая ошибка внутри транзакции рвет эту транзакцию, поэтому внутри транзакции можно не пытаться ловить ошибки, если не предусмотрен полный выход из транзакции
4) если есть подозрения, что код может работать некорректно, то нужно сделать все, чтобы устранить эту неопределенность, а не совать его в попытку, чтоб разбирались другие программисты
5) за код типа

Попытка
СделатьЧтото();
Исключение
КонецПопытки;

будут отстреливаться лишние органы. В блоке исключение ВСЕГДА (ВСЕГДА, блеать!!!) должен быть код по отработке, иначе потом нереально найти что рвет транзакцию
6) Использовать попытку нужно
-для проверки входных параметров в код, которые мы не можем проверить еще выше. Это актуально для методов-баррикад (Совершенный код, 198 страница)
-для вызова методов, предугадать результат которых мы не можем, например вызов кода внешней обработки, которая будет независимо обновляться (те же баррикады)
-для вызова методов, которые сами генерят исключения, например подключение компоненты

Редко
38 Dmitrii
 
гуру
30.12.11
09:38
(32) >> при загрузках/выгрузках за такое надо сразу руки отрывать

Наверное так, но иногда описание проверок на все возможные ошибки данных по трудозатратам тупо выходит за рамки разумного. Именно о таких случаях я говорю.
39 vmv
 
30.12.11
09:44
редко и если использую, то там либо один оператор либо вызов метода.

Все остальные потенциально "опасные" блоки кода стараюсь выносить в фкнкции которые возвращают булевый или значащий результат. Возврат и есть признак успеха, а не попытка.

За объемные блоки кода в попытках предлагаю растреливать тремя патронами - в пах, в живот и тольколько потом в голову

Редко
40 Fragster
 
гуру
30.12.11
09:47
попытка - рулез, чтобы выпасть сразу из большого количества вложенных конструкций. просто нужно уметь готовить

Оч часто
41 Fragster
 
гуру
30.12.11
09:47
(40)+ еще и вызватьИсключение, соответственно, юзаю
42 Fragster
 
гуру
30.12.11
09:48
(21) нечитаемость? гыгы... верпишель из 10 вложенных если, конечно, круче...
43 Fragster
 
гуру
30.12.11
09:48
*вермишель
44 Fragster
 
гуру
30.12.11
09:49
(30) метка не указывает направление перехода, попытка - указывает.
45 aleks-id
 
30.12.11
09:52
попытка фигня. мне попадалась рарусова поделка в которой на 1000 строк было около 20 транзакций
46 Reset
 
30.12.11
09:54
Только тогда, когда это нельзя без.

Редко
47 vladenoff
 
30.12.11
10:23
метод явно для самых ленивых. Напрягаемся, стараемся без исключений.

Редко
48 Demasiado
 
30.12.11
10:29
Практически .... Очень сильно разоптимизирует код.

Никогда
49 бомболюк
 
30.12.11
10:32
Попытка - если только пытаешься что то сделать за пределами 1С (прочитать/записать файл или стороннюю базу данных, установить соединение с удаленным сервером и проч.). Внутри 1С почти никогда.

Время от времени
50 Hans
 
30.12.11
10:51
что все таки лучше?
Если х=0 Тогда
y=0
Иначе
y=5/x
КонецЕсли

или
попытка
y=5/x
Исключение
y=0
КонецПопытки
51 Азат
 
30.12.11
10:54
(50) у = ?(х = 0, 0, 5/х)
52 GROOVY
 
30.12.11
10:58
(37) Конечно транзакция. Все операции с БД внутри Попытка Исключение производятся в неявной транзакции.
53 Stepa86
 
30.12.11
10:59
(50) сделай второе в обработке проведения... и будет тебе геморой
54 Reset
 
30.12.11
11:01
(53) Не будет,т.к. это не операция с бд (понятно, что метод от этого менее уё;%"ым не становится)
55 Stepa86
 
30.12.11
11:02
(52) транзакция - механизм, который позволяет записать в базу или все или ничего

если я напишу:

Попытка
СделатьЗапись1();
СделатьЗапись2();
п=1/0;
СделатьЗапись3();
Исключение

то записи 1 и 2 останутся в базе, до записи 3 не дойдет. Где я туплю?
56 Reset
 
30.12.11
11:02
ну + отладчик будет остнавливаться "при ошибке", что тоже ху.. нехорошо
57 Reset
 
30.12.11
11:03
(55) +1
я тоже не понял сентенцию про транзакцию)
58 ThreeTONE
 
30.12.11
11:04
по мере надобности.

Редко
59 GROOVY
 
30.12.11
11:04
Я торможу! Сорри. Исключение в попытке вызывает исключение в транзакции. Сама конструкция не является транзакцией.
60 Stepa86
 
30.12.11
11:06
(54) вроде б любое исключение рвет транзакцию. Даже если это не так, то лучше не дергать лишний раз судьбу за выпирающие органы. Ведь код в попытке, который ничего не делал с БД со временем может начать делать...
61 FoXSkr
 
30.12.11
11:08
3. Время от времени
62 rutony
 
30.12.11
11:09
Без попытки много чего не сделать...

Хм... Решил посмотреть как там поживает моя самая большая обработка по поводу Попыток...

Количество слов: 33008
Количество знаков (без пробелов): 419823
Количество строк: 16451

Количество слов "Попытка": 121

Время от времени
63 Азат
 
30.12.11
11:10
(62) много чего? примеры можна?
64 бомболюк
 
30.12.11
11:11
(63) +1. Имхо с объектами 1С без попыток можно почти все сделать.
65 rutony
 
30.12.11
11:12
(63) Сразу так на вскидку:
Контроль записи файла...
Работа с драйверами ТО...
66 Reset
 
30.12.11
11:14
(65) Это очевидные примеры. Тема похоже про другое... как часто используется, если "лень писать какие-то проверки"
67 Азат
 
30.12.11
11:15
(65) это все - не так часто используемые операции... а внутри 1С 90+% ИМХО без попытки норм
68 Magistr001
 
30.12.11
11:16
я один прочитал: ПЫТОК ???
69 Reset
 
30.12.11
11:16
внутри 1С - запись, проведение. На 100% невозможно быть уверенным в их успешности никогда
70 DmitryPavlik
 
30.12.11
11:16
При записи данных никак без неё ))

Время от времени
71 KishMish
 
30.12.11
11:18
когда лень предусматривать все возможные варианты

Время от времени
72 ErrorEd88
 
30.12.11
11:18
часто выручает

Оч часто
73 Aleksey_a_z
 
30.12.11
11:19
Ну например попытка инициализации, подключения внешней компоненты как вы реализуете без "Попытка, исключение"

Никогда
74 Aleksey_a_z
 
30.12.11
11:20
(73) + ошибся

Редко
75 Stepa86
 
30.12.11
11:20
(62) у меня в конфе на 37000 строк - 37 попыток

Никогда
76 Fish
 
30.12.11
11:21
(71) Я бы сказал так: когда невозможно или слишком сложно предусмотреть все варианты :)))
Ради интереса, поискал в типовой УПП "КонецПопытки" - найдено более 4000 :))))

Редко
77 fisher
 
30.12.11
11:22
Чаще всего при работе с внешними объектами. Т.е. по прямому назначению, так сказать.
Для упрощения кода - практически никогда. Даже если с проверками сложнее - такой код читабельнее, дает больше информации и не оставляет вопросов.
Когда встречаю использование в чужом коде использование попытки без явной на то причины - сразу понимаю, что нужно быть готовым и к другим "сюрпризам грамотного кодинга".

Редко
78 bodri
 
30.12.11
11:24
по мере необходимости, но ка правило...

Время от времени
79 Пopyчик-З
 
30.12.11
11:27
Не поленился, посчитал сколько у нас в текущем проекте. С десяток набралось, но некоторые можно выкинуть..

Время от времени
80 rutony
 
30.12.11
11:35
(75) Ну обработка работает с фронт-системами, поддерживает 6-7 разных фронтов, там без попыток не обойтись...
81 Stepa86
 
30.12.11
11:47
(80) я беседу поддержать, а не потроллить =)
AdBlock убивает бесплатный контент. 1Сергей