Size: a a a

Kotlin Community

2020 June 10

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
На самом деле, в посте Романа вполне конкретно написано, почему не Either, если кто читал внимательно
Видимо, не все это заметили
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Видимо, не все это заметили
Потому что есть-или-нет, то для этого есть нулябли и Either не нужОн. Если вариантов больше двух, то силед иерархии значительно более выразительны, чем монструозные Either8. Вторая часть - это уже мой хумбл опинион.
источник

QH

Quantum Harmonizer in Kotlin Community
Alexander Nozik
Потому что есть-или-нет, то для этого есть нулябли и Either не нужОн. Если вариантов больше двух, то силед иерархии значительно более выразительны, чем монструозные Either8. Вторая часть - это уже мой хумбл опинион.
> монструозные Either8
отсылка засчитана :)
источник

AN

Alexander Nozik in Kotlin Community
Quantum Harmonizer
> монструозные Either8
отсылка засчитана :)
Что думаю, то говорю :)
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Потому что есть-или-нет, то для этого есть нулябли и Either не нужОн. Если вариантов больше двух, то силед иерархии значительно более выразительны, чем монструозные Either8. Вторая часть - это уже мой хумбл опинион.
Даже там приведён весьма типичный пример есть-или-нет, где "нет" это не просто "нет", а "нет" с дополнительной информацией. Почему бы их не обобщить?
Нормальный use-case для Either8 я не знаю, так что согласен.
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Даже там приведён весьма типичный пример есть-или-нет, где "нет" это не просто "нет", а "нет" с дополнительной информацией. Почему бы их не обобщить?
Нормальный use-case для Either8 я не знаю, так что согласен.
Это вопрос проектирования. Как я понял Романа, просто в котлин надо проектировать АПИ таким образом, чтобы null был смысловым.
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Это вопрос проектирования. Как я понял Романа, просто в котлин надо проектировать АПИ таким образом, чтобы null был смысловым.
Проблема в том, что null не может нести смысла больше, чем "что-то пошло не так".
И кстати превращение неожиданного null в качественное сообщение о логической ошибке - это дополнительный код, который придётся писать каждый раз.
А если возвращать Either<L, R>, где у L есть адекватный toString(), то всё становится проще.
источник

VP

Vladimir Petrakovich in Kotlin Community
А ещё исключения полезны везде, где можно забыть проверить результат. В идеале это и есть I/O, но не всегда.
источник

AN

Alexander Nozik in Kotlin Community
Мне доктрина Романа больше нравится. Исключения кидаются в исключительных ситуациях и обрабатываются в одном месте.
источник

AS

Andrei Shikov in Kotlin Community
Мне кажется, что во многом Result отлично замещает Either. Смысл одинаковый, но намного более понятно тем, кто не знаком с функциональщиной.
источник

QH

Quantum Harmonizer in Kotlin Community
Andrei Shikov
Мне кажется, что во многом Result отлично замещает Either. Смысл одинаковый, но намного более понятно тем, кто не знаком с функциональщиной.
у result left может быть только throwable. Для ситуаций, которые всегда нужно обрабатывать, это не имеет смысла
источник

VP

Vladimir Petrakovich in Kotlin Community
Andrei Shikov
Мне кажется, что во многом Result отлично замещает Either. Смысл одинаковый, но намного более понятно тем, кто не знаком с функциональщиной.
Result вообще ни разу не замена Either, там типобезопасности ноль. Как вы будете обрабатывать Throwable?
источник

AS

Andrei Shikov in Kotlin Community
Ладно, я больше смотрел в сторону резалта как в расте 🙂
источник

VP

Vladimir Petrakovich in Kotlin Community
Так это и есть Either 😄
источник

AS

Andrei Shikov in Kotlin Community
Я больше про названия, если честно
источник

VP

Vladimir Petrakovich in Kotlin Community
Но в расте ещё и альтернатив-то нет
источник

QH

Quantum Harmonizer in Kotlin Community
Vladimir Petrakovich
Но в расте ещё и альтернатив-то нет
Есть. Паники можно ловить, почти как эксепшены. Ну и свои а-ля силеды — вообще тривиально.
источник

AS

Andrei Shikov in Kotlin Community
Vladimir Petrakovich
Но в расте ещё и альтернатив-то нет
Ну можно сделать свой Either, но его нельзя через ? отловить вроде
источник

QH

Quantum Harmonizer in Kotlin Community
Просто там чётко разделили: паники — для ошибок программирования, резалты и опшеналы — для обработки успеха-неуспеха.
источник

VP

Vladimir Petrakovich in Kotlin Community
Andrei Shikov
Ну можно сделать свой Either, но его нельзя через ? отловить вроде
О, точно, надо будет это вспомнить, когда кто-то будет заявлять, что в котлине nullability прибили гвоздями в язык
источник