دکمه¶
اولین برنامه، یک شمارنده است که میتواند افزایش یا کاهش یابد.
در ادامه، کد برنامه قرار دارد. روی دکمه "ویرایش" کلیک تا در ویرایشگر آنلاین با آن کار کنید. سعی کنید متن یکی از دکمهها را تغییر دهید. اکنون روی دکمه ویرایش کلیک کنید!
اکنون که کمی در کد جستجو کردهاید، ممکن است سوالاتی داشته باشید. مقدار main
چه کاری انجام میدهد؟ اجزای مختلف چگونه با هم کار میکنند؟ بیایید کد را مرور و درباره آن صحبت کنیم.
یادداشت
این برنامه از برچسبگذاری نوع داده، نام مستعار و نوع داده سفارشی استفاده میکند. در این بخش، هدف آشنایی با معماری Elm است، بنابراین کمی جلوتر به بررسی نوع داده و شیوه خواندن آن میپردازیم. اگر درگیر این جنبهها شدهاید، پیشنهاد میکنم فصلهای بعد را مطالعه کنید!
Main¶
مقدار main
در Elm مقداری ویژه است. این مقدار توصیف میکند که چه چیزی روی صفحه نمایش داده شود. در این مورد، قرار است برنامه را با مقدار init
راهاندازی کنیم، تابع view
همه چیز را روی صفحه نمایش میدهد و ورودی کاربر به تابع update
منتقل میشود. این فرآیند را به عنوان توصیف سطح بالا از برنامه در نظر بگیرید.
Model¶
مدلسازی داده در Elm بسیار مهم است. هدف مدلسازی این است که تمام جزییات مربوط به برنامه را به عنوان داده ثبت کند.
برای ساخت یک شمارنده، باید یک عدد را که بالا و پایین میرود، پیگیری کنیم. این بدان معناست که مدل ما این بار واقعا کوچک است:
فقط به یک مقدار Int
نیاز داریم تا شمارش فعلی را پیگیری کنیم. میتوانیم این را در مقدار اولیهمان ببینیم:
مقدار اولیه صفر است و با فشار دادن دکمههای مختلف افزایش یا کاهش مییابد.
View¶
یک مدل داریم، اما چگونه آن را روی صفحه نمایش دهیم؟ این نقش تابع view
است:
view : Model -> Html Msg
view model =
div []
[ button [ onClick Decrement ] [ text "-" ]
, div [] [ text (String.fromInt model) ]
, button [ onClick Increment ] [ text "+" ]
]
این تابع مدل را به عنوان یک آرگومان میگیرد که خروجی آن HTML است. بنابراین میخواهیم یک دکمه کاهش، شمارش فعلی و یک دکمه افزایش را نمایش دهیم.
توجه داشته باشید که برای هر دکمه یک فراخوان onClick
داریم که این طور خوانده میشود: زمانی که کسی کلیک کرد، یک پیام تولید کن. بنابراین دکمه افزایش یک پیام Increment
و دکمه کاهش یک پیام Decrement
تولید میکند. این پیام چیست و به کجا میرود؟ به تابع update
!
Update¶
تابع update
توصیف میکند که مدل ما چگونه در طول زمان تغییر خواهد کرد.
دو پیام را تعریف میکنیم که ممکن است دریافت کند:
در ادامه، تابع update
توصیف میکند هنگام دریافت یکی از این پیامها، چه کاری باید انجام دهیم:
update : Msg -> Model -> Model
update msg model =
case msg of
Increment ->
model + 1
Decrement ->
model - 1
اگر پیام Increment
دریافت شود، مدل را یک واحد افزایش میدهیم. اگر پیام Decrement
دریافت شود، مدل را یک واحد کاهش میدهیم.
با هر مرتبه دریافت پیام، آن را از طریق تابع update
اجرا میکنیم تا یک مدل جدید به دست آوریم. سپس تابع view
را فراخوانی میکنیم تا ببینیم چگونه مدل جدید را روی صفحه نمایش دهیم. در ادامه، این روند را تکرار میکنیم! ورودی کاربر یک پیام تولید میکند، مدل را بروزرسانی کرده و آن را روی صفحه نمایش میدهیم.
مرور کلی¶
اکنون که تمام اجزای یک برنامه Elm را دیدهاید، ممکن است کمی آسانتر باشد که ببینید چگونه آنها در کنار یکدیگر قرار میگیرند:
برنامه با رِندر کردن مقدار اولیه روی صفحه شروع میشود. در ادامه، وارد این حلقه میشوید:
- انتظار برای ورودی کاربر
- ارسال پیام به تابع
update
- تولید یک مدل جدید
- فراخوانی تابع
view
برای خروجی HTML - نمایش HTML جدید روی صفحه
- تکرار گامهای ۱ تا ۵!
این فرآیند، جوهره معماری Elm است. هر برنامهای که از این به بعد ببینیم، یک تغییر جزیی در این الگوی پایه خواهد بود.
تمرین
یک دکمه برای بازنشانی شمارنده به صفر اضافه کنید:
- یک حالت
Reset
بهMsg
اضافه کنید. - یک شاخه
Reset
در تابعupdate
اضافه کنید. - یک دکمه در تابع
view
اضافه کنید.
میتوانید برنامه را در ویرایشگر آنلاین امتحان کنید. اگر این کار خوب پیش رفت، سعی کنید یک دکمه دیگر برای افزایش به اندازه ۱۰ واحد اضافه کنید.