Jamie Taylor
05/28/2020, 3:10 PMChantry Cargill
05/28/2020, 3:10 PMStefan Beyer
05/28/2020, 3:11 PMChantry Cargill
05/28/2020, 3:11 PMJamie Taylor
05/28/2020, 3:12 PMSam Garfinkel
05/28/2020, 3:13 PMsealed class Result
data class Result1(): Result
data class Result2(): Result
etc.Chantry Cargill
05/28/2020, 3:14 PMSam Garfinkel
05/28/2020, 3:14 PMStefan Beyer
05/28/2020, 3:14 PMSam Garfinkel
05/28/2020, 3:15 PMval value: Any
sealed class Result
data class ExceptionalResult(val exception: Throwable): Result
data class Success(val result: Any?): Result
Chantry Cargill
05/28/2020, 3:19 PMJamie Taylor
05/28/2020, 3:20 PMChantry Cargill
05/28/2020, 3:22 PMStefan Beyer
05/28/2020, 3:22 PMAny
😄
sealed class Result<T> {
data class Success<T>(val value: T) : Result<T>()
class ExpectedError<T>(val somethingThatHelpsToRecover: SomeType) : Result<T>()
class UnexpectedError<T>(val errorMessage: String) : Result<T>()
// ...
}
I also had some instances where I had several kinds of outcome, as well as several kinds of errors. at this stage, this whole thing becomes very funny ^^If you were starting a new project and needed a result type, is there any particular one you'd be more likely to go for?my personal opinion is: • try to avoid writing generalized (generic) result types. (because they get ugly really quickly) • if you are not comfortable writing a sealed class for every case, then use a library like arrow. (10 sealed classes may be ok, 1000 is just ridiculous)