ublog

Знайомство з erlang - синтаксисом - 2

programming [41]erlang [39]

Вітаю!

Зараз ми розглянемо які існують типи даних в erlang, і базові дії з ними.

Запустимо ерланг-консоль і розпочнемо -

1> 777.
777
2> 77.7.
77.7


це integer та float

3> 7777777777777777777777777 * 9999999999999999999999999999.
77777777777777777777777769992222222222222222222222223


це також integer, в ерлангу він не має типів/обмежень по типу (наприклад, як в c/c++ чи mysql/postgresql),
і просто записується в памяті допоки не поміститься =)


4> test9.
test9


це атом
- що з ним можна робити?
- порівнювати, що активно використовується в паттерн-матчінгу (Pattern matching),
і все (не беручи до уваги привязку до змінної для виклику функцій з динамічно створеного чи викликаємого модуля)

5> {5, 77.8}.
{5,77.8}


це кортеж (tuple) - ерланг-структура статичної довжини (створили з двома елементами - і третій додати не можемо, лише видобути оці два),
також має синтаксичний цукор у вигляді record-ів (на етапі компіляції record-и перетворюються в кортежі, "гублячи" свої ключі і залишаються лише значення, про це в деталях - іншим разом)

6> A9 = {5, 77.8}.
{5,77.8}
7> {V1,V2} = A9.
{5,77.8}
8> V1.
5
9> V2.
77.8


привязали кортеж до змінної, далі - видобули з кортежа значення в нові змінні

10> [1, 2, 3]. 
[1,2,3]


це список (list) - ерланг-структура динамічної довжини (ми можемо у створений список додати елементи, не лише видобувати, як у випадку з кортежем)

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]


спочатку дістали зі списку один елемент з початку - "голову", решту списку записали в "хвіст",
наступна команда - дістали по черзі три елементи з початку списку і відповідно привязали до змінних, решту списку записали в "хвіст"
(також ви можете знайти багато корисних функцій для роботи зі списками в ерланг-документації http://erlang.org/doc/man/lists.html )


15> #{a => 1, b => 3}.
#{a => 1,b => 3}


map - key-value тип даних, до його введення в ерлангу активно використовувались proplists -

16> [{a, 1}, {b, 3}].
[{a,1},{b,3}]


proplists-"аналог" map-а вище

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 до змінної,
оновили значення існуючого ключа,
видалили ключ-значення,
додали нову пару ключ-значення
(більше функцій для роботи з map-ами ви можете знайти в ерланг-документації http://erlang.org/doc/man/maps.html )

22> "test777".
"test777"
23> <<"test999">>.
<<"test999">>


строки в ерлангу --
спочатку - строка-список,
далі - бінарна строка
(про строки в ерлангу, включаючи роботу зі строками з кирилицею - напишу окремий пост, оскільки це окрема пісня :D )


24> Z = fun(A) -> A*A end.
#Fun<erl_eval.6.99386804>
25> Z(7).
49


це - оголошення та використання анонімної (fun) функції
(те, що нам повернула консоль ерланга у відповідь на 24-ту команду - це тип reference)


це не всі типи в ерлангу, пізніше напишу доповнення.


Далі буде ...