Знайомство з Erlang [1]
Запустимо інтерактивну Erlang консоль
$ erl
і розпочнемо знайомитись
Порівняння
1> 1 < 5.
true
2> 2 > 7.
false
3> A = 5.
5
4> A >= 5.
true
5> A =< 1.
false
^^^
порівняння - менше (1), більше (2),
оголошення змінної (3), більше або рівно (4),
менше або рівно (5).
Так, в ерлангу "менше або рівно" записується як =< а не як в php/js/etc ( <= ).
Запамятати цю відмінність можна дуже просто -
запишемо в один ряд "більше або рівно" та "менше або рівно" -
>==<
і отримаємо .. цукерку :) запамятали, з'їли, продовжуємо далі
6> 5 == 5.
true
7> 5 == 5.0.
true
8> 5 =:= 5.
true
9> 5 =:= 5.0.
false
10> 1 /= 0.
true
11> 5 /= 5.0.
false
12> 1 =/= 0.
true
13> 5 =/= 5.0.
true
^^^
перевірка на рівність(не враховуючи тип) (6) (7),
перевірка на рівність(враховуючи тип) (8) (9),
далі йдуть обернені порівняння - 1 не рівно 0 (10), 5 не рівно 5.0 (11),
1 не рівно 0 враховуючи тип (12), 5 не рівно 5.0 враховуючи тип (13).
Отак в ерлангу з порівняннями на рівність :)
І це ще не все -
14> 0 == false.
false
15> 1 < false.
true
В ерланг ми маємо можливість порівнювати будь-які дані, будь-якого типу, з будь-якими іншими даними -
атом завжди більший за число, двійкові дані завжди більші за список:
число(number) < атом(atom) < посилання(reference) < функція(fun) < port < pid < кортеж та рекорд-запис(tuple and record) < map < список(list) < двійкові дані(binary)
if .. end, case .. of .. end
На завершення розглянемо дві конструкції - if .. end та case .. of .. end -
напишемо невеличкий модуль з двома функціями -
-module(test).
-compile([export_all, nowarn_export_all]).
test1(A) ->
%A = 5,
if A =:= 3 ->
"333";
A =:= 4 ->
"444";
A < 1 ->
"010";
A > 4 ->
"505";
true ->
"777"
end.
test2(A) ->
%A = 5,
case A of
3 ->
"333";
4 ->
"444";
5.0 ->
"010";
5 ->
"505";
_ ->
"777"
end.
(тут % - закоментовані строки)
зкомпілюємо
16> c(test).
{ok,test}
та запустимо
17> test:test1(5).
"505"
18> test:test2(5).
"505"
Що тут ми бачимо? if в ерлангу - це зовсім не той if з js/php/etc -
при використанні конструкції if ми можемо явно вказати,
яке саме порівняння нам потрібно - із врахуванням типу чи без,
а при використанні функції case .. of - використовується порівняння із врахуванням типу.
Крім того - у обох конструкціях порівняння йде зверху до низу,
гілка за-умовчанням (якщо жодна з гілок вище не відповідає нашій умові)
в конструкції if позначається як true,
в конструкції case .. of - позначається як _ (підкреслення - змінна без імені)
вийдемо з ерланг консолі
19> q().
ok
Посилання
https://en.wikipedia.org/wiki/Erlang_(programming_language)
https://ru.wikipedia.org/wiki/Erlang
https://uk.wikipedia.org/wiki/Erlang
https://www.erlang.org/