Manuel Dupont
03/11/2021, 5:02 PMNir
03/11/2021, 5:03 PMResult
, that I guess many people don't love. It's not generic on the type of the errorManuel Dupont
03/11/2021, 5:04 PMNir
03/11/2021, 5:04 PMManuel Dupont
03/11/2021, 5:04 PMNir
03/11/2021, 5:05 PMManuel Dupont
03/11/2021, 5:05 PMNir
03/11/2021, 5:05 PMManuel Dupont
03/11/2021, 5:06 PMNir
03/11/2021, 5:06 PMNir
03/11/2021, 5:06 PMManuel Dupont
03/11/2021, 5:06 PMNir
03/11/2021, 5:07 PMNir
03/11/2021, 5:07 PMManuel Dupont
03/11/2021, 5:07 PMNir
03/11/2021, 5:08 PMManuel Dupont
03/11/2021, 5:08 PMNir
03/11/2021, 5:08 PMNir
03/11/2021, 5:08 PMManuel Dupont
03/11/2021, 5:08 PMManuel Dupont
03/11/2021, 5:08 PMNir
03/11/2021, 5:09 PMNir
03/11/2021, 5:09 PMManuel Dupont
03/11/2021, 5:09 PMNir
03/11/2021, 5:10 PMManuel Dupont
03/11/2021, 5:10 PMManuel Dupont
03/11/2021, 5:10 PMManuel Dupont
03/11/2021, 5:10 PMNir
03/11/2021, 5:10 PMManuel Dupont
03/11/2021, 5:11 PMNir
03/11/2021, 5:11 PMNir
03/11/2021, 5:11 PMNir
03/11/2021, 5:11 PMManuel Dupont
03/11/2021, 5:12 PMNir
03/11/2021, 5:12 PMManuel Dupont
03/11/2021, 5:12 PMManuel Dupont
03/11/2021, 5:12 PMManuel Dupont
03/11/2021, 5:13 PMNir
03/11/2021, 5:13 PMNir
03/11/2021, 5:14 PMprocessRequest
function return some kind of sealed classManuel Dupont
03/11/2021, 5:14 PMManuel Dupont
03/11/2021, 5:14 PMNir
03/11/2021, 5:14 PMMarc Knaup
03/11/2021, 5:26 PMResult
type won’t make sense anyway, would it?
For different operations and use cases there are different errors (or more generically - potential outcomes) and thus each needs their own domain-specific sealed type.
Unions & better typealiases would simplify that but not generic Result types.
The current Result
is highly optimized for low-level usages like coroutines.ephemient
03/11/2021, 5:28 PMephemient
03/11/2021, 5:32 PMNir
03/11/2021, 5:32 PMephemient
03/11/2021, 5:32 PMNir
03/11/2021, 5:33 PMNir
03/11/2021, 5:34 PMMarc Knaup
03/11/2021, 5:34 PMephemient
03/11/2021, 5:34 PMNir
03/11/2021, 5:35 PMMarc Knaup
03/11/2021, 5:35 PMnil
(null), precondition checks (similar to require
in Kotlin) etc. all panic.Nir
03/11/2021, 5:35 PMMarc Knaup
03/11/2021, 5:36 PMephemient
03/11/2021, 5:37 PMManuel Dupont
03/11/2021, 5:38 PMephemient
03/11/2021, 5:38 PMManuel Dupont
03/11/2021, 5:39 PMNir
03/11/2021, 5:39 PMManuel Dupont
03/11/2021, 5:39 PMephemient
03/11/2021, 5:39 PMNir
03/11/2021, 5:40 PMtry!
, when you are very certain that the error won't actually happen at runtimeNir
03/11/2021, 5:40 PMMarc Knaup
03/11/2021, 5:41 PMNir
03/11/2021, 5:41 PMNir
03/11/2021, 5:41 PMNir
03/11/2021, 5:42 PMNir
03/11/2021, 5:42 PMMarc Knaup
03/11/2021, 5:45 PMNir
03/11/2021, 5:45 PMgetOrThrow
on the Result type, which are almost always useful at some call sites. This is verbose to write out every time if you have a sealed class (or, definitely it is very verbose to write in such a way that you actually get the proper error information if there's a failure)Nir
03/11/2021, 5:46 PMMarc Knaup
03/11/2021, 5:46 PMNir
03/11/2021, 5:47 PMMarc Knaup
03/11/2021, 5:47 PMNir
03/11/2021, 5:47 PMNir
03/11/2021, 5:48 PMMarc Knaup
03/11/2021, 5:48 PMNir
03/11/2021, 5:48 PMMarc Knaup
03/11/2021, 5:48 PMNir
03/11/2021, 5:49 PMNir
03/11/2021, 5:49 PMMarc Knaup
03/11/2021, 5:49 PMNir
03/11/2021, 5:49 PMMarc Knaup
03/11/2021, 5:49 PMNir
03/11/2021, 5:49 PMNir
03/11/2021, 5:50 PMMarc Knaup
03/11/2021, 5:50 PMNir
03/11/2021, 5:50 PMMarc Knaup
03/11/2021, 5:50 PMMarc Knaup
03/11/2021, 5:50 PMNir
03/11/2021, 5:50 PMNir
03/11/2021, 5:50 PMNir
03/11/2021, 5:50 PMMarc Knaup
03/11/2021, 5:51 PMNir
03/11/2021, 5:51 PMNir
03/11/2021, 5:51 PMNir
03/11/2021, 5:51 PMNir
03/11/2021, 5:51 PMMarc Knaup
03/11/2021, 5:52 PMNir
03/11/2021, 5:52 PMMarc Knaup
03/11/2021, 5:52 PMMarc Knaup
03/11/2021, 5:52 PMNir
03/11/2021, 5:53 PMNir
03/11/2021, 5:53 PMNir
03/11/2021, 5:53 PMNir
03/11/2021, 5:53 PMMarc Knaup
03/11/2021, 5:54 PMMarc Knaup
03/11/2021, 5:57 PMNir
03/11/2021, 6:04 PMNir
03/11/2021, 6:04 PMNir
03/11/2021, 6:06 PMNir
03/11/2021, 6:07 PMMarc Knaup
03/11/2021, 6:07 PMError
then even otherwise pure functions are no longer pure because JVM internals change (e.g. OOM causing side-effects).Nir
03/11/2021, 6:07 PMMarc Knaup
03/11/2021, 6:08 PMNir
03/11/2021, 6:09 PMNir
03/11/2021, 6:10 PMMarc Knaup
03/11/2021, 6:10 PMNir
03/11/2021, 6:11 PMNir
03/11/2021, 6:11 PMMarc Knaup
03/11/2021, 6:12 PMMarc Knaup
03/11/2021, 6:12 PMNir
03/11/2021, 6:12 PMNir
03/11/2021, 6:13 PMMarc Knaup
03/11/2021, 6:13 PMint
on the stack unintentionally (e.g. due to off by one error) which could have severe effects on the domain.
That kind of mistake may or may not be detected by checking parameters and state before using it.Marc Knaup
03/11/2021, 6:14 PMNir
03/11/2021, 6:14 PMMarc Knaup
03/11/2021, 6:14 PMsealed class
is the closest we can get.Nir
03/11/2021, 6:15 PMNir
03/11/2021, 6:15 PMMarc Knaup
03/11/2021, 6:15 PMNir
03/11/2021, 6:16 PMNir
03/11/2021, 6:16 PMMarc Knaup
03/11/2021, 6:16 PMMarc Knaup
03/11/2021, 6:16 PMNir
03/11/2021, 6:17 PMMarc Knaup
03/11/2021, 6:17 PMNir
03/11/2021, 6:17 PMNir
03/11/2021, 6:17 PMNir
03/11/2021, 6:18 PMMarc Knaup
03/11/2021, 6:18 PMNir
03/11/2021, 6:18 PMNir
03/11/2021, 6:18 PMMarc Knaup
03/11/2021, 6:18 PMNir
03/11/2021, 6:19 PMNir
03/11/2021, 6:19 PMNir
03/11/2021, 6:19 PMMarc Knaup
03/11/2021, 6:20 PMMarc Knaup
03/11/2021, 6:20 PMNir
03/11/2021, 6:20 PMNir
03/11/2021, 6:20 PMNir
03/11/2021, 6:20 PMMarc Knaup
03/11/2021, 6:20 PMNir
03/11/2021, 6:21 PMMarc Knaup
03/11/2021, 6:22 PMNir
03/11/2021, 6:22 PMNir
03/11/2021, 6:22 PMNir
03/11/2021, 6:22 PMNir
03/11/2021, 6:22 PMNir
03/11/2021, 6:23 PMMarc Knaup
03/11/2021, 6:23 PMNir
03/11/2021, 6:23 PMNir
03/11/2021, 6:24 PMNir
03/11/2021, 6:24 PMNir
03/11/2021, 6:24 PMMarc Knaup
03/11/2021, 6:24 PMephemient
03/11/2021, 6:24 PMNir
03/11/2021, 6:24 PMNir
03/11/2021, 6:25 PMNir
03/11/2021, 6:26 PMNir
03/11/2021, 6:26 PMNir
03/11/2021, 6:26 PMMarc Knaup
03/11/2021, 6:26 PMNir
03/11/2021, 6:27 PMNir
03/11/2021, 6:27 PMNir
03/11/2021, 6:28 PMMarc Knaup
03/11/2021, 6:29 PMMarc Knaup
03/11/2021, 6:29 PMResult
btw? Do you have an example?Nir
03/11/2021, 6:46 PMMarc Knaup
03/11/2021, 6:46 PMNir
03/11/2021, 7:02 PMMarc Knaup
03/11/2021, 7:04 PMNir
03/11/2021, 7:16 PMNir
03/11/2021, 7:16 PMNir
03/11/2021, 7:17 PMMarc Knaup
03/11/2021, 7:17 PMNir
03/11/2021, 7:17 PMMarc Knaup
03/11/2021, 7:17 PMkotlinx-serialization
and won’t have to write your own plugin.Nir
03/11/2021, 7:17 PMNir
03/11/2021, 7:18 PMNir
03/11/2021, 7:18 PMNir
03/11/2021, 7:19 PMMarc Knaup
03/11/2021, 7:19 PMNir
03/11/2021, 7:22 PMNir
03/11/2021, 7:22 PMMarc Knaup
03/11/2021, 7:22 PMNir
03/11/2021, 7:22 PMNir
03/11/2021, 7:23 PMMarc Knaup
03/11/2021, 7:23 PMNir
03/11/2021, 7:23 PMMarc Knaup
03/11/2021, 7:24 PMNir
03/11/2021, 7:25 PMNir
03/11/2021, 7:25 PMNir
03/11/2021, 7:25 PMMarc Knaup
03/11/2021, 7:25 PMNir
03/11/2021, 7:26 PMNir
03/11/2021, 7:26 PMMarc Knaup
03/11/2021, 7:27 PMMarc Knaup
03/11/2021, 7:28 PMManuel Dupont
03/11/2021, 8:18 PMJavier
03/11/2021, 10:38 PMMarc Knaup
03/12/2021, 3:02 PMManuel Dupont
03/12/2021, 7:46 PM