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

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

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

11 ответов

25 просмотров

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/

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
7
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта