---
# System prepended metadata

title: Untitled

---

elm について：

JavaScript にコンパイルできる関数型プログラミング言語である。
elmを通して、ウェブサイトやウェブアプリケーションを作ることに役に立つ。
(どの環境も依存しない。)
て
elm の特徴：

実用上ランタイムエラーがでない
親切なエラーメッセージ
信頼性の高いリファクタリング
すべてのElmパッケージは自動的にセマンティックバージョニングが強制されている

elmの構造：

  Model — the state of your application
  Update — a way to update your state based on messages
  View — a way to turn your state into HTML


インクリメントやデクリメントを行うカウンタを作成する。

```
-- Press buttons to increment and decrement and reset a counter.


import Browser
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)



-- MAIN


main =
  Browser.sandbox { init = init, update = update, view = view }



-- MODEL


type alias Model = Int


init : Model
init =
  0



-- UPDATE


type Msg
  = Increment
  | Decrement
  | Reset


update : Msg -> Model -> Model
--分岐三つ
update msg model =
  case msg of
    Increment ->
      model + 1
    Decrement ->
      model - 1
    Reset ->
      model - model



-- VIEW


view : Model -> Html Msg
view model =
  div []
    [ button [ onClick Decrement ] [ text "-" ]
    , div [] [ text (String.fromInt model) ]
--  , button [ onClick Reset ] [ text "reset" ]
    , button [ onClick Increment ] [ text "+" ]
    , button [ onClick Reset ] [ text "reset" ]
    ]
```

以上です。(11/17)

---


テキスト入力の内容を逆に表示するプログラム：

```
import Browser
import Html exposing (Html, Attribute, div, input, text)
import Html.Attributes exposing (..)
import Html.Events exposing (onInput)


-- MAIN


main =
  Browser.sandbox { init = init, update = update, view = view }


-- MODEL


type alias Model =
  { content : String
  }


init : Model
init =
  { content = "" }


-- UPDATE


type Msg
  = Change String


update : Msg -> Model -> Model
update msg model =
  case msg of
    Change newContent ->
      { model | content = newContent }


-- VIEW


view : Model -> Html Msg
view model =
  div []
    [ input [ placeholder "Text to reverse", value model.content, onInput Change ] []
    //String.fromInt関数で数字から文字列に変化する
    ,div[] [text(String.fromInt(String.length model.content))]
    //String.reverse関数で文字列を逆に変化する
    ,div [] [text (String.reverse model.content) ]
    ]
```

以上です。(11/24)

---


名前、パスワード、パスワード(確認用)のフィールドを持ったフォームを作成する。更に、パスワードの長さが8以上可動化を確認する。

```。
import Browser
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onInput)


-- MAIN


main =
  Browser.sandbox { init = init, update = update, view = view }


-- MODEL


type alias Model =
  { name : String
  , password : String
  , passwordAgain : String
  }


init : Model
init =
  Model "" "" ""


-- UPDATE


type Msg
  = Name String
  | Password String
  | PasswordAgain String

//msgを受け取って、更新する
update : Msg -> Model -> Model
update msg model =
//msg3種類
  case msg of
    Name name ->
      { model | name = name }

    Password password ->
      { model | password = password }

    PasswordAgain password ->
      { model | passwordAgain = password }


-- VIEW


view : Model -> Html Msg`
view model =
  div []
    [ viewInput "text" "Name" model.name Name
    , viewInput "password" "Password" model.password Password
    , viewInput "password" "Re-enter Password" model.passwordAgain PasswordAgain
    , viewValidation model
    ]


//viewInput補助関数(HTML)
viewInput : String -> String -> String -> (String -> msg) -> Html msg
//画面にこのように表示される
viewInput t p v toMsg =
  input [ type_ t, placeholder p, value v, onInput toMsg ] []


//viewValidation補助関数(HTML)
viewValidation : Model -> Html msg
viewValidation model =
  if model.password == model.passwordAgain then
     if String.length model.password >= 8 then 
     div [ style "color" "green" ] [ text "OK" ]
     else 
     div [ style "color" "red" ] [ text "短い過ぎる" ]
  else 
  div [ style "color" "red" ] [ text "不一致" ]
```

以上です。(12/15)

---



```
import Browser
import Html exposing (..)
import Html.Events exposing (..)
import Html.Attributes exposing (..)


-- MAIN


main =
  Browser.sandbox
    { init = init, update = update, view = view }
    
    
-- MODEL


type alias Model = 
    { x: Int 
    , y: Int 
    }

init : Model
init = { x = 0 , y = 0 }


-- UPDATE


type Msg = Move Int Int

update : Msg -> Model -> Model
update msg model =
  case msg of
    Move x y -> { x = x, y = y }
    
    
-- VIEW


view : Model -> Html Msg
view model =  
    div []
    [
      div 
        [   style "background" "pink" 
          , style "height"  "1000px"
          , style "width"  "1000px"
        ]
        [
        div 
        [ 
          style "background" "yellow" 
        , style "height"  "200px"
        , style "width"   "200px"
        ]
        [
        div [][text ("( x = " ++ String.fromInt model.x ++ ", y = " ++ String.fromInt model.y ++ ")")    
        ]
        ]
        ]
        ]
```

以上です。(12/22)