الأساسيات

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

مقدمة، أنواع البيانات والعمليات الأساسية.

جدول المحتويات

البدء

تثبيت إليكسير

يمكن إيجاد تعليمات التثبيت لكل نظم التشغيل على موقع elixir-lang.org في دليل تثبيت إليكسير.

بعد تثبيت إليكسير تستطيع أن تتأكد من النسخة المثبتة.

% elixir -v
Erlang/OTP 21.1 [erts-10.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.7.3

تشغيل نمط موجة الأوامر التفاعلي

تضم إليكسير الأمر iex والذي يمكنك من تشغيل اللغة في الوضع التفاعلي وتنفيذ بعض جُمَل الأوامر

دعنا نبدأ بتنفيذ الأمر iex:

Erlang/OTP 21.1 [erts-10.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir (1.7.3) - press Ctrl+C to exit (type h() ENTER for help)
iex>

دعنا نحاول كتابة بعض الجُمَل (التعبيرات) البسيطة:

iex> 2+3
5
iex> 2+3 == 5
true
iex> String.length("The quick brown fox jumps over the lazy dog")
43

لا تقلق إذا لم تفهم كل التعبيرات حتى الآن، نأمل أن تصلك فكرة عامة عن اللغة وتعبيراتها.

أنواع البيانات الأساسية

الأعداد الصحيحة

iex> 255
255

هناك دعم مدمج لنظام العد الثنائي والثماني والست عشري:

iex> 0b0110
6
iex> 0o644
420
iex> 0x1F
31

الأعداد العشرية

في إليكسير، يجب كتابة خانة واحدة على الأقل قبل الفاصلة لتمثيل عدد عشري كما يوجد دعم للأس بستخدام e.

iex> 3.41
3.41
iex> .41
** (SyntaxError) iex:2: syntax error before: '.'
iex> 1.0e-10
1.0e-10

القيم المنطقية

تدعم إليكسير القِيَم المنطقية true و false وجميع القيم تعبّر عن الصحة ما عدا false و nil.

iex> true
true
iex> false
false

الذرات

الذرة تعتبر ثابتاً اسمه يساوى قيمته. إذا كنت على معرفة بلغة برمجة روبي، الذرة هي مرادفة الرموز (Symbols):

iex> :foo
:foo
iex> :foo == :bar
false

ملاحظة: القيم المنطقية true و false تعتبر ذرات :true و :false.

iex> true |> is_atom
true
iex> :true |> is_boolean
true
iex> :true === true
true

اسماء الوحدات في إليكسير هي عبارة عن ذرات. MyApp.MyModule هو ذرة, حتى ولو لم يتم تعريف هذه الوحدة.

iex> is_atom(MyApp.MyModule)
true

الذرات ايضاً مستخدمة لتكون مرجع وحدات من مكتبات لغة البرمجة إرلانج.

iex> :crypto.strong_rand_bytes 3
<<23, 104, 108>>

السلاسل النصية

القيم النصية في إليكسير هي أحرف بترميز UTF-8 محاطة بعلامتي تنصيص مزدوجة.

iex> "Hello"
"Hello"
iex> "dziękuję"
"dziękuję"

يمكن للقيم النصية أن تُكْتَب مقسمة على أكثر من سطر:

iex> "foo
...> bar"
"foo\nbar"
iex> "foo\nbar"
"foo\nbar"

تضم أليكسير أيضا أنواع بيانات معقدة أكثر. سوف نتعلّم أكثر عنها أثناء الدرس عن المجموعات والدوالّ.

العمليات الأساسية

الحساب

تدعم أليكسير العمليات الحسابية الأساسية +, -, *, و / كما تتوقع. من المهم أن تلاحظ أن / دائما سيعيد عدد عشري:

iex> 2 + 2
4
iex> 2 - 1
1
iex> 2 * 5
10
iex> 10 / 5
2.0

في إليكسير، يمكنك الحصول على ناتج القسمة بدون باقٍ أو الحصول على باقي القسمة فقط عن طريق الدوالّ التالية:

iex> div(10, 5)
2
iex> rem(10, 3)
1

المنطق

توفّر إليكسير رموز ||, &&, و ! لعمليات حسابية، وهي تدعم أي نوع:

iex> -20 || true
-20
iex> false || 42
42

iex> 42 && true
true
iex> 42 && nil
nil

iex> !42
false
iex> !false
true

هناك ثلاث أوامر أخرى أيضا للتعامل مع القيم المنطقية مع العلم انه يجب ان يكون المعامل الاول قيمة منطقية (true or false):

iex> true and 42
42
iex> false or true
true
iex> not false
true
iex> 42 and true
** (ArgumentError) argument error: 42
iex> not 42
** (ArgumentError) argument error

المقارنة

عند إليكسير كل عمليات المقارنة المعتادة: ==, !=, ===, !==, <=, >=, < و >.

iex> 1 > 2
false
iex> 1 != 2
true
iex> 2 == 2
true
iex> 2 <= 3
true

لمقارنة صارمة بين أعداد صحيحة وأعداد عشرية، استخدم ===:

iex> 2 == 2.0
true
iex> 2 === 2.0
false

من الخصائص المهمة في إليكسير إمكانية المقارنة بين قيمتين من نفس النوع، تأتي أهمية ذلك عند ترتيب القِيَم. ليس من الضروري أن تحفظ هذا الترتيب ولكن من باب العلم بالشيء.

number < atom < reference < functions < port < pid < tuple < maps < list < bitstring

يمكن أن يؤدي هذا لمقارنات مثيرة للاهتمام، ولكنها صحيحة تماماً، ولا تستطيع أن تجدها في لغات برمجة أخرى:

iex> :hello > 999
true
iex> {:hello, :world} > [1, 2, 3]
false

القيم النصية الممزوجة

إذا كنت من مستخدمي روبي، مزج القيم النصية في إليكسير سيبدو مألوفاً:

iex> name = "Sean"
iex> "Hello #{name}"
"Hello Sean"

الدمج بين القِيَم النصية

استخدم <> لعملية المزج بين القيم النصية:

iex> name = "Sean"
iex> "Hello " <> name
"Hello Sean"