榆树 舒适尴尬

谈论榆树


Elm是用于前端开发的功能性编程语言。 语法与Haskell相似,但经过明显简化和专门化。 Elm源代码可编译为本机JavaScript。 编译的JavaScript包含控制DOM子树的应用程序代码。


榆树 舒适而笨拙。 组成
榆树 舒适而笨拙。 Json.Encoder和Json.Decoder
榆树 舒适而笨拙。 Http,任务


Elm语言体系结构中的主要元素是应用程序。 通常,每个应用程序包含:


  1. 状态或模型。 描述应用程序当前状态的数据;
  2. 许多有效的消息。 事件发生时(例如单击一个按钮)发送消息,并传递给更新功能。
  3. 基于状态的视图函数,生成新的DOM树;
  4. 更新函数,它接收模型和消息,并返回新模型和所需的效果;
  5. 订阅功能,订阅事件通知。 语言的核心是对计时器,WebSocket等的订阅。

打字


一切都必须输入。 结果,进行静态代码一致性检查。 如果编译,它应该工作。 但这会按您预期的那样工作-不做任何保证。 这大大简化了重构。


型号


该模型是自定义类型。 自定义类型的构建依据:


  1. 类型别名用于描述结构;
  2. 联合类型来描述有效的类型关联;
  3. 基本类型Int,String等。

联合类型允许您声明标记的类型。 例如,对用户类型进行描述:


type User = Anonymous | User String 

如果用户被授权,则声明的类型包含有关用户类型及其数据的信息。 否则,用户是匿名的。


边界


Elm运行时与外部环境通过解码器之间的边界。 解码器(Json.Decode)是接受JSON并返回Elm类型的函数。 在执行Json.Decode.decodeStringJson.Decode.decodeValue期间 ,将检查输入数据的结构和类型。


解码器返回包含数据(如果成功)或错误的Result类型。


检视


视图是状态的函数,它返回用于生成DOM树的信息。 一个例子:


 view : Model -> Html.Html Msg view model = case model.user of Anonymous -> Html.div [] [ Html.text “Anonymous” ] User name -> Html.div [] [ Html.text (“Welcome ” ++ name) ] 

函数用于生成DOM节点。 在作战项目中,视图是更一般命令的功能组成。 例如:


 view : Model -> Html.Html Msg view model = case model.user of Anonymous -> anonymousView User name -> userView name 

AnonymousView和userView是生成界面的一小部分的用户函数。


变异(更新)


所有事件(用户操作,网​​络等)都会生成消息,这些消息将传递到初始化期间注册的功能。 默认情况下,此函数名为update。 该函数接受一个事件和一个模型,然后返回一个新的模型和命令。 命令在Elm运行时中执行,还可以生成事件。


例如,在按下按钮时增加变量:


 update : Model -> Msg -> (Model, Cmd Msg) update model msg = case msg of OnClick -> ({model | clicked = model.clicked + 1}, Cmd.none) 

订阅


订阅事件发生在应用程序启动时,每次更改模型时都会重新调用。


如果发生事件,它们将交付给更新功能。


例如,订阅定时器的时间为10秒。 当达到10秒时,将生成一个滴答消息,并将其传递给更新功能:


 subscribe : Model -> Sub Msg subscribe model = Time.every 10 Tick 

资料来源


Source: https://habr.com/ru/post/zh-CN424215/


All Articles