榆木:避免每次都进行可能的检查

时间:2018-08-23 09:05:19

标签: elm

我正在构建一个工作日志应用程序,该应用程序首先显示我可以选择的项目列表,然后在选择一个项目时,您会得到其他按钮的集合,以记录与该选定项目相关的数据。

我决定在模型中添加一个selected_project : Maybe Int(项目使用整数ID进行键控),例如,如果选择了项目2,则将填充Just 2

选择项目时出现的按钮会发送诸如AddMinutes 10之类的消息(即,将10分钟的工作记录到所选项目中)。

很显然,仅当选择了一个项目时,更新功能才会接收这些类型的消息之一,但是我仍然必须继续检查selected_projectJust p

有什么办法可以避免这种情况?

我的一个主意是让按钮发送一条包含项目ID的消息,例如AddMinutes 2 10(即,将10分钟的工作记录到项目2中)。在某种程度上,这可行,但是我得到了一个重复-Just 2中的model.selected_project和按钮发出的AddMinutes 2 ...消息。

更新

正如Simon所言,反复检查model.selected_projectJust p有其好处:该模型与UI的分离度相对较高。例如,可能会有其他UI方式来更新项目,而您可能不需要先选择一个项目。

1 个答案:

答案 0 :(得分:0)

为避免每次需要使用将Maybe“包装”的值都可用的上下文的函数时,都不必检查Maybe。该函数为Maybe.map

对于您来说,要处理AddMinutes Int消息,您可以简单地调用:Maybe.map (functionWhichAddsMinutes minutes) model.selected_project

很明显,由于您必须生成模型,因此还有很多其他功能,但是要点是,如果Maybe.map中的值可用,则可以使用Maybe来执行操作。要处理Maybe.Nothing情况,可以使用Maybe.withDefault

最后,这比使用case表达式更好吗?也许,也许不是(双关语意)。

我个人使用了随消息一起提供ID的技术,我对结果感到满意。