موضوع مقاله: الم (زبان برنامه‌نویسی) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # الم (زبان برنامه‌نویسی) | مقدمه: الم (Elm) نوعی زبان برنامه نویسی خاص دامنه می‌باشد و برای ایجاد واسط‌های نگاره ای کاربر که بر پایه مرورگر وب هستند، استفاده می‌شود. | ## بخش 1: الم (زبان برنامه‌نویسی) | این قابلیت با استفاده از کنترل نوع استاتیکی که کامپایلر این زبان دارد میسر شده‌است. اولین نسخه الم با بسیاری مثال و یک ویرایشگر آنلاین ارائه شد و نشان داد که در مرورگر وب نیز استفاده از آن راحت است. اوان در سال ۲۰۱۳ به گروه برنامه نویسی پرزی(Prezi) ملحق شد تا روی الم کار کنند و در سال ۲۰۱۶ به عنوان مهندس اوپن سورس به نو رد اینک (No Red Ink) رفت و همچنین شرکت نرم‌افزاری الم را برپا کرد. الم همچنین دارای فضایی برای کتاب‌خانه‌های ساخت عموم است و ویرایشگری به نام الی دارد. الی یک ویرایشگر آنلاین پیشرفته است که اجازه ذخیره کار و استفاده از کتاب‌خانه‌های عمومی را می‌دهد. ویژگی‌ها الم یک سری ساختارهای زبانی کوچک مثل عبارات مرسوم if، عبارات let برای حالت محلی و عبارات case برای تطبیق الگو دارد. به عنوان یک زبان برنامه نویسی، الم توابع بی‌نام، توابعی به عنوان آرگمان‌ها و توابعی که می‌توانند توابع دیگر را برگردانند را نیز پشتیبانی می‌کند که در مورد آخر اغلب این کار با استفاده جزئی از توابع کری شده امکان‌پذیر است. برنامه‌های بر پایه الم HTML را از طریق یک DOM مجازی، رندر یا ارائه می‌کنند و ممکن است با استفاده از «جاواسکریپت به عنوان یک سرویس» با کد دیگر تعامل کنند. تغییرناپذیری تمامی مقادیر در الم تغییرناپذیر هستند یعنی پس از ایجاد یک مقدار نمی‌توان آن را اصلاح کرد. الم از داده ساختار ماندگار برای پیاده‌سازی آرایه‌ها، ست‌ها و لغتنامه‌ها در کتابخانه معمولی استفاده می‌کند. | ## بخش 2: الم (زبان برنامه‌نویسی) | حاشیه نویسی‌های نوعی اختیاری هستند (به دلیل استنتاج نوعی) ولی به شدت کمک کننده هستند. حاشیه نویسی‌ها روی خط بالای تعریف، قرار دارند (برعکس زبان‌های خانواده C که نام‌ها و نوع‌ها از هم جدا هستند). نوع‌ها شامل اصولی چون رشته‌ها و اعداد صحیح و ساختارهای پایه داده شامل لیست‌ها، رکوردها و مجموعه‌های چندتایی هستند. توابع نوع‌هایی دارند که با جهت نوشته شده‌اند مثل round : Float -> Int نوع‌های کاستوم به برنامه نویس اجازه می‌دهند تا نوع‌هایی سفارشی را برای نشان دادن داده به شکل مچ شده یا ارتباط گرفته با دامنه ایجاد کند. کدی که یک مقدار دلخواه را با استفاده از این نوع تولید یا کنترل می‌کند و به تمامی کدهای دیگر مقداری از نوع گفته شده را تضمین می‌دهد. مدول سیستم (برنامه‌نویسی ماژولی) الم مدول سیستمی دارد که به کاربران اجازه می‌دهد تا کد خود را به بخش‌های کوچک‌تری تبدیل کنند که به آن‌ها مدول می‌گویند. مدول‌ها می‌توانند جزئیات پیاده‌سازی را مثل توابع کمکی و کد مرتبط به گروه را باهم مخفی کنند. با توجه به semver تمامی کتابخانه‌ها نسخه دار یا اصطلاحاً ورژن دار هستند که این کار با استفاده از کامپایلر یا دیگر ابزارها اعمال می‌شود. این بدین معناست که تغییر دادن نوع یک تابع یا حذف کردن آن تنها در یک نسخه اصلی امکان‌پذیر می‌باشد. این کار از روش DOM(مدل شیء گرای سند) مجازی استفاده می‌کند تا به روز رسانی‌ها را مفید واقع کند. | ## بخش 3: الم (زبان برنامه‌نویسی) | تیم اجرایی اصلی هدف کلی خود را این نمی‌دانست بلکه تمرکز خود را روی توسعه نهایی این برنامه گذاشته بود. از این رو چندین پروژه تکی وجود دارد، بدین منظور که امکان استفاده از الم به عنوان پشتیبان یا back-end را افزایش دهد. پروژه‌ها عموماً روی نسخه ۰٫۱۸٫۰ الم قرار دارند چرا که نسخه‌های جدید آن از کد native و چندین ویژگی دیگر پشتیبانی نمی‌کنند. یکی از پروژه‌ها الم را مستقیماً روی محیط اعمال می‌کند در حالی که دیگری آن را به Elixir کامپایل می‌کند. پروژه ای دیگر نیز فکر ایجاد یک چارچوب یا فریم ورک پشتیبانی برای الم را داشت که توسط زیرساخت Node.js تغذیه می‌شد. اپلیکیشن‌های بر پایه الم معمولاً به این شکل ساخته می‌شوند اما برای پروژه‌های دیگر این کانسپت می‌تواند کارساز باشد. یک برنامه برپایه الم همیشه به سه بخش تقسیم می‌شود: مدل: وضعیت اپلیکیشن ویو: تابعی که مدل را به HTML تبدیل می‌کند. به‌طور مثال اپلیکیشنی را تصور کنید که یک عدد و گزینه ای را نشان می‌دهد که با فشردن آن عدد افزایش پیدا می‌کند. در اپلیکیشن‌های پیچیده‌تر پیام‌ها می‌توانند از چندین منبع وارد شوند: تعامل کاربر، قالب بندی مدل، تماس‌های داخلی از update، اشتراکاتی با رخدادهای اضافی (تغییر مجدد ابعاد پنجره، ساعت سیستم، تعامل با Javascript و …) و تغییرات URL و درخواست‌ها. | ## جمع‌بندی | این موضوع توسط نویسنده Elm in Action در مثالی که در اپلیکیشن تک صفحه ای آن‌ها وجود دارد، مطرح شده‌است که تقریباً تمامی قطعات مشابه در آپدیت، ویو، اشتراکات، تجزیه مسیر و توابع ساختاری تکرار می‌شوند.