DRAKON.SU

Текущее время: Суббота, 27 Апрель, 2024 06:41

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 59 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Четверг, 28 Январь, 2010 13:00 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Кому такая схема понятнее, поднимите руки! :)
Хотя, конечно, пример слишком прост, чтобы делать выводы :)

Ошибка в схеме. Из предлагаемой нотации никак не видно, что ситуация исключения остаётся необработанной после try-finally.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Четверг, 28 Январь, 2010 14:48 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 143
Откуда: Россия, Орёл
Вы про if error then СделатьВсеЧтоНужноЕслиФайлаНетИлиОшибкаОбработки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Четверг, 28 Январь, 2010 15:17 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Я про то, что исключительная ситуации внутри try-finally будет обработана во внешнем try-except.
В схеме Кагена этого нет. И даже не очень понятно, как это сделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Воскресенье, 31 Январь, 2010 08:44 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Да, согласен. Работа с секцией finally требует отдельного рассмотрения. В то же время, полную функциональность примера можно получить следующим образом:
Вложение:
example2.png
example2.png [ 16.08 КБ | Просмотров: 11634 ]
Можно даже ещё упростить:
Вложение:
example3.png
example3.png [ 15.21 КБ | Просмотров: 11632 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Воскресенье, 31 Январь, 2010 09:37 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Я о чём и говорю!
Плодятся процедуры, теряется визуальное единство.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Воскресенье, 31 Январь, 2010 09:55 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Alexey_Donskoy писал(а):
..Плодятся процедуры
Зато уходят лишние сущности - флаги ошибок, заключительная проверка и reraise(который delphi использует для реализации finally). Понятно, что finally было определённым шагом к эргономизации линейной текстовой записи программ, но идеализировать этот механизм я не стал бы. Может быть выгоднее рассматривать финализацию как работу с охранником ресурсов? Что скажут более опытные коллеги?

Насчёт визуального единства - вопрос спорный, слишком много людей высказываются против такого "запутывания" линейного текста. Но ввиду отсутствия альтернативы, вынуждены пенять на неуклюжесть exception.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 02:20 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Вложение:
try01.png
try01.png [ 15.6 КБ | Просмотров: 11511 ]
Код:
try
    Читаем файл;
    Работаем;
finally
    Закрыть файл;
end;
Логику этой конструкции я понимаю так (если не прав — поправьте, пожалуйста):

Выполняются инструкции между try-finally, затем между finally-end.
Если возникает ошибка внутри try-finally, то программа сразу переходит к выполнению finally-end.
Инструкции внутри finally-end выполняются в любом случае.

Для визуального изображения такой ситуации достаточно блок try-finally выделить серым квадратом и условиться что он означает.
Вложение:
try01-finally.png
try01-finally.png [ 3.43 КБ | Просмотров: 11526 ]


Код:
try
    Открыть файл;
except
    Показать «Ошибка открытия файла»;
end;
Выполняются инструкции внутри try-except.
Если ошибки нет, то инструкции внутри except-end не выполняются.
Если ошибка есть, то выполняются инструкции внутри except-end.

Для визуального изображения такой ситуации достаточно блок try-except выделить серым квадратом и условиться что правая граница квадрата будет являться маршрутом для блока except-end. Это нужно для того, чтобы не плодить лишних ветвлений. По моему, очень эргономично : )
Вложение:
try01-except.png
try01-except.png [ 3.88 КБ | Просмотров: 11526 ]


Таким образом получается, что просто серый прямоугольник — блок try-finally-end, а прямоугольник с иконами на правой границе — блок try-except-end.

Разные оттенки серого цвета на верхнем рисунке используются для отделения одного блока от другого и ничего дополнительно не означают.


Последний раз редактировалось Ильченко Эдуард Суббота, 06 Февраль, 2010 16:33, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 14:06 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Ох, не используйте исключения в таких случаях. Они не для этого придуманы. Они вообще не должны быть в арсенале прикладника. Это - способ обеспечивать отказоустойчивость приложений, на системном уровне. Только там.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 15:27 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Илья Ермаков писал(а):
Ох, не используйте исключения в таких случаях.
C моей стороны это всего лишь попытка визуально изобразить предложенный алгоритм

