LINUX.ORG.RU

История изменений

Исправление vlad9486, (текущая версия) :

Ещё пример. Если входные данные явно нарушают контракт. Выход за пределы массива, например, или еще что-то. Да, можно возвращать ошибку. Но вы представляете себе этот код? Код выше по стеку такой: передам-ка я фигню в эту функцию, а потом

if r.is_err() {
    /* ну ладно, раскусили, делаю нормально */
}

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

Исправление vlad9486, :

Ещё пример. Если входные данные явно нарушают контракт. Выход за пределы массива, например, или еще что-то. Да, можно возвращать ошибку. Но вы представляете себе этот код? Код выше по стеку такой: передам-ка я фигню в эту функцию, а потом

if r.is_err() {
    /* ну ладно, раскусили, делаю нормально */
}

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

Исходная версия vlad9486, :

Ещё пример. Если входные данные явно нарушают контракт. Выход за пределы массива. Да, можно возвращать ошибку. Но вы представляете себе этот код? Код выше по стеку такой: передам-ка я фигню в эту функцию, а потом

if r.is_err() {
    /* ну ладно, раскусили, делаю нормально */
}

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