حول كيف انتقلت من C # إلى Elixir / Phoenix

بمجرد اضطررت لتغيير الوظائف. قبل ذلك ، عملت فقط مع لغات مثل بايثون ، سي + + ، سي # ، واثنين آخرين مثل ذلك. والآن اضطررت للبدء في العمل بلغة وظيفية. الانطباعات الأولى كانت "ماذا بحق الجحيم؟" ومع ذلك ، تمكنت من التكيف بسرعة كافية. بعد ذلك ، سأتحدث عن النقاط الرئيسية التي كان علي التعود عليها أو التي كان علي أن أفهمها من أجل البدء في الكتابة بسرعة وكافية.

1. نمط مطابقة

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

مثال 1. حسب التعريف:

{tuple_item_1, tuple_item_2} = tuple 

- يقسم مجموعة مكونة من عنصرين إلى متغيرين ، ويمكن بعد ذلك استخدامها.

 [head_item | tail_list] = list 

- يقسم القائمة إلى العنصر الأول في القائمة والقائمة دون العنصر الأول.

مثال 2. المقارنة في الحالة:

 case get_elem(struct) do {:ok, elem} -> … {:error, reason} -> … end 

تقوم دالة get_elem (struct) بإرجاع tuple ، وتتيح لك الحالة استخراج البيانات على الفور وتحديد سلسلة أخرى من الإجراءات.

مثال 3. ميزة رسم الخرائط:

 def function_1(params, :ok) do end def function_1(params, :error) do end def function_1(params, _) do end 

هنا ، في الواقع ، يتم تقديم نفس الوظيفة التي تأخذ معلمتين. تسمح لك مطابقة الأنماط باختيار الوظيفة المراد تنفيذها.

قليلا عن مطابقة النمط. المقارنة هي دائما "من أعلى إلى أسفل". في هذا المثال ، عند استدعاء function_1 من معلمتين ، سوف يتحقق أولاً من أن المعلمة الثانية هي : ok . إذا فشل الفحص الأول ، فسيتم إجراء فحص لـ : خطأ . وإذا لم يكن الأمر كذلك ، فسندخل النسخة الثالثة من الطريقة على أي حال. تعني الشرطة السفلية "أي بيانات" ، وكذلك حقيقة أن البيانات المستلمة لا تهمنا ، أي أننا لن نستخدمها. إذا كانت الدالة_1 (params ، _) هي الأولى في القائمة ، فسيحددها البرنامج دائمًا ، ولن تعمل الطريقتان الأخريان مطلقًا. إذا لم يتم العثور على النموذج المطلوب ، فسيتم طرح استثناء.

2. خط أنابيب

هذه هي الانشاءات من النموذج التالي:

 param_1 |> func_1() |> func_2(param_2) … 

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

يمكن إعادة كتابة المثال أعلاه كما يلي:

 func_2(func_1(param_1), param_2) 

بمعنى آخر ، يقوم خط الأنابيب بإعادة توجيه نتيجة حساب الوظيفة السابقة إلى الوظيفة التالية باستخدام الوسيطة الأولى.

3. عدم وجود دورات

لا توجد دورات في إكسير. تسببت هذه الحقيقة في أكبر صدمة لي ، وهي أصعب الفهم. بعد ذلك يأتي رأيي ورؤيتي التي قد لا تتوافق مع الواقع والنظرية.

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

يعمل شيئان كبديل للدورات - طرق العودية والمكتبة للعمل مع عناصر لا حصر لها من اللغة.

أكثر قليلا عن الأشياء الصغيرة.

1. لا توجد فصول في Elixir ، ولكن هناك سياقات. في جوهرها ، والسياقات هي في بعض الأحيان محل الطبقات. أقرب وصف للسياق من خلال أعين s-حاد: السياقات هي تقاطع بين فئة ومساحة اسم في شارب ، والسياق هو أقرب بكثير من مساحة الاسم.

2. الذرات. في إكسير هناك شيء مثل ذرة. الذرة هي في الأساس نوع من "التسمية". أسهل طريقة لمعاملتها هي الخطوط الخاصة. الأمثلة في هذه المقالة بالفعل اثنين من الذرات :: ok ،: خطأ . بفضل الذرات ، أصبحت مطابقة الأنماط والبنى المنطقية المعقدة أسهل بكثير. في جوهرها ، هذه هي الثوابت التي قيمتها هي اسمهم. تحتوي الذرة دائمًا على ":" أمام الاسم.

3. كيفية قراءة رؤوس الطريقة بشكل صحيح. من المعتاد في Elixir تعيين الأساليب على النحو التالي (يظهر هذا بشكل خاص في الوثائق): & function / 2 . تتم قراءته كطريقة مع اسم "الوظيفة" و arity 2. Arity هو عدد الوسائط التي يتم اتخاذها.

ما ساعدني على الاندماج في اللغة.

أولاً ، هذا دليل على Android "Elixir Tutorial". إنه جيد لأنه يغطي لفترة وجيزة النقاط الرئيسية للغة وبناء جملةها ، ويمكن قراءتها على الحافلة. أقل: إنه باللغة الإنجليزية ، لذلك لا يناسب الجميع.

ثانياً ، كتاب "مقدمة إلى Elixir" من تأليف Senloren S. ، Eisenberg D ... يوضح هذا الكتاب أساليب العمل مع اللغة ويشرحها. إنه سهل القراءة ويسمح لك بتحسين عملك باستخدام اللغة. ويمكن أيضا أن تكون موجودة باللغة الروسية.

ثالثا ، الوثائق الرسمية عبر الإنترنت. وهي مصنوعة بسهولة ويسمح لك بالعثور بسرعة على الأقسام / الطرق اللازمة ، مع وصف تفصيلي وأمثلة.

هذا كل شيء.

قائمة المواد:

1. إكسير تعليمي

2. Senloren S. ، Eisenberg D. مقدمة إلى Elixir. مقدمة في البرمجة الوظيفية. - أورايلي ، 2017.

3. الوثائق الرسمية.

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


All Articles