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

А как в котлине идиоматично декларировать исключения, которые метод выбрасывает?

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

11 ответов

29 просмотров

sealed class с dataclass-подтипами Success Fail — самый явный контракт. Внутри Success твой payload, внутри Fail может быть как исключение, так и enum код ошибки какой-то

Лично мой опыт. Если ошибка вызыванного метода может быть обработана особым образом и исправлена вызывающим, то Result<T, TError>, где TError закрытый силед тип (discriminated union). Если там просто про отсутствие результата, то нулабл. Если там кардинальный ахтунг (дб недоступна, сервис не отвечает), то просто бросаю исключение. Вызывающий явно такое обработать не в состоянии.

Ayrat Hudaygulov
Лично мой опыт. Если ошибка вызыванного метода мо...

Трай кетчей у меня очень мало в коде, на глобальном евентлупе (если это воркер) или на весь реквест пайплайн (если это апи)

Анастасия- Автор вопроса
Ivan Vinogradov
sealed class с dataclass-подтипами Success Fail — ...

А если я хочу exception-style, а не monad-style(Ну или как это назвать)? Exception - это более spring-way, мне кажется, иначе придется в контроллере раскрывать Result, а не очень хочется

Анастасия- Автор вопроса
Ayrat Hudaygulov
Лично мой опыт. Если ошибка вызыванного метода мо...

Мне как-то не нравится смешивать два подхода к обработке ошибок

Анастасия
Мне как-то не нравится смешивать два подхода к обр...

Это прагматично. Исключения для исключительных ситуаций. Монады для обычных

Анастасия
А если я хочу exception-style, а не monad-style(Ну...

То всегда есть Java 🙂 Исключения в котлине только для исключительных ситуаций (ошибки I/O, нарушенные инварианты), они всегда unchecked. Можно, конечно, их в документации описать, но это не самое надёжное средство заставить их обрабатывать.

Анастасия- Автор вопроса
Vladimir Petraković
То всегда есть Java 🙂 Исключения в котлине только ...

Нет, я и в джаве использовала только unchecked(checked-исключения были очень плохой идеей), на мой вгзляд, это позволяет вызывающему как-то составить представления о том, что может случиться, о том, что он мог бы обработать, а что пусть летить наверх. Но с монадами сложнее, так как я не видела примера, насколько он приживется в спринге(Какой-нибудь @Transactional нужно исключение, что бы сделать rollback, скорее всего, это как-нибудь можно правильно обернуть, конечно, но все же)

Анастасия
Нет, я и в джаве использовала только unchecked(che...

Ну если вы в джаве не использовали checked исключения, вы можете просто писать такой же код. Да, с Result/Either спринговые прокси вряд ли поймут, что происходит.

Анастасия- Автор вопроса
Vladimir Petraković
Ну если вы в джаве не использовали checked исключе...

Т.е. в доке просто писать, что он кидает, понятно, спасибо

можно ещё аннотацию Throws на функцию повесить https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-throws/

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
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...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта