Ticker

6/recent/ticker-posts

Ngôn ngữ lập trình Elm - Giới thiệu tổng quan

 ELM là một ngôn ngữ lập trình chức năng. Nó được thiết kế bởi Evan Czaplicki vào năm 2012.


Elm được sử dụng đặc biệt để thiết kế giao diện người dùng của các ứng dụng web.

Elm biên dịch sang JavaScript và chạy trong trình duyệt. Nó nhanh, có thể kiểm tra, có thể bảo trì và không có ngoại lệ Runtime.

Một số ứng dụng thực tế của nền tảng lập trình Elm bao gồm:

  • Trò chơi
  • Đồ họa
  • Ứng dụng trang đơn

Tại sao nên sử dụng Elm ?

Elm loại bỏ hầu hết các vấn đề phổ biến mà các nhà phát triển giao diện người dùng phải đối mặt. Điều này bao gồm -

1. Không có ngoại lệ thời gian chạy

Elm là một ngôn ngữ được gõ tĩnh. Tất cả các lỗi có thể xảy ra đều được xác nhận và sửa chữa tại thời điểm biên dịch. Điều này làm cho nó có thể không có ngoại lệ thời gian chạy.

2. Thông báo lỗi thân thiện với nhà phát triển

Không giống như các ngôn ngữ lập trình khác, trình biên dịch của Elm được thiết kế để cung cấp các thông báo lỗi rất cụ thể và thân thiện với nhà phát triển tại thời điểm biên dịch. Các thông báo lỗi cũng bao gồm các gợi ý như các liên kết đến các tài liệu thiết kế được đề xuất.

3. Dễ dàng kiểm tra

Mỗi chức năng Elm có thể được kiểm tra riêng biệt với tất cả các chức năng khác. Điều này làm cho các chương trình được viết bằng Elm có thể dễ dàng kiểm tra.

4. Phiên bản ngữ nghĩa tự động

Elm thực thi lập phiên bản ngữ nghĩa tự động của các gói. Điều này đảm bảo rằng một thay đổi bản vá không làm hỏng ứng dụng đã chạy.

5. Mã có thể sử dụng lại

Các hàm Elm vốn dĩ dễ sử dụng lại so với các hàm trong JavaScript, Python hoặc TypeScript.

1 đoạn code mẫu Elm:

import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import WebSocket

main =
   Html.program
      { init = init
      , view = view
      , update = update
      , subscriptions = subscriptions
      }

echoServer : String
echoServer =
   "wss://echo.websocket.org"

-- MODEL

type alias Model =
   { input : String
   , messages : List String
   }

init : (Model, Cmd Msg)
init =
   (Model "" [], Cmd.none)

-- UPDATE
type Msg
   = Input String
   | Send
   | NewMessage String

update : Msg -> Model -> (Model, Cmd Msg)
update msg {input, messages} =
   case msg of
      Input newInput ->
      (Model newInput messages, Cmd.none)

   Send ->
      (Model "" messages, WebSocket.send echoServer input)

   NewMessage str ->
      (Model input (str :: messages), Cmd.none)

-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions model =
   WebSocket.listen echoServer NewMessage

-- VIEW
view : Model -> Html Msg
view model =
   div []
      [ input [onInput Input, value model.input] []
      , button [onClick Send] [text "Send"]
      , div [] (List.map viewMessage (List.reverse model.messages))
      ]

viewMessage : String -> Html msg
viewMessage msg =
div [] [ text msg ]

Đăng nhận xét

0 Nhận xét