學習軌道
/
Elm
Elm
/
練習
/
Paula 的回文
Paula 的回文

Paula 的回文

學習練習

簡介

網頁應用程式

Elm 是一門用來打造可靠網頁應用程式的語言,用起來很愉快。它有友善的錯誤訊息、優異的效能、小巧的資源檔案,而且沒有執行時期的例外。

Elm 最有名、也最廣為仿效的部分,大概就是 Elm 架構了。它是一個用來組織網頁應用程式的簡單模式,所有 Elm 網頁應用程式都是照著它寫出來的。

核心概念是:你的程式碼圍繞著應用程式狀態的Model、update你的 model 的方式,以及view你的 model 的方式來打造。

Model包含應用程式的狀態,也就是應用程式需要的所有資料。 想像一個簡單的應用程式,裡面有一個文字輸入框,還有一段顯示該文字反轉結果的文字,那麼 model 會長得像下面這樣。 你也可以在 Elm 指南 上看到這個範例喔。

type alias Model =
  { text : String
  }

update是一個函式,當有變化時(例如使用者點擊按鈕),它會被呼叫並收到一個Msg。 它接收Msg和目前的Model,並回傳一個新的Model。

type Msg
  = TextChanged String

update : Msg -> Model -> Model
update msg model =
  case msg of
    TextChanged newText ->
      { model | text = newText }

view是一個函式,會回傳要在瀏覽器中顯示給使用者的 HTML。 它接收目前的Model,並回傳Html Msg(Elm 用來表示 HTML 的型別)。

view : Model -> Html Msg
view model =
  Html.div []
    [ Html.input
      [ Html.Attributes.placeholder "Text to reverse"
      , Html.Attributes.value model.text
      , Html.Events.onInput TextChanged
      ]
      []
    , Html.div [] [ Html.text (String.reverse model.text) ]
    ]

說明

你的朋友 Paula 想更擅長解填字遊戲的提示。她讀到有些提示會顯示答案是迴文。 迴文是指一個單字或句子,從後往前讀和從前往後讀都一樣。

她請你幫她寫一個非常簡單的網站,用來檢查某個字串是不是迴文,這樣她就能確認自己猜的答案對不對。

你決定用 Elm 的 [sandbox][browser-sandox] 應用程式來做這件事。

這個應用程式會有一個文字方塊,Paula 可以把她猜的答案輸入進去,另外還會有一段文字,說明方塊裡的內容是不是迴文。 每當文字方塊裡的文字改變時,這段文字就會跟著更新。

1. 為應用程式定義Model和Msg型別,並撰寫init函式

應用程式的Model需要一個要檢查的字串,這個欄位應該命名為content。

應用程式需要一個Msg來表示文字方塊裡的文字已經改變。 對應的變體應該命名為Change。

init函式應該回傳一個初始的Model值,其中content欄位是空的。

2. 撰寫 update 函式

update函式應該接收Msg和Model兩個參數,並回傳一個新的Model。 Msg會帶有使用者輸入的文字,而新的Model應該包含那段文字。

3. 撰寫 view 函式

Elm 要求 view 函式必須回傳Html msg型別,也就是說,你必須從 view 函式回傳單一元素(而不是元素組成的陣列)。

在這個根元素裡,應該要有一個input元素(也就是文字方塊),以及一個帶有text內容的div,用來顯示input裡的文字是不是迴文。

這段文字應該是 "This is a palindrome" 或 "Not a palindrome"。

4. 撰寫 main 函式

main函式應該呼叫Browser.sandbox,並傳入一個帶有init、update和view函式的 record 參數。 為了讓這個練習能在 Exercism 線上編輯器上運作,我們的程式碼裡搭配使用了假的Browser.sandbox。 這對你為了解這道練習所寫的程式碼沒有任何影響。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Elm Exercism

準備好開始 Paula 的回文 了嗎?

註冊 Exercism,透過 28 個概念110 個練習 和真人引導來學習並精通 Elm,全部免費。