Update "Creating Results" section in README
This commit is contained in:
parent
31808eb99c
commit
ed430c4eca
28
README.md
28
README.md
@ -36,17 +36,6 @@ using the `Result` type in other languages:
|
|||||||
|
|
||||||
### Creating Results
|
### Creating Results
|
||||||
|
|
||||||
To begin incorporating the `Result` type into an existing codebase, you can
|
|
||||||
wrap functions that may fail (i.e. throw an `Exception`) with
|
|
||||||
[`Result.of`][result-of]. This will execute the block of code and `catch` any
|
|
||||||
`Exception`, returning a `Result<T, Exception>`.
|
|
||||||
|
|
||||||
```kotlin
|
|
||||||
val result: Result<Customer, Exception> = Result.of {
|
|
||||||
customerDb.findById(id = 50) // could throw SQLException or similar
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The idiomatic approach to modelling operations that may fail in Railway
|
The idiomatic approach to modelling operations that may fail in Railway
|
||||||
Oriented Programming is to avoid throwing an exception and instead make the
|
Oriented Programming is to avoid throwing an exception and instead make the
|
||||||
return type of your function a `Result`.
|
return type of your function a `Result`.
|
||||||
@ -61,6 +50,17 @@ fun checkPrivileges(user: User, command: Command): Result<Command, CommandError>
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To incorporate the `Result` type into an existing codebase that throws
|
||||||
|
exceptions, you can wrap functions that may `throw` with
|
||||||
|
[`runCatching`][result-runCatching]. This will execute the block of code and
|
||||||
|
`catch` any `Throwable`, returning a `Result<T, Throwable>`.
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
val result: Result<Customer, Throwable> = runCatching {
|
||||||
|
customerDb.findById(id = 50) // could throw SQLException or similar
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
Nullable types, such as the `find` method in the example below, can be
|
Nullable types, such as the `find` method in the example below, can be
|
||||||
converted to a `Result` using the `toResultOr` extension function.
|
converted to a `Result` using the `toResultOr` extension function.
|
||||||
|
|
||||||
@ -201,9 +201,9 @@ This project is available under the terms of the ISC license. See the
|
|||||||
[`LICENSE`](LICENSE) file for the copyright information and licensing terms.
|
[`LICENSE`](LICENSE) file for the copyright information and licensing terms.
|
||||||
|
|
||||||
[result]: https://github.com/michaelbull/kotlin-result/blob/master/src/main/kotlin/com/github/michaelbull/result/Result.kt#L10
|
[result]: https://github.com/michaelbull/kotlin-result/blob/master/src/main/kotlin/com/github/michaelbull/result/Result.kt#L10
|
||||||
[result-ok]: https://github.com/michaelbull/kotlin-result/blob/master/src/main/kotlin/com/github/michaelbull/result/Result.kt#L30
|
[result-ok]: https://github.com/michaelbull/kotlin-result/blob/master/src/main/kotlin/com/github/michaelbull/result/Result.kt#L31
|
||||||
[result-err]: https://github.com/michaelbull/kotlin-result/blob/master/src/main/kotlin/com/github/michaelbull/result/Result.kt#L35
|
[result-err]: https://github.com/michaelbull/kotlin-result/blob/master/src/main/kotlin/com/github/michaelbull/result/Result.kt#L36
|
||||||
[result-of]: https://github.com/michaelbull/kotlin-result/blob/master/src/main/kotlin/com/github/michaelbull/result/Result.kt#L17
|
[result-runCatching]: https://github.com/michaelbull/kotlin-result/blob/master/src/main/kotlin/com/github/michaelbull/result/Factory.kt#L11
|
||||||
[swalschin-rop]: https://fsharpforfunandprofit.com/rop/
|
[swalschin-rop]: https://fsharpforfunandprofit.com/rop/
|
||||||
[wiki]: https://github.com/michaelbull/kotlin-result/wiki
|
[wiki]: https://github.com/michaelbull/kotlin-result/wiki
|
||||||
[unit-tests]: https://github.com/michaelbull/kotlin-result/tree/master/src/test/kotlin/com/github/michaelbull/result
|
[unit-tests]: https://github.com/michaelbull/kotlin-result/tree/master/src/test/kotlin/com/github/michaelbull/result
|
||||||
|
Loading…
Reference in New Issue
Block a user