الدردار. مريح ومحرج

تحدث عن علم .


Elm هي لغة برمجة وظيفية لتطوير الواجهة الأمامية. الصيغة مشابهة لـ Haskell ، ولكنها مبسطة ومتخصصة بشكل كبير. يتم تجميع شفرة مصدر Elm في لغة JavaScript أصلية. تحتوي JavaScript المترجمة على رمز تطبيق يتحكم في الشجرة الفرعية لـ DOM.


الدردار. مريح ومحرج. تكوين
الدردار. مريح ومحرج. Json.Encoder و Json.Decoder
الدردار. مريح ومحرج. Http ، المهمة


العنصر الرئيسي في هندسة لغة علم هو التطبيق. بشكل عام ، يحتوي كل تطبيق على:


  1. الدولة أو النموذج. بيانات تصف الحالة الحالية للتطبيق ؛
  2. العديد من الرسائل الصالحة. يتم إرسال الرسائل عند وقوع الأحداث (دعنا نقول النقر على زر) وتسليمها إلى وظيفة التحديث ؛
  3. وظيفة عرض تقوم ، بناءً على الحالة ، بإنشاء شجرة DOM جديدة ؛
  4. وظيفة التحديث ، التي تأخذ نموذجًا ورسالة ، وترجع نموذجًا جديدًا والتأثيرات المطلوبة ؛
  5. وظيفة الاشتراك ، الاشتراك في إخطارات الحدث. في جوهر اللغة ، هناك اشتراكات في المؤقت و WebSocket والمزيد.

الكتابة


يجب كتابة كل شيء. ونتيجة لذلك ، فحص تناسق التعليمات البرمجية الثابتة. إذا جمعت ، يجب أن تعمل. لكنها ستعمل كما تتوقع أو لا - لا توجد ضمانات. هذا يبسط إعادة الهيكلة إلى حد كبير.


نموذج


النموذج هو نوع مخصص. يتم إنشاء أنواع مخصصة من:


  1. اكتب الأسماء المستعارة لوصف الهياكل ؛
  2. أنواع الاتحاد لوصف جمعيات النوع الصالحة ؛
  3. الأنواع الأساسية Int و String وغيرها.

تسمح لك أنواع الاتحاد بالإعلان عن الأنواع المميزة. على سبيل المثال ، خذ وصفًا لنوع المستخدم:


type User = Anonymous | User String 

يحتوي النوع المعلن على معلومات حول نوع المستخدم وبياناته ، إذا كان مصرحًا له. خلاف ذلك ، المستخدم مجهول.


الحدود


الحد الفاصل بين وقت تشغيل Elm والبيئة الخارجية من خلال أجهزة فك التشفير. أداة فك الترميز (Json.Decode) هي وظيفة تقبل JSON وترجع نوع Elm. أثناء تنفيذ Json.Decode.decodeString أو Json.Decode.decodeValue ، يتم التحقق من بنية بيانات الإدخال والنوع.


يقوم مفكك التشفير بإرجاع نوع النتيجة الذي يحتوي على البيانات ، في حالة نجاحها ، أو خطأ.


عرض


العرض عبارة عن دالة حالة تقوم بإرجاع معلومات لإنشاء شجرة DOM. مثال:


 view : Model -> Html.Html Msg view model = case model.user of Anonymous -> Html.div [] [ Html.text “Anonymous” ] User name -> Html.div [] [ Html.text (“Welcome ” ++ name) ] 

يتم استخدام الوظائف لإنشاء عقد DOM. في المشاريع القتالية ، الرأي هو تكوين وظائف لنظام أكثر عمومية. على سبيل المثال:


 view : Model -> Html.Html Msg view model = case model.user of Anonymous -> anonymousView User name -> userView name 

anonymousView و userView هي وظائف المستخدم التي تولد أجزاء صغيرة من الواجهة.


الطفرات (تحديث)


تنشئ جميع الأحداث (إجراءات المستخدم ، والشبكة ، وما إلى ذلك) رسائل يتم تسليمها إلى الوظيفة المسجلة أثناء التهيئة. بشكل افتراضي ، تسمى هذه الوظيفة التحديث. تأخذ الوظيفة حدثًا ونموذجًا ، وتعيد نموذجًا جديدًا وأوامر. يتم تنفيذ الأوامر في وقت تشغيل Elm ويمكنها أيضًا إنشاء أحداث.


على سبيل المثال ، زيادة متغير عند الضغط على زر:


 update : Model -> Msg -> (Model, Cmd Msg) update model msg = case msg of OnClick -> ({model | clicked = model.clicked + 1}, Cmd.none) 

اشترك


يتم الاشتراك في الأحداث عند بدء تشغيل التطبيق ويتم إعادة تسميته في كل مرة يتم فيها تغيير النموذج.


في حالة وقوع حدث ، يتم تسليمها إلى وظيفة التحديث.


على سبيل المثال ، اشتراك في جهاز ضبط الوقت لمدة 10 ثوانٍ. عند الوصول إلى 10 ثوانٍ ، يتم إنشاء رسالة التجزئة وتسليمها إلى وظيفة التحديث:


 subscribe : Model -> Sub Msg subscribe model = Time.every 10 Tick 

مصادر


Source: https://habr.com/ru/post/ar424215/


All Articles