Tag: 延续传球

Kotlin monad:重构一个构造函数来处理CPS

我是函数式编程和Kotlin的绝对初学者,试图解决我从我自问的问题中创建的练习; 我目前的问题是“如何使用端口和适配器架构将function编程应用于真实世界的应用程序? 目前正在学习有关monad,我有下面的函数,其中Perhaps只是一个重命名的Either用于exception处理 。 这个函数接受一个包含任意HTTP参数的RequestModel , Perhaps返回一个CountBetweenQuery ,它只是一个包含两个LocalDate的数据类。 private fun requestCountBetweenQueryA(model: RequestModel): Perhaps { return try { Perhaps.ret(CountBetweenQuery(extractLocalDateOrThrow(model, “begin”), extractLocalDateOrThrow(model, “end”))) } catch (e: UnsupportedTemporalTypeException) { Perhaps.Fail(Err.DATE_FORMAT_IS_INVALID) } catch (e: DateTimeException) { Perhaps.Fail(Err.DATE_FORMAT_IS_INVALID) } } private fun extractLocalDateOrThrow(it: RequestModel, param: String): LocalDate = LocalDate.from(DateTimeFormatter.ISO_DATE.parse(it.parameters.first { it.key == param }.value)) 在一个OO语言中,我会重构这个,以便在常规exception处理程序中的exception处理方式或上面的更高版本(将重复的代码提取到单个方法中)进行exception处理。 当然,我想把我的extractLocalDateOrThrow变成一个perhapsExtractLocalDate作为我的练习的一部分: private fun perhapsExtractLocalDate(it: RequestModel, […]