Автор Тема: Обработка "ошибок".  (Прочитано 27820 раз)

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #60 : Апрель 18, 2012, 06:21:15 pm »
Можно реализовать встроенную процедуру "приведение процедуры". : )

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #61 : Апрель 18, 2012, 06:23:30 pm »
Раз радостное смешение логик не катит, то тогда прямая дорога к грустному конечному автомату.

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #62 : Апрель 18, 2012, 06:25:21 pm »
Функции высшего порядка есть :-)
То есть, задача под какой-то конкретный язык, а не в общем случае? Тогда стоило добавить это в условие задачи.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #63 : Апрель 18, 2012, 06:30:19 pm »
Функции высшего порядка есть :-)
То есть, задача под какой-то конкретный язык, а не в общем случае? Тогда стоило добавить это в условие задачи.
Хотелось получить более-менее общий метод решения подобного на классе схожих императивных языков.

А так - язык Go. Но, по моему, это поможет мало, просто потому, что никто кроме меня тут на нем вроде бы не пишет.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #64 : Апрель 18, 2012, 06:41:07 pm »
Раз радостное смешение логик не катит, то тогда прямая дорога к грустному конечному автомату.
Вот это грамотный ответ... :)  Правда здесь можно обсудить.. в какой степени можно эмулировать исключения средствами некоторого внешнего модуля (например, аккумуляция  ситуаций во внешнем хранилище с возможностью пост обработки)... и что это может дать

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #65 : Апрель 18, 2012, 06:52:48 pm »
Раз радостное смешение логик не катит, то тогда прямая дорога к грустному конечному автомату.
Угу. Я думал об этом. Цикл, внутри case. Ну и поехали. По сути тут case играет роль goto с вычисляемой меткой.

В результате отказался - избыточно мощный и общий инструмент, следовательно больше шансов совершить ошибку. То есть если конечный автомат тут использовать, то нужно его специальным образом оформить. Как его оформить поприличнее я так и не придумал.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #66 : Апрель 18, 2012, 07:07:27 pm »
внутри case.
А зачем нам чемодан? Ведь есть же функции высшего порядка? Или это функции американского высшего порядка? Типа: "теперь вы равноправны, но на юге шерифу на глаза лучше не попадайтесь".

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #67 : Апрель 18, 2012, 07:37:11 pm »
внутри case.
А зачем нам чемодан? Ведь есть же функции высшего порядка? Или это функции американского высшего порядка? Типа: "теперь вы равноправны, но на юге шерифу на глаза лучше не попадайтесь".
Я могу ошибаться, но по моему функции высших порядков не заменят кейс. Заменить кейс может паттерн матчинг (ака сопоставление с образцом).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #68 : Апрель 18, 2012, 08:49:33 pm »
В общем случае, навероное - да, не заменят. Но если рассматривать конечный автомат как последовательность "действие - переход", то переход-к-новому-действию можно заменить на вызов нужной функции. Функции, есс-но, нужно передать в параметрах (может, есть альтернативы, но я их пока не придумал). Думаю, получится упрощённый лиспо-подобный интерпретатор.

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #69 : Апрель 18, 2012, 09:11:47 pm »
А такой  способ не пройдет -пусть мы имеем
простейший обьект TWarder  с одним полем - ErrCode, конструктором устанавливающем его в nil, и методом WardProc(f:WardedProc) -который может менять ErrCode (в зависимости отего текущего значения вызывая f либо нет ), тогда работу фрагмент можно представить ввиде:
.......
MyWarder:=TWvarder.Create()
......
MyWarder.WardProc(f0());
MyWarder.WardProc(f1());
MyWarder.WardProc(f2());
.....
обработка ошибок...
Case  MyWarder.ErrCode of
err1:Log(err1,'f0()')
err2:Log(err2,'f1()')
.....

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #70 : Апрель 18, 2012, 09:27:19 pm »
Сама WardProc имеет простейший вид
Procedure TWarder.WardProc (f:WardedProc)
Begin
IF ErrCode=nil then ErrCode:=f()
End;

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #71 : Апрель 18, 2012, 09:29:45 pm »
В Паскале такая хрень проходит, в Обероне, даже простейшем.. тоже должна...

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #72 : Апрель 19, 2012, 01:41:24 am »
... так что я явно поторопился с "Одна проблема в Обероне07(с его ЕДИНСТВЕННЫМ  RETURN -ом ) вам не дадут даже сделать этого...  ;D". ;)

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #73 : Апрель 19, 2012, 01:48:02 am »
А с другой стороны, свел задачу к форме которую хотел Valexey?- но , как и  ожидалось, от if а избавиться не удалось...

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #74 : Апрель 19, 2012, 03:54:04 am »
А чё, мне понравилось, пожалуй попробую в будущем задейстововать :), правда тут без кейса можно (тем более в 1с его нет)