ursus
03/06/2019, 2:51 PMgildor
03/06/2019, 3:51 PMursus
03/06/2019, 3:58 PMNikky
03/06/2019, 4:01 PMursus
03/06/2019, 4:02 PMgildor
03/06/2019, 4:03 PMgildor
03/06/2019, 4:04 PMgildor
03/06/2019, 4:04 PMursus
03/06/2019, 4:05 PMfun doBar(): Result {
val fooResult = doFoo()
if (fooResult is Error) {
return Error(...)
}
}
ursus
03/06/2019, 4:05 PMgildor
03/06/2019, 4:06 PMgildor
03/06/2019, 4:06 PMNikky
03/06/2019, 4:06 PMval (request, response, result) = doRequest()
when(result) {
is Success -> result.value
is Failure -> report(result.failure)
}
ursus
03/06/2019, 4:07 PMgildor
03/06/2019, 4:07 PMgildor
03/06/2019, 4:07 PMursus
03/06/2019, 4:08 PMfun doBar(): Result {
val fooResult = doFoo()
if (fooResult is Error) {
return Error(...)
}
val quaxResult = doQuax()
if (quaxResult is Error) {
return Error(...)
}
...
doSomethingWith(fooResult.data, quaxResult.data)
return Success
}
I ommited it for brevity, but think n>1 subcallsgildor
03/06/2019, 4:08 PMursus
03/06/2019, 4:09 PMgildor
03/06/2019, 4:09 PMgildor
03/06/2019, 4:09 PMSuccess
, this just not how Result worksursus
03/06/2019, 4:09 PMursus
03/06/2019, 4:11 PMgildor
03/06/2019, 4:12 PMgildor
03/06/2019, 4:12 PMgildor
03/06/2019, 4:12 PMursus
03/06/2019, 4:12 PMgildor
03/06/2019, 4:14 PMfun doBar(): Result<Unit> {
return doFoo().mapCatching {
doQuax().getOrThrow() // UPD: Result doesn't have flatMap, so you have to use this
}
}
fun doFoo(): Result<Unit> = TODO()
fun doQuax(): Result<Unit> = TODO()
gildor
03/06/2019, 4:15 PMdoBar()
will return Resultgildor
03/06/2019, 4:16 PMfun doBar(): Result<Unit> {
return runCatching {
doFoo()
doQuax()
}
}
fun doFoo(): Unit = TODO()
fun doQuax(): Unit = TODO()
ursus
03/06/2019, 4:16 PMgildor
03/06/2019, 4:17 PMursus
03/06/2019, 4:18 PMgildor
03/06/2019, 4:19 PMgildor
03/06/2019, 4:19 PMyoull end up with Result<Unit, Throwable>Result doesnât support generic for exception
gildor
03/06/2019, 4:19 PMursus
03/06/2019, 4:20 PMgildor
03/06/2019, 4:20 PMgildor
03/06/2019, 4:20 PMursus
03/06/2019, 4:21 PMgildor
03/06/2019, 4:21 PMgildor
03/06/2019, 4:21 PMursus
03/06/2019, 4:21 PMgildor
03/06/2019, 4:21 PMursus
03/06/2019, 4:22 PMgildor
03/06/2019, 4:22 PMgildor
03/06/2019, 4:23 PMgildor
03/06/2019, 4:23 PMgildor
03/06/2019, 4:24 PMmap
or flatMap
to avoid this checkgildor
03/06/2019, 4:27 PMfun doBar(): Either<SomeResult, SomeError> {
return doFoo().flatMap { doQuax() }
}
fun doFoo(): Either<SomeResult, SomeError> = TODO()
fun doQuax(): Either<SomeResult, SomeError> = TODO()
gildor
03/06/2019, 4:29 PMzip
, just general approach):
fun doBar(): Either<SomeResult, SomeError> {
return doFoo().zip(doQuax()).flatMap { (foo, quax) ->
doSomethingWith(foo, quax)
}
}
fun doFoo(): Either<A, SomeError> = TODO()
fun doQuax(): Either<B, SomeError> = TODO()
fun doSomethingWith(a: A, b: B): Either<C, SomeError> = TODO()
UPD: for arrow you can use
tupled(doFoo(), doQuax()).flatMap { (foo, quax) -> ... }
gildor
03/06/2019, 4:32 PMgildor
03/06/2019, 4:32 PMursus
03/06/2019, 4:41 PMursus
03/06/2019, 4:42 PMgildor
03/06/2019, 4:46 PMfun MyResult.doOnSuccess(block: (Success) -> Unit)
And
fun MyResult.doAndSuccess(block: (Success) -> MyResult)
gildor
03/06/2019, 4:48 PMgildor
03/06/2019, 4:50 PMgildor
03/06/2019, 4:52 PMgildor
03/06/2019, 4:53 PMursus
03/06/2019, 5:03 PMursus
03/06/2019, 5:09 PMgildor
03/06/2019, 5:12 PMgildor
03/06/2019, 5:13 PMursus
03/06/2019, 5:15 PMgildor
03/06/2019, 5:15 PMgildor
03/06/2019, 5:17 PMursus
03/06/2019, 5:17 PMgildor
03/06/2019, 5:18 PMursus
03/06/2019, 5:19 PMgildor
03/06/2019, 5:20 PMursus
03/06/2019, 5:20 PMgildor
03/06/2019, 5:21 PMgildor
03/06/2019, 5:22 PMursus
03/06/2019, 5:22 PMgildor
03/06/2019, 5:22 PMgildor
03/06/2019, 5:23 PMursus
03/06/2019, 5:23 PMgildor
03/06/2019, 5:23 PMgildor
03/06/2019, 5:24 PMursus
03/06/2019, 5:25 PMgildor
03/06/2019, 5:25 PMursus
03/06/2019, 5:25 PMgildor
03/06/2019, 5:26 PMgildor
03/06/2019, 5:27 PMursus
03/06/2019, 5:27 PMgildor
03/06/2019, 5:28 PMursus
03/06/2019, 5:28 PMgildor
03/06/2019, 5:29 PMgildor
03/06/2019, 5:30 PMursus
03/06/2019, 5:31 PMgildor
03/06/2019, 5:36 PMgildor
03/06/2019, 5:38 PMursus
03/06/2019, 5:39 PMgildor
03/06/2019, 5:39 PMursus
03/06/2019, 5:39 PMgildor
03/06/2019, 5:40 PMursus
03/06/2019, 5:42 PMursus
03/06/2019, 5:43 PMMike
03/06/2019, 10:46 PM