Знайомство з Erlang [2]
Розглянемо які існують типи даних в erlang, і базові дії з ними.
integer, float
Запустимо ерланг-консоль і розпочнемо -
$erl
1> 777.
777
2> 77.7.
77.7
^^^
це integer (1) та float (2)
3> 7777777777777777777777777 * 9999999999999999999999999999.
77777777777777777777777769992222222222222222222222223
це також integer (3), в ерлангу integer не має типів/обмежень по типу (наприклад, як в c/c++ чи mysql/postgresql),
і просто записується в памяті допоки не поміститься :)
atom
4> test9.
test9
^^^
це атом (atom) (4), атоми можна лише порівнювати,
що активно використовується в паттерн-матчінгу (Pattern matching), і все
(не беручи до уваги привязку до змінної для виклику функцій з динамічно створеного чи викликаємого модуля).
імена модулів та функцій - атоми.
tuple
5> {5, 77.8}.
{5,77.8}
це кортеж (tuple) (5) - ерланг-структура статичної довжини
(створили з двома елементами - і третій додати не можемо, лише видобути оці два),
також має синтаксичний цукор у вигляді record-ів
(на етапі компіляції record-и перетворюються в кортежі,
"гублячи" свої ключі і залишаються лише значення, про це в деталях - іншим разом)
6> A9 = {5, 77.8}.
{5,77.8}
7> {V1,V2} = A9.
{5,77.8}
8> V1.
5
9> V2.
77.8
^^^
привязали кортеж до змінної, далі - видобули з кортежа значення в нові змінні
list
10> [1, 2, 3].
[1,2,3]
^^^
це список (list) (10) - ерланг-структура динамічної довжини
(ми можемо у створений список додати елементи, не лише видобувати, як у випадку з кортежем)
11> A1 = [1, 2, 3].
[1,2,3]
12> A2 = [777|A1].
[777,1,2,3]
^^^
додали елемент 777 в голову списку, привязаного до змінної A2
13> [Head1|Tail1] = A2.
[777,1,2,3]
14> [Head11,Head2,Head3|Tail11] = A2.
[777,1,2,3]
^^^
спочатку дістали зі списку один елемент з початку - "голову", решту списку записали в "хвіст",
наступна команда - дістали по черзі три елементи з початку списку і відповідно привязали до змінних, решту списку записали в "хвіст"
(також ви можете знайти багато корисних функцій для роботи зі списками в ерланг-документації
https://erlang.org/doc/man/lists.html )
map
15> #{a => 1, b => 3}.
#{a => 1,b => 3}
^^^
map (15) - key-value тип даних, до його введення в ерлангу активно використовувались proplists -
16> [{a, 1}, {b, 3}].
[{a,1},{b,3}]
proplist (16) -"аналог" map-а вище (15)
17> Q = #{a => 1, b => 3}.
#{a => 1,b => 3}
18> Q2 = maps:put(a, 42, Q).
#{a => 42,b => 3}
19> Q3 = maps:remove(b, Q2).
#{a => 42}
20> Q4 = maps:put(c, 77, Q3).
#{a => 42,c => 77}
21> maps:size(Q4).
2
^^^
привязали map до змінної (17),
оновили значення існуючого ключа (18),
видалили ключ-значення (19),
додали нову пару ключ-значення (20),
дізнались кількість елементів в map (21)
(більше функцій для роботи з map-ами ви можете знайти в ерланг-документації https://erlang.org/doc/man/maps.html )
string (list string, binary string)
22> "test777".
"test777"
23> <<"test999">>.
<<"test999">>
^^^
строки в ерлангу --
строка-список (22),
бінарна строка (23)
(про строки в ерлангу, включаючи роботу зі строками з кирилицею - окремий пост, оскільки це окрема пісня :D )
fun
24> Z = fun(A) -> A*A end.
#Fun<erl_eval.6.99386804>
25> Z(7).
49
^^^
це - оголошення та використання анонімної (fun) функції
(те, що нам повернула консоль ерланга у відповідь на 24-ту команду - це тип reference )
Посилання
https://erlang.org/doc/man/lists.html
https://erlang.org/doc/man/maps.html