یک مقدار ثابت با 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 برای تعیین مرزهای کد از نشانههای نگارشی مانند آکولاد، پرانتز یا نقطهویرگول استفاده نمیکند. در عوض از فاصلهها و تورفتگیها بهره میبرد.
import و تابعهای سطح بالا باید از چپترین ستون شروع شوند.-- A function split over multiple lines, so subsequent lines must be indented
add number1 number2 =
number1 + number2
https://elmprogramming.com/indentation.html
هر فایل در Elm یک ماژول است و باید پیش از هر کد دیگری یک دستور 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 که بهعنوان کد تفسیر نمیشود.
کامنت عمدتاً برای این است که خودتان و دیگر برنامهنویسان آن را بخوانید.
برای کامنتهای تکخطی یک نحوهی نگارش سبک بر پایهی دو خط تیره وجود دارد.
کامنتهای چندخطی هم با جفت {- و -} بهعنوان جداکنندههای آغاز و پایان امکانپذیر است.
-- a single line comment
-- another single line comment
{- a multiline comment
spawning multiple lines
-}
یک راهنمای سبک وجود دارد و میتوان از elm-format برای قالببندی خودکار کد استفاده کرد.
در این تمرین میخواهید کدی بنویسید که به شما کمک کند یک لازانیای عالی از کتاب آشپزی محبوبتان بپزید.
شما سه کار دارید که همه به زمان صرفشده برای پخت لازانیا مربوط میشوند.
expectedMinutesInOven را طوری تعریف کنید که محاسبه کند لازانیا باید چند دقیقه در فر باشد. طبق کتاب آشپزی، زمان مورد انتظار در فر بر حسب دقیقه ۴۰ است:
expectedMinutesInOven
--> 40
preparationTimeInMinutes را تعریف کنید که تعداد لایههای لازانیا را به عنوان پارامتر میگیرد و برمیگرداند که آماده کردن لازانیا چند دقیقه طول میکشد، با این فرض که آماده کردن هر لایه ۲ دقیقه طول میکشد.
preparationTimeInMinutes 3
--> 6
تابع elapsedTimeInMinutes را تعریف کنید که دو پارامتر میگیرد: پارامتر اول تعداد لایههای لازانیا است و پارامتر دوم تعداد دقیقههایی است که لازانیا در فر بوده است. این تابع باید برگرداند که چند دقیقه روی پخت لازانیا کار کردهاید؛ این مقدار برابر است با مجموع زمان آمادهسازی بر حسب دقیقه و زمانی بر حسب دقیقه که لازانیا تا این لحظه در فر سپری کرده است.
elapsedTimeInMinutes 3 20
--> 26