![]() |
![]() |
|
try finally | ☑ | ||
---|---|---|---|---|
0
Ненавижу 1С
гуру
06.11.09
✎
15:01
|
почему такой конструкции нет в 1С?
|
|||
1
ДенисЧ
06.11.09
✎
15:02
|
Назачем?
А ещё там нет using{}, нет лямбда-функций и прочих объектных вещей... |
|||
2
Ненавижу 1С
гуру
06.11.09
✎
15:05
|
(1) а try except есть
|
|||
3
Лефмихалыч
06.11.09
✎
15:05
|
потому что не нужна
|
|||
4
Rie
06.11.09
✎
15:06
|
(0) А чем бы она отличалась от
Попытка // Чего-то делается Исключение // Опаньки! КонецПопытки; // Часть finally |
|||
5
Андрюха
06.11.09
✎
15:07
|
(0) Думаю потому что в ней все объекты должны гарантированно разрушаться по завершению работы процедуры/функции
|
|||
6
Ненавижу 1С
гуру
06.11.09
✎
15:07
|
(4) Исключение глушит ошибку, а finally нет
|
|||
7
Лефмихалыч
06.11.09
✎
15:09
|
(6) тогда
|
|||
8
Лефмихалыч
06.11.09
✎
15:10
|
точнее
|
|||
9
Ненавижу 1С
гуру
06.11.09
✎
15:11
|
(8) отработает только в случае ошибки
|
|||
10
Rie
06.11.09
✎
15:11
|
(6) Ошибку можно повторить через Вызвать Исключение
|
|||
11
Ненавижу 1С
гуру
06.11.09
✎
15:11
|
(7) как и говорил, глушит ошибку
|
|||
12
Ненавижу 1С
гуру
06.11.09
✎
15:14
|
(10) тогда то самое псведо-finally (что за блок вынесено) не сработает
|
|||
13
Rie
06.11.09
✎
15:16
|
(12) Ну что ж поделаешь... :-)
Насколько я понимаю, основная задача finally в других языках - явно освободить ресурсы (вызвать деструкторы) в случае ошибки. В 1С, где сборщик мусора этим занимается, такая задача не стоит. |
|||
14
Ненавижу 1С
гуру
06.11.09
✎
15:17
|
(13) это могут быть внешние ресурсы, например захваченные внешними компонентами
|
|||
15
Rie
06.11.09
✎
15:52
|
(14) Внешние компоненты пишутся не на 1С-ике. И сами должны освобождать ресурсы, 1С тут не в силах ни на что повлиять.
|
|||
16
Андрюха
06.11.09
✎
15:56
|
(13) Не совсем верно - finally обеспечивает гарантированное выполнение кода после блока try, т.е. например корректное высвобождение памяти, занимаемое объектом.
|
|||
17
Андрюха
06.11.09
✎
15:56
|
finally не давит исключения
|
|||
18
Ненавижу 1С
гуру
06.11.09
✎
15:58
|
(17) это ты кому написал?
|
|||
19
PaulBC
06.11.09
✎
16:02
|
(16) если б 1с умела корректно высвобождать память, оно бы может и имело смысл
|
|||
20
Ненавижу 1С
гуру
06.11.09
✎
16:03
|
(19) а она делает это некорректно?
|
|||
21
PaulBC
06.11.09
✎
16:06
|
(20) а она это делает?
|
|||
22
ДенисЧ
06.11.09
✎
16:08
|
(21) Делает
|
|||
23
PaulBC
06.11.09
✎
16:11
|
(22) например, есть большая ТЗ, которая отжирает гиг памяти. Можно ли освободить эту память без закрытия 1с предприятия?
|
|||
24
Ненавижу 1С
гуру
06.11.09
✎
16:12
|
(23)
ТЗ=Неопределено; //нет? |
|||
25
PaulBC
06.11.09
✎
16:13
|
(24) я про 77
|
|||
26
Ненавижу 1С
гуру
06.11.09
✎
16:15
|
(25) уже давно не с 7.7, но наверное также?
ТЗ=0; |
|||
27
ДенисЧ
06.11.09
✎
16:16
|
(23) тз.Очистить(); тз=0;
|
|||
28
PaulBC
06.11.09
✎
16:18
|
(26, 27) если бы.. это уже старая тема, просто привел для примера
|
|||
29
mishaPH
06.11.09
✎
16:19
|
(25) вариантов несколько
1. ТЗ=СоздатьОбъект("ТаблицаЗначений"); 2. ТЗ=""; |
|||
30
Ненавижу 1С
гуру
06.11.09
✎
16:20
|
(28) переходи на 8.1
|
|||
31
Rie
06.11.09
✎
16:22
|
(24) Не обязательно освободит память. По крайней мере, не сразу же.
|
|||
32
PaulBC
06.11.09
✎
16:22
|
(30) )) да мне оно не мешает, а чего в сабже v7?
|
|||
33
ДенисЧ
06.11.09
✎
16:23
|
(28) Если бы ты привёл в пример Таблицу, а не ТЗ, то я согласился бы. Но с локальными переменным фокус проходит. Я в своё время с этим полюбился плотненько и долго.
|
|||
34
Ненавижу 1С
гуру
06.11.09
✎
16:25
|
(32) че то не вкурил как ее переименовать, ни разу не пробовал еще
|
|||
35
Ненавижу 1С
гуру
06.11.09
✎
16:26
|
вроде вышло
|
|||
36
PaulBC
06.11.09
✎
16:28
|
(33) про Очистить() не помню уже, пробовал или нет, давно было, а ="" и =0 точно не помогают
|
|||
37
ДенисЧ
06.11.09
✎
16:28
|
(36) Помогают. Даже с ОЛЕ, xml и метаданными.
|
|||
38
Ненавижу 1С
гуру
06.11.09
✎
16:28
|
(36) ТЗ случаем не на форме размещена?
|
|||
39
PaulBC
06.11.09
✎
16:35
|
(38) хм.. тз была на форме обработки, которая открывалась модально из моей, + там еще было пару временных тз.. но прям сейчас лезть проверять все это хозяйство просто влом
|
|||
40
Ненавижу 1С
гуру
06.11.09
✎
17:09
|
(39) и зачем на форме ТЗ хранящая гиг памяти? просто мне кажется ТЗ привязанная к элементам формы тупит
|
|||
41
Torquader
07.11.09
✎
21:04
|
Например, javascript вообще не любит освобождать объекты, даже если ему говорят об этом явно.
В 1С вроде всё не так "глухо". При очистке переменной память освобождается. Но с таблицей значений проще сначала выполнить УдалитьСтроки, чтобы гарантировано. |
|||
42
Torquader
07.11.09
✎
21:09
|
Прелесть try{}finally{} вот в чём:
try { f=CreateFile(); f.WriteData(); } catch(e) { ShowMessage("А с файлом-то фигня вышла"); return false; } finally { f.CloseHandle(); } Так вот, при возникновении ошибки будет обработано исключение, потом система заметит, что сделан выход из функции, и перейдёт на выполнение кода в finally, а после этого вернёт управление в вызвавшую её функцию. В 1С try except endtry позволяют только отлавливать и обрабатывать ошибки, при этом действие try более похоже на On Error Goto от Visual Basic, чем на честную работу с исключениями (метод raise не позволяет генерить произвольных исключений, да и может использоваться только после except, что полностью отрицает его привлекательность. P.S. зато в 1С нормальные массивы, а не как в JavaScript массивы-тормоза. |
|||
43
Кириллка
07.11.09
✎
21:33
|
(42)а этот пример кода для какого языка? JavaScript?
|
|||
44
Кириллка
07.11.09
✎
21:42
|
+43 ладно, без прелюдий... в каком языке можно писать конструкции try-catch-finally? JavaScript?
|
|||
45
Torquader
07.11.09
✎
22:02
|
Вообще-то, try catch finally был придуман для Java, но прекрасно поддерживается и JavaScript - там ещё очень удобно делать throw "Это исключение" и в catch(Err) получать в значении Err указанную в throw строку.
На счёт C++, не уверен, насколько оно "грамотно" работает, но оно там тоже есть. P.S. 1С, всё-таки, программа для автоматизации учёта - и там таких обработчиков исключений не сделали (а было бы интересно). |
|||
46
Ненавижу 1С
гуру
08.11.09
✎
10:35
|
например в C#
|
|||
47
Rie
08.11.09
✎
11:10
|
Можно ещё и в Delphi (но там более сложно - у try может быть либо except-часть, либо finally, желаемое достигается вложенным try).
|
|||
48
Кириллка
08.11.09
✎
12:06
|
(46)прикольно, полезное расширение возможностей языка.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |