170 похожих чатов

Здравствуйте! подскажите, какие накладные расходы несут за собой такай метод Вот

есть функция я её вызываю через try()
внутри функции я вызваю ещё и ещё и ещё функции, ну то есть ухожу вглубь, и в итоге, получил результат - неудовлетворительный и тогда бросаю EXCEPT
типо такой быстрый выход из вереницы функций, а не возвращать их все через return
Типо вроде как и стэк держится в раскрученном виде и потом его обратно сворачивать при исключении, а вроде и все функции через ретёрн делать, неудобно,
Может кто пояснить за эту тему?

35 ответов

30 просмотров

Всё понятно, не понятно в чём твой вопрос

это называется рекурсивный вызов

Андрей-Иванов Автор вопроса
Ilya Zviagin
Всё понятно, не понятно в чём твой вопрос

так делать норм? так и делают большие дяди?

какие накладные расходы несут за собой такай метод - какие-то накладные расходы несёт. Проблема в том, что альтернативы у тебя нет.

Андрей Иванов
так делать норм? так и делают большие дяди?

нет, не норм, опиши алгоритм нормально, оставь рекурсию школьникам на егэ

Андрей-Иванов Автор вопроса
Aniki Hi$ok@ 🌈 Z 🐀
нет, не норм, опиши алгоритм нормально, оставь рек...

там нет рекурсии, просто много функций уходящих вглубь, ну и челу лень как я уже говорил делать во всех функция return а просто бросает except

Андрей Иванов
там нет рекурсии, просто много функций уходящих вг...

а вот исключения выбрасывать точно не норм, оно сделано что бы раз в год спасать программу от падения, а не для хитрых алгоритмов. Исключения не плохо потребляют ресурсы

Андрей-Иванов Автор вопроса
Ilya Zviagin
так делать нормально

а разве это не пагубно влияет на производительность? Типо насколько хуже станет откомпилированный код?

Ilya Zviagin
Если ошибка - надо выбрасывать исключение.

человек говорит что он в рекурсивной функции выбрасывает исключение, чтобы вернуться из неё

Так в итоге ты значение возвращаешь или ошибку выкидываешь?

Андрей-Иванов Автор вопроса
Ilya Zviagin
Если ошибка - надо выбрасывать исключение.

Так я же и говорю это не ошибка, как бы, ну то есть ошибка, результат получился плохой но как бы не stack overflow

Андрей-Иванов Автор вопроса
Alexander "Ternvein" Isaev
Так в итоге ты значение возвращаешь или ошибку вык...

ошибку бросаю, и на верхней функции ловлю, типо быстрый выход из вереницы функций

Андрей-Иванов Автор вопроса

я в чужом коде ковыряюсь, и вот увидел такой метод, хочу понять, он целесообразен или нет?

Андрей-Иванов Автор вопроса
Андрей-Иванов Автор вопроса
Aniki Hi$ok@ 🌈 Z 🐀
нет, так поступать не правильно

ответ не так прост, как мне кажется, этот код писал неглупый мужик

Андрей Иванов
а почему?

Потому что исключения — для ошибок. Как выше сказали, не надо их использовать для контроля потока выполнения.

Андрей Иванов
ответ не так прост, как мне кажется, этот код писа...

ну, видимо он просто верил что это быстро, но оно не быстро, потому что сделано не для этого

Андрей-Иванов Автор вопроса

ну да, так можно было и GOTO ебануть

Андрей Иванов
ну да, так можно было и GOTO ебануть

а всё из-за рекурсии, смотри до чего ты в итоге докатился, а в начале все выглядело вроде как нормально

Андрей-Иванов Автор вопроса
Aniki Hi$ok@ 🌈 Z 🐀
а всё из-за рекурсии, смотри до чего ты в итоге до...

где вы тут рекурсию увидели, я ни разу про неё не говорил?

Андрей Иванов
где вы тут рекурсию увидели, я ни разу про неё не ...

"Вот есть функция я её вызываю через try() внутри функции я вызваю ещё и ещё и ещё функции"

Андрей Иванов
ну не ёё же саму, а другие

а в чём тогда проблема, все функции что-то да возвращают, само свернётся после последней

Андрей-Иванов Автор вопроса
Aniki Hi$ok@ 🌈 Z 🐀
а в чём тогда проблема, все функции что-то да возв...

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

Андрей Иванов
ну вот там возвращаются всякие классы из каждой фу...

std::option, да, проверять на валидность. Оно будет работать быстрее исключения

Андрей Иванов
ну вот там возвращаются всякие классы из каждой фу...

Бросай исключение. Критерий простой - приложение (код) может дальше работать ? Да - возвращай значение. Нет - кидай исключение.

Андрей Иванов
так делать норм? так и делают большие дяди?

Здравствуйте. Ну собственно в этом и есть механизм исключений. Раскручивание стека при срабатывании исключения - неотъемлемая часть механизма. Кроме того, многие считают хорошей практикой обрабатывать исключения на более высоком уровне вложенности вызова функций, по отношению к которому оно было выброшено. Да, поддержка самой способности выброса исключений несет дополнительные расходы. Именно поэтому и рекомендуется использовать ключевое слово noexcept по мере возможности.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
Карта сайта