Информация об изменениях

Сообщение Re[14]: Тенденции языков от 23.05.2015 13:06

Изменено 23.05.2015 13:07 antropolog

Здравствуйте, MTD, Вы писали:


MTD>Это обсасывалось уже сто раз, но нет все равно периодически вылезает неофит услышавший от бородатого гуру, что исключения это плохо и понеслась.


MTD>Пример реального кода на кошерных кодах возврата от Adobe
Автор: MTD
Дата: 21.02.13


отличный код. супер. реально. теперь попробуй его переделать на исключения. могу дать подсказку, в одних случаях наличие error ведёт сразу к возврату из функции ( это легко заменить на единственный try/catch ), а в других ( примерно с середины твоего кода ) error в некоторых случаях игнорируется, например здесь:
    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 1, ai::UnicodeString("First Item"));
    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 3, ai::UnicodeString("Third Item"));
    error = sAIPanelFlyoutMenu->InsertItem(fPanelFlyoutMenu, 3, 2, ai::UnicodeString("Second Item"));
    error = sAIPanelFlyoutMenu->InsertSeparator(fPanelFlyoutMenu, 3, 5);
    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 4, ai::UnicodeString("Fourth Item"));
[/cpp]

здесь любая строка может не отработать, но это игнорируется. Покажи теперь как это (это - весь твой код ) будет на исключениях, аххахаха (зловещий хохот ).


MTD>На досуге предлагаю написать итератор без исключений, с помощью конструктора без исключений создать объект с гарантией, что если объект создан то он в валидном состоянии и т.д.
с исключениями у тебя вся программа - одно сплошное невалидное состояние
[code=cpp]
class Frobber
{
private:
    int m_NumberOfFrobs;
    FrobManager m_FrobManager;

public:

    void Frob()
    {
        m_NumberOfFrobs++;

        m_FrobManager.HandleFrob(new FrobObject());
    }
};


что если new FrobObject кинет исключение? m_NumberOfFrobs пушкин отревертит? а это очень простой пример. Собственно когда "обсасывалось уже сто раз" ты видимо пропустил такой момент, что исключения могут работать только при полной строгой гарантии исключений ( т.е. все методы — транзакционны ), но это бывает только в стране эльфоф и цветных пони.
Re[14]: Тенденции языков
Здравствуйте, MTD, Вы писали:


MTD>Это обсасывалось уже сто раз, но нет все равно периодически вылезает неофит услышавший от бородатого гуру, что исключения это плохо и понеслась.


MTD>Пример реального кода на кошерных кодах возврата от Adobe
Автор: MTD
Дата: 21.02.13


отличный код. супер. реально. теперь попробуй его переделать на исключения. могу дать подсказку, в одних случаях наличие error ведёт сразу к возврату из функции ( это легко заменить на единственный try/catch ), а в других ( примерно с середины твоего кода ) error в некоторых случаях игнорируется, например здесь:
    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 1, ai::UnicodeString("First Item"));
    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 3, ai::UnicodeString("Third Item"));
    error = sAIPanelFlyoutMenu->InsertItem(fPanelFlyoutMenu, 3, 2, ai::UnicodeString("Second Item"));
    error = sAIPanelFlyoutMenu->InsertSeparator(fPanelFlyoutMenu, 3, 5);
    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 4, ai::UnicodeString("Fourth Item"));


здесь любая строка может не отработать, но это игнорируется. Покажи теперь как это (это — весь твой код ) будет на исключениях, аххахаха (зловещий хохот ).


MTD>На досуге предлагаю написать итератор без исключений, с помощью конструктора без исключений создать объект с гарантией, что если объект создан то он в валидном состоянии и т.д.

с исключениями у тебя вся программа — одно сплошное невалидное состояние
class Frobber
{
private:
    int m_NumberOfFrobs;
    FrobManager m_FrobManager;

public:

    void Frob()
    {
        m_NumberOfFrobs++;

        m_FrobManager.HandleFrob(new FrobObject());
    }
};


что если new FrobObject кинет исключение? m_NumberOfFrobs пушкин отревертит? а это очень простой пример. Собственно когда "обсасывалось уже сто раз" ты видимо пропустил такой момент, что исключения могут работать только при полной строгой гарантии исключений ( т.е. все методы — транзакционны ), но это бывает только в стране эльфоф и цветных пони.