Знайомство з 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/