定数の値はname = expressionのように定義します。Elmでは、定義を除くすべてが式です。
five = 5
six = 3 + 3
関数はname parameters... = expressionのように定義し、仮引数はスペースだけで区切ります。
add number1 number2 = number1 + number2
関数の呼び出しも式であり、関数名を指定して、その関数の仮引数それぞれに対応する引数をスペースで区切って渡すことで行います。書き方は関数の定義と同じです。
five = add 2 3
括弧(())を使うと、式を評価する順序を指定できます。
six = add 2 (1 * 4)
twelve = add 2 1 * 4
Elmでは、コードの区切りを指定するために波括弧、括弧、セミコロンといった構文上の目印を使いません。代わりに空白とインデントを使います。
-- A function split over multiple lines, so subsequent lines must be indented
add number1 number2 =
number1 + number2
https://elmprogramming.com/indentation.html
Elmでは、各ファイルが1つのモジュールであり、他のどのコードよりも前にmodule文を書く必要があります。
モジュール名はファイル名と一致していなければならないので、モジュールCalculatorはファイルCalculator.elmに置く必要があります。
モジュール内で定義されたものは、そのモジュールにプライベートなスコープを持ち、exposingに挙げられていない限り、このモジュールの外からはアクセスできません。
-- Define the Calculator module, and expose the `add` function
module Calculator exposing (add)
six = 3 + 3
add number1 number2 = number1 + number2
-- Define the Calculator module, and expose everything within: `six` and `add`
module Calculator exposing (..)
six = 3 + 3
add number1 number2 = number1 + number2
https://elm-lang.org/docs/syntax#modules
コメントとは、Elmファイルの中にあるテキストのうち、コードとして解釈されないものです。
主に、自分自身や他のプログラマーが読むためのものです。
1行コメントには、二重のダッシュを基にした軽量な構文があります。
複数行コメントも、開きと閉じの区切り文字のペア{-と-}を使えば可能です。
-- a single line comment
-- another single line comment
{- a multiline comment
spawning multiple lines
-}
スタイルガイドがあり、elm-formatを使うとコードを自動でフォーマットできます。
この演習では、お気に入りの料理本に載っている最高のラザニアを作るために、コードを書いていきます。
ラザニアの調理にかかる時間に関わる、3つのタスクがあります。
expectedMinutesInOvenを定義して、ラザニアをオーブンに入れておくべき時間を分で計算できるようにします。料理本によると、オーブンでの想定時間は40分です。
expectedMinutesInOven
--> 40
preparationTimeInMinutesを定義します。これは、ラザニアの層の数を入力として受け取り、ラザニアの下準備にかかる時間を分で返します。1層あたり2分かかるものとします。
preparationTimeInMinutes 3
--> 6
elapsedTimeInMinutes関数を定義します。この関数は2つの入力を受け取ります。1つ目の入力はラザニアの層の数で、2つ目の入力はラザニアをオーブンに入れてからの時間を分で表したものです。この関数は、ラザニアの調理に何分取り組んだかを返します。これは、下準備にかかった時間と、その時点でラザニアがオーブンにあった時間の合計です。
elapsedTimeInMinutes 3 20
--> 26