الشروع في استخدام لغة برمجة الإكسير
نشرت: 2022-03-11إذا كنت تقرأ منشورات المدونة أو سلاسل أخبار المتسللين أو تغريدات المطورين المفضلين لديك أو تستمع إلى البودكاست ، فمن المحتمل أنك سمعت في هذه المرحلة عن لغة برمجة Elixir. تم إنشاء اللغة بواسطة Jose Valim ، وهو مطور معروف في عالم مفتوح المصدر. قد تعرفه من إطار Ruby on Rails MVC أو من ابتكار وأحجار ياقوت بسيطة شكله هو وزملاؤه من Plataformatec في السنوات القليلة الماضية.
وفقًا لـ Jose Valim ، ولد Elixir في عام 2011. كانت لديه فكرة بناء لغة جديدة بسبب عدم وجود أدوات جيدة لحل مشاكل التزامن في عالم الياقوت. في ذلك الوقت ، بعد قضاء بعض الوقت في دراسة التزامن وتوزيع اللغات المركزة ، وجد لغتين يحبهما ، وهما Erlang و Clojure اللتان تعملان في JVM. لقد أحب كل ما رآه في لغة Erlang (Erlang VM) وكان يكره الأشياء التي لم يراها ، مثل سمات تعدد الأشكال ، والبرمجة الوصفية ، وقابلية توسيع اللغة التي كان Clojure جيدًا فيها. لذلك ، وُلد Elixir مع وضع ذلك في الاعتبار ، ليكون لديه بديل لـ Clojure ولغة ديناميكية تعمل في Erlang Virtual Machine مع دعم جيد للتمديد.
تصف Elixir نفسها على أنها لغة ديناميكية وعملية ذات حالة غير قابلة للتغيير ونهج قائم على الفاعل للتزامن مصمم لبناء تطبيقات قابلة للتطوير ويمكن صيانتها باستخدام بنية بسيطة وحديثة ومرتبة. تعمل اللغة في Erlang Virtual Machine ، وهي آلة افتراضية دليل على المعركة وعالية الأداء وموزعة تشتهر بخصائص زمن الوصول المنخفض والتسامح مع الخطأ.
قبل أن نرى بعض الكود ، من الجدير القول أن الإكسير قد تم قبوله من قبل المجتمع الذي ينمو. إذا كنت تريد أن تتعلم الإكسير اليوم ، فستجد بسهولة الكتب والمكتبات والمؤتمرات والاجتماعات والبودكاست ومنشورات المدونات والنشرات الإخبارية وجميع أنواع مصادر التعلم الموجودة هناك وكذلك تم قبولها من قِبل منشئي Erlang.
دعونا نرى بعض التعليمات البرمجية!
تثبيت Elixir:
يعد تثبيت Elixir أمرًا سهلاً للغاية في جميع الأنظمة الأساسية الرئيسية وهو عبارة عن سطر واحد في معظمها.
قوس لينكس
يتوفر Elixir على Arch Linux من خلال المستودعات الرسمية:
pacman -S elixir
أوبونتو
يعد تثبيت Elixir في Ubuntu أمرًا مرتبًا بعض الشيء. لكنها سهلة بما فيه الكفاية مع ذلك.
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb apt-get update apt-get install esl-erlang apt-get install elixir
OS X
قم بتثبيت Elixir في OS X باستخدام Homebrew.
brew install elixir
تعرف على IEx
بعد اكتمال التثبيت ، حان الوقت لفتح الغلاف الخاص بك. سوف تقضي الكثير من الوقت في قوقعتك إذا كنت ترغب في التطوير في الإكسير.
إن غلاف Elixir التفاعلي أو IEx عبارة عن REPL - (اقرأ تقييم حلقة الطباعة) حيث يمكنك استكشاف الإكسير. يمكنك إدخال التعبيرات هناك وسيتم تقييمها مما يمنحك ملاحظات فورية. ضع في اعتبارك أن الكود الخاص بك يتم تقييمه حقًا وليس تجميعه ، لذا تأكد من عدم تشغيل التنميط أو المعايير في الهيكل.
أمر كسر
هناك شيء مهم تحتاج إلى معرفته قبل أن تبدأ في IEx REPL - كيفية الخروج منه.
من المحتمل أنك معتاد على الضغط على CTRL+C
لإغلاق البرامج التي تعمل في الجهاز. إذا قمت بالضغط على CTRL+C
في IEx REPL ، فسوف تفتح قائمة Break. بمجرد دخولك إلى قائمة الاستراحة ، يمكنك الضغط على CTRL+C
مرة أخرى لإنهاء الصدفة وكذلك الضغط a
.
لن أتعمق في وظائف القائمة الفاصلة. ولكن ، دعنا نرى بعض مساعدي IEx!
مساعدين
يوفر IEx مجموعة من المساعدين ، من أجل سرد كل منهم اكتب: h()
.
وهذا ما يجب أن تراه:
هذه بعض الأشياء المفضلة لدي ، وأعتقد أنها ستكون لك أيضًا.
-
h
كما رأينا للتو ، ستطبع هذه الوظيفة رسالة المساعد. -
h/1
وهي نفس الوظيفة ، لكنها تتوقع الآن وسيطة واحدة.
على سبيل المثال ، متى أردت الاطلاع على توثيق طريقة String
strip/2
، يمكنك بسهولة القيام بما يلي:
من المحتمل أن يكون مساعد IEx الثاني الأكثر فائدة الذي ستستخدمه أثناء البرمجة في Elixir هو c/2
، والذي يقوم بتجميع ملف إكسير معين (أو قائمة) ويتوقع كمعامل ثانٍ مسار لكتابة الملفات المترجمة إليه.
لنفترض أنك تعمل في أحد http://exercism.io/ Elixir exersices ، تمرين الجناس الناقص.
لذلك قمت بتنفيذ وحدة Anagram
، والتي تحتوي على طريقة match/2
في ملف anagram.exs. بصفتك مطورًا جيدًا ، فقد قمت بكتابة بعض المواصفات للتأكد من أن كل شيء يعمل كما هو متوقع أيضًا.
هكذا يبدو دليلك الحالي:
الآن ، من أجل تشغيل الاختبارات الخاصة بك مقابل وحدة Anagram ، تحتاج إلى تشغيل / تجميع الاختبارات.
كما رأيت للتو ، من أجل تجميع ملف ، ما عليك سوى استدعاء الملف التنفيذي elixir
الذي يمر كمسار وسيطة إلى الملف الذي تريد تجميعه.
لنفترض الآن أنك تريد تشغيل IEx REPL مع وحدة Anagram التي يمكن الوصول إليها في سياق الجلسة. هناك خياران شائع الاستخدام. الأول هو أنه يمكنك طلب الملف باستخدام الخيارات -r
، شيء مثل iex -r anagram.exs
. الثانية ، يمكنك تجميعها مباشرة من جلسة IEx.
بسيط ، تمامًا مثل هذا!
حسنًا ، ماذا لو كنت تريد إعادة تجميع وحدة؟ هل يجب عليك الخروج من IEx وتشغيله مرة أخرى وتجميع الملف مرة أخرى؟ لا! إذا كانت لديك ذاكرة جيدة ، فستتذكر أنه عندما قمنا بإدراج جميع المساعدين المتاحين في IEx REPL ، رأينا شيئًا عن أمر إعادة التحويل البرمجي. دعونا نرى كيف يعمل.
لاحظ أنك مررت هذه المرة الوحدة نفسها وليس مسار الملف كوسيطة.
كما رأينا ، لدى IEx مجموعة من المساعدين المفيدين الآخرين الذين سيساعدونك على تعلم وفهم كيفية عمل برنامج Elixir بشكل أفضل.
أساسيات أنواع الإكسير
أعداد
هناك نوعان من الأرقام. الأعداد الصحيحة ذات الحجم العشوائي وأرقام النقاط العائمة.

