مقدمات
آغاز، انواع داده و عملیات اصلی.
آغاز
نصب الکسیر
دستور نصب برای هر سیستمهای عامل مختلف در سایت elixir-lang.org در صفحهی نصب الکسیر در دسترس است.
پس از نصب الکسیر، به سادگی میتوانید بفهمید چه نسخهای نصب شده است.
% elixir -v
Erlang/OTP {{ site.erlang.OTP }} [erts-{{ site.erlang.erts }}] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Elixir {{ site.elixir.version }}
آزمودن حالت تعاملی
به همراه الکسیر یک پوستهی تعاملی به نام IEx نصب میشود که امکان ارزیابی عبارات الکسیر را فراهم میکند.
برای شروع دستور iex
را اجرا کنید:
Erlang/OTP {{ site.erlang.OTP }} [erts-{{ site.erlang.erts }}] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Interactive Elixir ({{ site.elixir.version }}) - press Ctrl+C to exit (type h() ENTER for help)
iex>
نکته: در پاورشل ویندوز باید iex.bat
را تایپ کنید.
خب، بیایید چند عبارت سادهی الکسیر را آزمایش کنیم:
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.14
3.14
iex> .14
** (SyntaxError) iex:2: syntax error before: '.'
iex> 1.0e-10
1.0e-10
بولی
الکسیر از مقادیر بولی true
و false
پشتیبانی میکند؛ همه چیز درست در نظر گرفته میشود به جز false
و nil
.
iex> true
true
iex> false
false
اتمها
اتم ثابتی است که نام آن همان مقدار آن است. اگر با زبان روبی آشنا هستید، اینها معادل سمبلها در روبی هستند.
iex> :foo
:foo
iex> :foo == :bar
false
مقادیر بولی true
و false
به ترتیب همان اتمهای :true
و :false
هستند.
iex> is_atom(true)
true
iex> is_boolean(:true)
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
یا 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
نکته: عملگرهای and
و or
الکسیر در حقیقت به andalso
و orelse
در ارلنگ نگاشت میشوند.
مقایسهای
الکسیر همهی عملگرهای مقایسهای که با آنها آشنا هستیم را دارد: ==
، !=
، ===
، !==
، <=
، >=
، <
، و >
.
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 < function < port < pid < tuple < map < list < bitstring
این ممکن است منجر به مقایسههای جالب و البته معتبری شود که شاید در زبانهای دیگر یافت نشوند:
iex> :hello > 999
true
iex> {:hello, :world} > [1, 2, 3]
false
درج رشته
اگر از روبی استفاده کرده باشید، درج رشته در الکسیر آشنا خواهد بود:
iex> name = "Sean"
"Sean"
iex> "Hello #{name}"
"Hello Sean"
پیوند رشته
برای پیوند رشته از عملگر <>
استفاده میشود:
iex> name = "Sean"
"Sean"
iex> "Hello " <> name
"Hello Sean"
Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!