Skip to the content.

Բազային սինթաքսը

Առաջին ծրագիրը՝ «Hello world»

Ինչպես ընդունված է ծրագրավորման աշխարհում, սկսենք ավանդական «Hello world» ծրագրից։

Elixir-ն ունի ինտերակտիվ միջավայր՝ iex (Interactive Elixir)։ Այն թույլ է տալիս գրել Elixir կոդ և անմիջապես տեսնել արդյունքը՝ առանց որևէ ֆայլ ստեղծելու։ Նման գործիքները ծրագրավորման աշխարհում հաճախ անվանում են REPL (Read-Eval-Print Loop)։ Եթե երբևէ աշխատել եք Node.js-ի node հրամանի կամ Python-ի ինտերակտիվ ռեժիմի հետ, ապա գաղափարը ձեզ ծանոթ կլինի։

Գործարկեք տերմինալը և մուտքագրեք՝

iex

Երբ iex-ը գործարկվի, կտեսնեք iex(1)> պրոմպտը։ Այժմ փորձենք էկրանին տպել մեր առաջին տողը IO.puts ֆունկցիայի միջոցով՝

iex(1)> IO.puts("Hello world")
Hello world
:ok

Այստեղ IO-ն մոդուլ է, որը պատասխանատու է մուտքի/ելքի (input/output) գործողությունների համար, իսկ puts-ը այդ մոդուլի ֆունկցիաներից մեկն է, որը ստացած տեքստը տպում է կոնսոլում՝ վերջում ավելացնելով նոր տողի նշան։

Ուշադրություն դարձրեք, որ տպված Hello world-ից հետո iex-ը ցույց է տալիս նաև :ok արժեքը։ Elixir-ում ամեն ֆունկցիա վերադարձնում է որևէ արժեք, և IO.puts-ը հաջող ավարտվելուց հետո վերադարձնում է :ok-ը։ Սա atom կոչվող տվյալների տիպ է, որին կծանոթանանք առաջիկայում։

iex-ից դուրս գալու համար երկու անգամ սեղմեք Ctrl+C կամ մուտքագրեք System.halt() հրամանը։

Կոդը ֆայլում. .exs և .ex ընդլայնումները

Իրական ծրագրերում կոդը, իհարկե, պահվում է ֆայլերում։ Elixir-ում ֆայլերն ունենում են երկու ընդլայնում, և տարբերությունը կարևոր է հասկանալ հենց սկզբից․

Քանի դեռ սովորում ենք, մեզ լիովին բավական է .exs ընդլայնումը։ Ստեղծենք hello.exs ֆայլը հետևյալ պարունակությամբ՝

IO.puts("Hello world")

Գործարկենք այն elixir հրամանով՝

$ elixir hello.exs
Hello world

Փակագծերը պարտադիր չեն, բայց խորհուրդ են տրվում

Elixir-ում ֆունկցիա կանչելիս փակագծերը կարելի է բաց թողնել․ հետևյալ երկու տողերը միանգամայն համարժեք են՝

IO.puts("Hello world")
IO.puts "Hello world"

Ժամանակակից Elixir կոդում, սակայն, ընդունված է փակագծեր օգտագործել․ դա կոդը դարձնում է ավելի միանշանակ ու ընթեռնելի։

Մեկնաբանություններ

Մեկնաբանությունը սկսվում է # նշանով և շարունակվում մինչև տողի վերջը։ Elixir-ում բազմատող մեկնաբանության հատուկ սինթաքս չկա․ եթե մեկնաբանությունը երկար է, պարզապես ամեն տող սկսում ենք #-ով՝

# Սա մեկնաբանություն է
# Բազմատող մեկնաբանություն ստանալու համար
# պարզապես մի քանի տող ենք գրում իրար հետևից

IO.puts("Hello") # մեկնաբանությունը կարող է լինել նաև կոդի տողի վերջում

Տողերի ավարտը

Ի տարբերություն C-ի կամ Java-ի, Elixir-ում տողի վերջում ; դնել պետք չէ․ արտահայտությունն ավարտվում է տողի ավարտով։

;-ը, այնուամենայնիվ, գոյություն ունի․ այն թույլ է տալիս մի քանի արտահայտություն գրել նույն տողում՝

IO.puts("Hello"); IO.puts("World!")

Արդյունքը՝

Hello
World!

Գործնականում այս ձևը գրեթե չի օգտագործվում․ ամեն արտահայտություն առանձին տողում գրելը համարվում է լավ ոճ։

Իդենտիֆիկատորներ (identifiers)

Իդենտիֆիկատորները փոփոխականների, ֆունկցիաների և այլ «էությունների» անուններն են։ Elixir-ում դրանք պետք է սկսվեն լատինական փոքրատառով կամ ընդգծման նշանով (_), որից հետո կարող են պարունակել տառեր, թվանշաններ և ընդգծման նշաններ։ Բառերն իրարից բաժանվում են ընդգծման նշանով․ այս ոճը կոչվում է snake_case։

Վավեր իդենտիֆիկատորների օրինակներ՝

sum    user_name    value_2    one_m0re_variable

Ընդգծման նշանով սկսվող անուններ

Ընդգծման նշանով սկսվող անուններն ունեն հատուկ նշանակություն։ Եթե որևէ արժեք մեզ պետք չէ, այն վերագրում ենք _-ին կամ _-ով սկսվող փոփոխականի՝

_unused_value = 42

Ինչո՞ւ է դա կարևոր․ եթե փոփոխականին արժեք վերագրենք, բայց երբեք չօգտագործենք այն, կոմպիլյատորը զգուշացում (warning) կցուցադրի։ _-ով սկսվող անունը կոմպիլյատորին ասում է․ «այո, գիտեմ, որ այս արժեքը չեմ օգտագործում, դա միտումնավոր է»։

Ընդգծման նշանն ունի ևս մեկ կիրառություն․ եթե մոդուլի ֆունկցիայի անունը սկսվում է _-ով, ապա այդ մոդուլը import-ի միջոցով ներմուծելիս այդ ֆունկցիան չի ներմուծվի։ Սա պայմանականություն է՝ ցույց տալու, որ ֆունկցիան նախատեսված է միայն ներքին օգտագործման համար։ Նշենք, որ իսկապես private ֆունկցիաներ ստեղծելու համար Elixir-ն ունի առանձին մեխանիզմ՝ defp, որին կանդրադառնանք մոդուլների մասին հոդվածում։

Ռեզերվային բառեր (reserved words)

Հետևյալ բառերը ռեզերվ են արված լեզվի կողմից և չեն կարող օգտագործվել որպես փոփոխականի, մոդուլի կամ ֆունկցիայի անուն՝

true    false    nil    when    and    or    not    in
fn      do       end    catch   rescue after  else

Նշում։ Որոշ հին ուսումնական նյութերում կարող եք հանդիպել նաև inbits, inlist և xor բառերին։ Դրանք Elixir-ի վաղ տարբերակներից էին և ժամանակակից Elixir-ում այլևս ռեզերվ արված բառեր չեն։

Բացի ռեզերվ արված բառերից, Elixir-ն ունի նաև հատուկ ձևեր (special forms), օրինակ՝ __MODULE__, __DIR__, __ENV__, որոնք կոմպիլյացիայի ժամանակ տրամադրում են տեղեկություն ընթացիկ միջավայրի մասին։ Դրանց մասին կխոսենք ավելի ուշ՝ մոդուլներին ծանոթանալիս։