عدد صحيح
يمكن كتابة الأعداد الصحيحة بالقاعدة العشرية والقاعدة العشرية والثنائية والثنائية.
كما هو الحال في Ruby ، يمكنك استخدام شرطة سفلية للفصل بين مجموعات من ثلاثة أرقام عند كتابة أعداد كبيرة. على سبيل المثال يمكنك تصحيح مائة مليون مثل هذا:
100_000_000
ثماني:
0o444
سداسي عشري:
0xabc
الثنائية:
0b1011
يطفو
Floare هي معيار الدقة المزدوجة IEEE 754. لديهم 16 رقمًا من الدقة وأحد أقصى يبلغ حوالي 10308.
العوامات مكتوبة باستخدام الفاصلة العشرية. يجب أن يكون هناك رقم واحد على الأقل قبل النقطة وبعدها. يمكنك أيضًا إلحاق أُس لاحق. على سبيل المثال 1.0 و 0.3141589e1 و 314159.0-e.
الذرات
الذرات هي ثوابت تمثل الأسماء. إنها قيم ثابتة. أنت تكتب ذرة بنقطتين بادرتين :
وتسلسل من الأحرف والأرقام والشرطات السفلية والعلامات @
. يمكنك أيضًا كتابتها بعلامة النقطتين البادئة :
وتسلسل عشوائي من الأحرف محاطة بعلامات اقتباس.
الذرات هي أداة قوية للغاية ، فهي تستخدم للإشارة إلى وظائف erlang وكذلك المفاتيح وطرق Elixir.
هنا عدد قليل من الذرات الصالحة.
:name, :first_name, :"last name", :===, :is_it_@_question?
قيمة منطقية
بالطبع ، القيم المنطقية هي قيم صحيحة وخاطئة. لكن الشيء الجميل عنهم هو في نهاية المطاف ، أنهم مجرد ذرات.
سلاسل
بشكل افتراضي ، تتوافق السلاسل في Elixir مع UTF-8. لاستخدامها ، يمكن أن يكون لديك عدد عشوائي من الأحرف محاط بـ "
أو '
. يمكنك أيضًا أن يكون لديك تعبيرات محرفة داخل السلسلة بالإضافة إلى أحرف تم تجاوزها.
اعلم أن السلاسل ذات الاقتباس المفردة هي في الواقع قائمة من الثنائيات.
وظائف مجهولة
كلغة وظيفية ، الإكسير لها وظائف مجهولة كنوع أساسي. طريقة بسيطة لكتابة دالة هي fn (argument_list) -> body end
. ولكن يمكن أن تحتوي الوظيفة على هيئات متعددة مع قوائم حجة متعددة وجمل حماية وما إلى ذلك.
يقترح Dave Thomas ، في كتاب Programming Elixir ، أننا نفكر في fn… end على أنها علامات الاقتباس التي تحيط بسلسلة حرفية ، حيث بدلاً من إرجاع قيمة سلسلة ، نعيد دالة.
مجموعات
Tuple هي مجموعة مفهرسة غير قابلة للتغيير. فهي سريعة في استعادة حجمها وبطيئة في إلحاق قيم جديدة بسبب طبيعتها الثابتة. عند تحديث tuple ، فأنت تقوم بالفعل بإنشاء نسخة جديدة كاملة من tuple self.
غالبًا ما يتم استخدام Tuple كقيمة إرجاع للصفيف. أثناء الترميز في Elixir ، سترى هذا غالبًا ، {:ok, something_else_here}
.
إليك كيفية كتابة مجموعة: {?a,?b,?c}
.
نمط مطابقة
لن أتمكن من شرح كل ما تحتاج لمعرفته حول مطابقة الأنماط ، ولكن ما أنت على وشك قراءته يغطي الكثير مما تحتاج إلى معرفته للبدء.
يستخدم الإكسير =
كعامل مطابقة. لفهم هذا ، نحتاج نوعًا ما إلى التخلي عن ما نعرفه عن =
في اللغات التقليدية الأخرى. في اللغات التقليدية ، يكون عامل التشغيل equals للتعيين. في Elixir ، عوامل التساوي هي لمطابقة النمط.
إذن ، هذه هي الطريقة التي تعمل بها القيم في الجانب الأيسر. إذا كانت متغيرات فهي مرتبطة بالجانب الأيمن ، وإذا لم تكن متغيرات يحاول الإكسير مطابقتها مع الجانب الأيمن.
مشغل الدبوس
يوفر Elixir طريقة لفرض مطابقة النمط دائمًا مقابل المتغير الموجود في الجانب الأيسر ، عامل الدبوس.
القوائم
في Elixir ، تبدو القوائم مثل المصفوفات كما نعرفها من اللغات الأخرى ولكنها ليست كذلك. القوائم عبارة عن هياكل مرتبطة تتكون من رأس وذيل.
قوائم الكلمات الرئيسية
قوائم الكلمات الرئيسية هي قائمة من أزواج Tuple.
أنت ببساطة تكتبها على شكل قوائم. على سبيل المثال: [{: one، 1}، 2، {: three، 3}]. يوجد اختصار لتعريف القوائم ، وإليك كيف تبدو: [واحد: 1 ، ثلاثة: 3].
لاسترداد عنصر من قائمة الكلمات الرئيسية ، يمكنك إما استخدام:
Keyword.get([{:one, 1}, 2, {:three, 3}], :one)
أو استخدم الاختصار:
[{:one, 1}, 2, {:three, 3}][:one]
نظرًا لأن قوائم الكلمات الرئيسية تكون بطيئة عند استرداد قيمة ما ، فهي عملية مكلفة ، لذلك إذا كنت تقوم بتخزين البيانات التي تحتاج إلى وصول سريع ، فيجب عليك استخدام الخريطة.
خرائط
الخرائط هي مجموعة فعالة من أزواج المفتاح / القيمة. يمكن أن يكون للمفتاح أي قيمة تريدها كمفتاح ، ولكن يجب أن تكون عادةً من نفس النوع. تختلف عن قوائم الكلمات الرئيسية ، تسمح الخرائط بإدخال واحد فقط لمفتاح معين. إنها فعالة لأنها تنمو ويمكن استخدامها في مطابقة نمط Elixir في خرائط الاستخدام العام عندما تحتاج إلى مصفوفة ترابطية.
إليك كيفية كتابة الخريطة:
%{ :one => 1, :two => 2, 3 => 3, "four" => 4, [] => %{}, {} => [k: :v]}
خاتمة
الإكسير رائع ، وسهل الفهم ، وله أنواع بسيطة لكنها قوية وأدوات مفيدة للغاية حوله والتي ستساعدك عند البدء في التعلم. في هذا الجزء الأول ، قمنا بتغطية أنواع البيانات المختلفة التي بنيت عليها برامج Elixir والمشغلين الذين يشغلونها. في الأجزاء اللاحقة سوف نتعمق أكثر في عالم الإكسير - البرمجة الوظيفية والمتزامنة.