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

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #45 : Апрель 18, 2012, 03:46:04 pm »
не правильная постановка вопроса - уместнее использовать фразу "добиться оптимального решения" - оно всегда есть в КОНКРЕТНОМ случае - а уж вопрос насколько оно оптимальное... я вот , например, почитал в этом топике мнение Алексея.... ну и высказался ... насчет "конфетки".

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #46 : Апрель 18, 2012, 03:49:28 pm »
Где логика радостно перемешана с обработкой ошибок.

В поставленных условиях (исключений нет, макросов нет, вообще ничего нет) трудно изобрести что-то новое. Чисто вкусовые вариации... Если бы можно было компилятор покрутить, то можно было бы пофантазировать... хотя кончилось бы все скорее всего поддержкой исключений.
Ну, defer есть :-) Еще паника есть (которую можно поймать - похоже на исключения). Но мне кажется что паниковать по поводу и без - плохой тон. Функции высшего порядка есть :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #47 : Апрель 18, 2012, 03:52:11 pm »
Вот это
f1()
f2()
f3()

и то что у вас в шапке топика - СОВЕРШЕННО РАЗЛИЧНЫЕ ВЕЩИ (вы уж разберитесь с тем что вам нужно,..)
Одно и то же. Мне нужно что бы f2 выполнялось когда f1 успешен. и так далее. Но эта связка (условность выполнение f2) это не логика приложения. То есть это не то, что должно выпирать.
Охох... Алексей .. если вам нужно 3 вызова подряд - if по ЛОГИКЕ не нужны... ЕСЛИ НЕТ то НИКУДА ВЫ ОТ НИХ НЕ ДЕНЕТЕСЬ в особенности если вы должны сделать что то ПОСЛЕ  этих  вызовов - это есть ЛОГИКА АЛГОРИТМА. у вас к ЛОГИКЕ ОБРАБОТКИ ОШИБКИ относится вызов функции Log() который я убрал из логики алгоритма... И хватит... на это... достало - вы...это.... довольно неконструктивны....

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #48 : Апрель 18, 2012, 03:58:39 pm »
Охох... Алексей .. если вам нужно 3 вызова подряд - if по ЛОГИКЕ не нужны... ЕСЛИ НЕТ то НИКУДА ВЫ ОТ НИХ НЕ ДЕНЕТЕСЬ в особенности если вы должны сделать что то ПОСЛЕ  этих  вызовов - это есть ЛОГИКА АЛГОРИТМА. у вас к ЛОГИКЕ ОБРАБОТКИ ОШИБКИ относится вызов функции Log() который я убрал из логики алгоритма... И хватит... на это... достало - вы...это.... довольно неконструктивны....
Ну да, ну да. Это все равно что писать вместо вот такого:
if (a&&b&&c&&d) {...}писать такое:
if (a) {
    if (b) {
        if (c) {
            if (d) {
                ...
            }
        }
    }
}
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #49 : Апрель 18, 2012, 04:02:47 pm »
 ;)  Ага придуриваемся.... а что, мне тоже весело...

valexey

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

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #51 : Апрель 18, 2012, 04:12:46 pm »
 :D Если прочитать ВСЕ ваши требования (... по этому топику)... целей у вас... как бы это выразится  помягче .. достаточно много (например, избежание "радостного смешивания") и не все они разумные в  контексте налагаемых вами ограничений.. впрочем, по этому поводу я уже высказался... все.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #52 : Апрель 18, 2012, 04:30:40 pm »
Ну, defer есть :-)

Тогда я бы точно склонился к варианту с досрочными ретурнами. Дейкстра (точнее его толкование труЪ оберощиками) идет лесом.

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Обработка "ошибок".
« Ответ #53 : Апрель 18, 2012, 04:55:18 pm »
делать тупо в лоб
Советую делать тупо в лоб с многократно вложенными if, но только диагностику ошибки делать сразу, а не где-то там в else через сто строчек.
err = f1();
if (err != nil)
{
logError("f1 failed", err);
}
else
{
//...
//...
//...
err = f2();
if (err != nil)
{
logError("f2 failed", err);
}
else
{
//...
//...
//...
err = f3();
if (err != nil)
{
logError("f3 failed", err);
}
else
{
//...
//...
//...
err = f4();
if (err != nil)
{
logError("f4 failed", err);
}
else
{
//...
//...
//...
err = f5();
if (err != nil)
{
logError("f5 failed", err);
}
else
{
//...
//...
//...
}
}
}
}
}

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #54 : Апрель 18, 2012, 04:55:42 pm »
Ну, defer есть :-)

Тогда я бы точно склонился к варианту с досрочными ретурнами. Дейкстра (точнее его толкование труЪ оберощиками) идет лесом.
Одна проблема в Обероне07(с его ЕДИНСТВЕННЫМ  RETURN -ом ) вам не дадут даже сделать этого... ;D

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #55 : Апрель 18, 2012, 05:00:44 pm »
делать тупо в лоб
Советую делать тупо в лоб с многократно вложенными if, но только диагностику ошибки делать сразу, а не где-то там в else через сто строчек.
err = f1();
if (err != nil)
{
logError("f1 failed", err);
}
else
{
//...
//...
//...
err = f2();
if (err != nil)
{
logError("f2 failed", err);
}
else
{
//...
//...
//...
err = f3();
if (err != nil)
{
logError("f3 failed", err);
}
else
{
//...
//...
//...
err = f4();
if (err != nil)
{
logError("f4 failed", err);
}
else
{
//...
//...
//...
err = f5();
if (err != nil)
{
logError("f5 failed", err);
}
else
{
//...
//...
//...
}
}
}
}
}
  :D ;D А вот по Алексею  это НИЗЗЯ ибо  здесь "радостно смешиваются" две различные логики  ;D

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #56 : Апрель 18, 2012, 05:03:31 pm »
Советую делать тупо в лоб с многократно вложенными if, но только диагностику ошибки делать сразу, а не где-то там в else через сто строчек.

2valexey: я ж говорю, чисто вкусовые вариации - для меня, например, код Сергея абсолютно нечитаем :)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Обработка "ошибок".
« Ответ #57 : Апрель 18, 2012, 05:06:00 pm »
Одна проблема в Обероне07(с его ЕДИНСТВЕННЫМ  RETURN -ом ) вам не дадут даже сделать этого... ;D

А там и defer нету ;) Так что там, скорее всего, я бы выбрал вариант "с проверками до конца".

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #58 : Апрель 18, 2012, 05:19:34 pm »
Акаки там есть варианты акромя вашего (лестница)?  ;)

DIzer

  • Гость
Re: Обработка "ошибок".
« Ответ #59 : Апрель 18, 2012, 05:27:37 pm »
Кто нибудь знает , есть ли в каком -нибудь Обероне - нечто на вроде  AnyProc -указателя на   произвольную процедуру?