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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #15 : Апрель 18, 2012, 09:19:26 am »
Ага. Я слишком вскользь прочёл. Тут речь о каких-то монадах.
Пускай valexey сам решает подходит или нет.  ;)
Ненене, монады как раз нельзя :-) Твой код:
passed := Check1Passed();
passed := passed & Check2Passed();
Это и есть по сути монада. То есть связывание вычислений через выражение.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Обработка "ошибок".
« Ответ #16 : Апрель 18, 2012, 09:34:28 am »
А эти ограничения имеют практический или теоретический (академический) характер?
Чем они обоснованы? Ведь операцию умножения тоже можно запретить. Но нафига?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #17 : Апрель 18, 2012, 09:54:13 am »
А эти ограничения имеют практический или теоретический (академический) характер?
Чем они обоснованы? Ведь операцию умножения тоже можно запретить. Но нафига?
Ограничения чисто практические. Причины с примерами я приводил выше.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

kemiisto

  • Jr. Member
  • **
  • Сообщений: 64
    • Просмотр профиля
    • kemiisto.ru
Re: Обработка "ошибок".
« Ответ #18 : Апрель 18, 2012, 10:03:40 am »
Ещё как вариант (пускай и не всегда применимый) - действовать как большинтсво компиляторов при синтаксическом разборе. Встретил ошибку - не беда, добавил в список и пошёл дальше. В конце прохода (или при накомплении некого критического числа ошибок) - остановился и выплюнул накопленный список. Кому надо :D , знает куда смотреть.

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Обработка "ошибок".
« Ответ #19 : Апрель 18, 2012, 10:14:21 am »
Ага. Я слишком вскользь прочёл. Тут речь о каких-то монадах.
Пускай valexey сам решает подходит или нет.  ;)
Ненене, монады как раз нельзя :-) Твой код:
passed := Check1Passed();
passed := passed & Check2Passed();
Это и есть по сути монада. То есть связывание вычислений через выражение.
Откуда взят запрет на связывание вычислений через выражения? Если он взят с потолка, то мой вариант должен подойти.

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Обработка "ошибок".
« Ответ #20 : Апрель 18, 2012, 10:17:32 am »
Вот мой вариант обработки ошибок:
...
passed := Check1Passed();
passed := passed & Check2Passed();
...
Опять связывание вычислений через выражение. Не годится по выше изложенным соображениям. Также не годится в случае если функция возвращает больше одного значения (в некоторых языках так можно):
err, res = f1()
В этом случае f1() засунуть в качестве операнда выражения уже не получится.
В предложенных мною конструкциях (внутри булевой функции) можно использовать любые комбинации других возвращающих функций. Главное, вернуть статус: Успех или Неудача.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #21 : Апрель 18, 2012, 11:45:59 am »
В предложенных мною конструкциях (внутри булевой функции) можно использовать любые комбинации других возвращающих функций. Главное, вернуть статус: Успех или Неудача.
Тогда придется в эти булевы функции заворачивать каждые две-пять строчек интересующего кода. То есть этих вспомогательных функций будет примерно столько же сколько строк кода без обработки ошибок. По моему, это слишком большой оверхед.

Собственно это первое что я пытался сделать когда начал бороться за читабельность кода.

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

alexus

  • Гость
Re: Обработка "ошибок".
« Ответ #22 : Апрель 18, 2012, 11:48:55 am »
PS. Вот в такие вот моменты я жутко завидую тем кто пишет на хаскелле.
... или на ассемблере... одна простая "макро-обёрка" вызова... и радуемся... :)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #23 : Апрель 18, 2012, 12:04:52 pm »
PS. Вот в такие вот моменты я жутко завидую тем кто пишет на хаскелле.
... или на ассемблере... одна простая "макро-обёрка" вызова... и радуемся... :)
Ну, не ассемблере, а таки макроасме :-) Но а вообще любому языку можно с макросистемой я в данном случае сильно завидую - тут даже макросов Сишных хватит. Но увы, в целевом языке нет ни макросов ни парадигмы "все есть выражение". То есть такой дубовенький императивный язычок. Сильно более дубовый в этом плане нежели Си.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #24 : Апрель 18, 2012, 01:23:27 pm »
А есть ли возможность вызывать код в виде строки (привожу аналог из 1С):

ФункцияОбертка(Вычислить("ВызываемаяФункция"), Выполнить("ДополнительныйТекстОбработкиКода")). В данном случае все можно сделать в одной функции, правда код будет в виде текста, что не очень удобно

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #25 : Апрель 18, 2012, 01:27:33 pm »
А есть ли возможность вызывать код в виде строки (привожу аналог из 1С):

ФункцияОбертка(Вычислить("ВызываемаяФункция"), Выполнить("ДополнительныйТекстОбработкиКода")). В данном случае все можно сделать в одной функции, правда код будет в виде текста, что не очень удобно
Нет, функции eval нет. Просто потому, что в этом случае пришлось тащить с собой компилятор.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #26 : Апрель 18, 2012, 01:56:13 pm »
Не пронял, зачем нужна переменная еrr (по смыслу содержит указатель возвращаемый мелкими функциями....) вполне можно и без него ..  или нет?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #27 : Апрель 18, 2012, 01:57:23 pm »
Не пронял, зачем нужна переменная еrr (по смыслу содержит указатель возвращаемый мелкими функциями....) вполне можно и без него ..  или нет?
Это код ошибки. И функции не мелкие.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #28 : Апрель 18, 2012, 02:05:07 pm »
Уродский код, и потом,  я про то, что он нигде не используется... а насчет того, большие функции или маленькие пофигу - один черт каждая вызывается ровно один раз (либо не вызывается вообще)...

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #29 : Апрель 18, 2012, 02:15:41 pm »
Уродский код, и потом,  я про то, что он нигде не используется... а насчет того, большие функции или маленькие пофигу - один черт каждая вызывается ровно один раз (либо не вызывается вообще)...
Ничего не понял. Он используется (как минимум его проверяют на nil). Для пущего использования замени logError() на logError(err);

err = f1()
if (nil == err) {
    err = f2()
    if (nil == err) {
        err = f3()
        if (nil == err) {
        ...
        }
    } else {
        logError(err);
    }
} else {
    logError(err);
}
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"