Имхо, этот алгоритм визуально понимается с ходу, в отличие от текста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 15:45 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
Смотрим картинку try01.png. Не обращаем внимания, что оба обработчика показывают сообщение "Ошибка работы с файлом" и ни один - "Ошибка открытия файла".

Я вижу проблему с блоком finally. Тёмно-серый квадрат как бы намекает, что действия внутри него равнозначны, поскольку цвет фона у них идентичен. Но это далеко не так. В случае возникновения исключения в самом внутреннем блоке try, действие Закрыть файл будет выполнено в любом случае (блок finally), а действие Error := false выполнено не будет, так как после finally управление перепрыгнет в Показать "Ошибка работы с файлом" (ближайший except).

А это уже напоминает семантику оператора COME FROM языка INTERCAL.

Похожая проблема, хотя и менее заметная, есть и у картинки try01-finally.png.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 16:37 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Александр Ильин писал(а):
Смотрим картинку try01.png. Не обращаем внимания, что оба обработчика показывают сообщение "Ошибка работы с файлом" и ни один - "Ошибка открытия файла".
Спасибо. Исправлено.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 18:26 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Александр Ильин писал(а):
В случае возникновения исключения в самом внутреннем блоке try, действие Закрыть файл будет выполнено в любом случае (блок finally), а действие Error := false выполнено не будет, так как после finally управление перепрыгнет в Показать "Ошибка работы с файлом" (ближайший except).
Согласен.

А вот такой вариант:
Вложение:
try03.png
try03.png [ 17.04 КБ | Просмотров: 11503 ]

Вложение:
try03-fe.png
try03-fe.png [ 8.05 КБ | Просмотров: 11503 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 19:47 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Alexey_Donskoy писал(а):
Интуицию могут разбудить только эргономичные инструменты.
Хотите оставаться в рамках Дракона (Паскаля, Хаскеля, Форта) - оставайтесь, но далеко не уедете ;)
Под эргономичным инструментом Вы имеете ввиду Дзен?

Если нет, то дайте, пожалуйста, пример эргономичного инструмента.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 20:06 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Рэйлвэй Каген писал(а):
С выделением областей большими прямоугольниками и присоединёнными к ним обработчиками изображение вообще превратится в бессмыслицу. А если у каких-то областей, не непосредственно вложенных друг в друга, обработчик одинаковый? Попробуйте представить.
Вложение:
try03-br.png
try03-br.png [ 7.64 КБ | Просмотров: 11489 ]
Крест показывает, что управление уходит не в петлю силуэта, а в место прерывания.


Последний раз редактировалось Ильченко Эдуард Суббота, 06 Февраль, 2010 21:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 20:49 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
1) Блоки except и finally представляют собой принципиально разные конструкции.
Размещение except справа от шампура оправдано и наглядно.
Finally должен размещаться на шампуре, поскольку входит в нормальный порядок выполнения.

2 Илья Ермаков: Было бы интересно увидеть нормальную (защищенную) работу с файлами БЕЗ исключений. И будет ли эта простынка наглядной? ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 20:55 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
А почему простынка. Несколько процедур, каждая какой-то результат возвращает.

Главная цепь проверок имеет вид типа:

Код:
Act1;
IF res = 0 THEN
  Act2
END;
IF res = 0 THEN
  Act3
END


и т.п.

Вместо вложенных IF-ELSE в таких ситуациях можно использовать цепь охран.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 21:33 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Несколько процедур - это разрыв маршрута, ещё хуже, чем все представленные варианты...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 21:49 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Почему разрыв, если обычное введение более высокоровневых понятий? Крупноблочных действий? Ну, хотите - вместо Act1...Actn пишите непосредственно действия, и выставление res.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 22:38 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
В тексте это выглядит нормально (если без процедур). А вот в Драконе, по-моему, перегруз будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Ситуации" в Драконе
СообщениеДобавлено: Суббота, 06 Февраль, 2010 22:41 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
А в Драконе вообще проблем нет - две ситуации в итоге: успех-неуспех. С любого места главной оси в случае неуспеха прыгаем на второй путь - и вниз.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 59 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2024, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB