ublog

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

programming [41]erlang [39]

Вітаю!

Зараз ми розглянемо як виглядає порівняння в erlang-у,
і що з чим і як можна порівнювати в цій цікавій мові програмування.

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

1> 1 < 5.
true
2> 2 > 7.
false
3> A = 5.
5
4> A >= 5.
true
5> A =< 1.
false


Запитання - Що тут відбувається? О_о
Відповідь - Порівняння - менше, більше, оголошення змінної, більше або рівно, менше або рівно (зверху донизу)
- О_о
- так, в ерлангу "менше або рівно" записується як =< а не як в phpjsetc ( <= )

запамятати цю відмінність можна дуже просто -
запишемо в один ряд "більше або рівно" та "менше або рівно" -
>==<
і отримуємо .. цукерку:) запамятали, з'їли, продовжуємо далі -

Запитання - А як в ерлангу з порівняннями на рівність?
Відповідь -
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

- О_о
- (зверху донизу) перевірка на рівність(не враховуючи тип), --||--, перевірка на рівність(враховуючи тип), --||--,
далі йдуть обернені порівняння (1 не рівно 0 - true, 5 не рівно 5.0 [ми це зробили - порівняли integer з float :D ], 1 не рівно 0 враховуючи тип, 5 не рівно 5.0 враховуючи тип)

- О_о
- і це ще не все :D
14> 0 == false.
false
15> 1 < false.
true

- О_о

Пояснення - ерланг - це продукт роботи інженерів систем телекомунікацій,
вище ми бачимо результат рішення розробників ерланга мати можливість порівнювати будь-які дані, будь-якого типу, з будь-якими даними.
це означає, що атом завжди більший за число, двійкові дані завжди більші за список, загалом -
число(number) < атом(atom) < посилання(reference) < функція(fun) < port < pid < кортеж(tuple) < map < null < список(list) < двійкові дані(bit string)


На завершення розглянемо дві конструкції - 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.


зкомпілювали, запускаємо -
17> test:test1(5).
"505"
18> test:test2(5).
"505"


Що ми тут бачимо?
(який жах, if в ерлангу - це зовсім не той if з js/php/etc :D )
при використанні конструкції if - ми можемо явно вказати, яке саме порівняння нам потрібно - із врахуванням типу чи без,
а при використанні функції case .. of - використовується порівняння із врахуванням типу,
крім того - у обох конструкціях порівняння йде зверху до низу,
гілка за-умовчанням (якщо жодна з гілок вище не відповідає нашій умові) - в конструкції if позначається як true, в конструкції case .. of - позначається як _ (змінна_без_імені)


Порада - прийшовши до вивчення ерланга після php/js/etc - перестаньте порівнювати його з іншими мовами,
потрібно просто узяти і писати код, скоріше прийнявши ерланг таким як він є - ви скоріше розпочнете отримувати задоволення))


Далі буде ...