Еликсир (програмски језик)
Еликсир (енгл. Elixir, изговор : Еликсир) је функционалан језик. Његовим творцем сматра се Jose Valim, који је овај језик дизајнирао 2011. године. Овај језик је недавно постао изузетно интересантан, нарочито Rubi и Erlang програмерима. Joe Armstrong, један од проналазача Erlanga, подржао је и похвалио овај новонастали језик. При креирања програмског језика Еликсир велики утицај у смислу синтаксе имао је језик Руби. У Еликсиру не постоје објекти и класе, већ се све заснива на функцијама и рекурзији. Такође, Еликсир преузима многе концепте из програмских језика као што су Clojure, Haskell, и Python. Овај програмски језик дизајниран је за изградњу скалабилних и лако одрживих апликација, једноставне је и модерне синтаксе. Много занимљивих пројеката у вези са роботиком је рађено у Елиxиру због његове функционалне природе, изузетног рада у диструбираним системима и толеранције на грешке, која је на јако високом нивоу. Такође се успешно користи у развоју веба и у домену уградног софтвера. Језик Еликсир ради уз подршку Ерланг виртуалне машине која је карактеристична по минималном кашњењу и завидној толеранцији на грешке.
Компатибилност са Ерланг-ом
[уреди | уреди извор]Еликсир ради на Ерланговој виртуалној машини. Ерланг је језик који се користи на Ериксоновим телекомуникацоним системима и јако је скалабилан и сигуран. Језик Ерланг и Еликсир деле исте бајт кодове, што омогућава Еликсиру да позове било коју Ерланг функцију.
iex> :erlang.localtime
{{2013, 10, 22}, {0, 14, 29}}
Позив ерланг.лоцалтиме је позив Ерланг функције. У Ерлангу, функција ће бити покренута
erlang: localtime ()
.
Еликсир програмер може такође да користи било коју Ерлангову библиотеку.[1][2]
IEX
[уреди | уреди извор]Еликсир интерактивна конзола iex (енгл. Elixir's interactive shell) је главни модул за интеракцију са програмским језиком Еликсир. Оно што је команда irb у програмском језику Руби то је iex у Еликсиру. Iex подржава команду h() која пружа помоћ програмеру и даје приступ документацији. Да бисмо приступили Enum модулу укуцаћемо h(Enum) и добити потребне информације, а уколико желимо да приступимо функцији Enum модула потребно је укуцати h(Enum.nazivfunkcije).[2] [3]
Карактеристике језика
[уреди | уреди извор]Скалабилност
[уреди | уреди извор]Еликсир код извршава се у нитима које су изоловане и међусобно размењују информације путем порука.
current_process = self()
spawn_link(fn -> send current_process, {:msg, "zdravo svete"}
end)
receive do
{:msg, contents} -> IO.puts contents
end
Није неуобичајно да се стотине хиљада процеса обрађују паралелно у истој машини. Добра изолација процеса омогућава да их сакупљач отпадака лако уклони, што утиче на ефикасност извршавања и омогућава коришћење свих ресурса (вертикално скалирање).
Процеси су такође у стању да комуницирају са другим процесима који раде на различитим машинама у истој мрежи. Ово омогућава програмеру да спроводи рад на више чворова истовремено (хоризонтално скалирање).[4]
Типови у програмском језику Еликсир
[уреди | уреди извор]Основни типови у програмском језику Еликсир су :
- целобројни тип
- реални тип
- логички тип
- атоми
- ниске
- листе
- торке
iex> 1 # celobrojni tip
iex> 0x1F # celobrojni tip
iex> 1.0 # realni tip
iex> true # logički tip
iex> :atom # atom
iex> "elixir" # niska
iex> [1, 2, 3] # lista
iex> {1, 2, 3} # torka
Посматрајмо следећи код :
iex> 1 + 2
3
iex> 5 * 5
25
iex> 10 / 2
5.0
Приметимо да 10/2 враћа реалан број 5,0 уместо целог броја 5. Ово је очекивано јер у Еликсиру оператор / увек враћа float (реалан број). Ако желимо да добијемо цео број или остатак при дељењу, можемо позвати функције div или rem:
s
iex> div(10, 2)
5
iex> div 10, 2
5
iex> rem 10, 3
1
Приметимо да заграде нису потребне да би се позвала функција.
Реалан тип
[уреди | уреди извор]Реалан (float) тип захтева тачку иза које се наводи најмање једна цифра, а такође подржава и слово e као експонент помоћу којег се представља реалан број:
iex> 1.0
1.0
iex> 1.0e-10
1.0e-10
Реални тип у Еликсиру заузима 64-бита и двоструке је тачности. Функција round() се користи да би се добио најближи цео број у датом floatu, а функција trunc() да се добије целобројни део float податка.
iex> round(3.58)
4
iex> trunc(3.58)
3
Логички типови
[уреди | уреди извор]Логички тип података у Еликсиру мозе имати вредност тачно (True) или нетачно (False)
iex> true
true
iex> true == false
false
Атоми
[уреди | уреди извор]Атоми су константе чије је име уједно и њихова вредност :
iex> :pas
:pas
iex> :pas == :mačka
false
У логичком типу података кључне речи true и false су у ствари атоми :
iex> true == :true
true
iex> is_atom(false)
true
iex> is_boolean(:false)
true
Ниске(Стрингови)
[уреди | уреди извор]Стрингови у Еликсиру се пишу између двоструких наводника.
iex> "papagaj"
"papagaj"
Стрингови се могу штампати помоћу функције IO.puts из IO модула.
iex> IO.puts "pepa\nprase"
pepa
prase
:ok
Дужину ниске одређујемо помоћу функције String.length().
iex> String.length("zdravo")
5
Повезане листе
[уреди | уреди извор]Листе се у програмском језику Еликсир представљају уз помоћ заграда [ ]. Чланови листе могу бити било ког типа.
iex> [1, 2, true, 3]
[1, 2, true, 3]
Две листе могу да се сабирају и одузимају коришћењем ++ и -- оператора:
iex> [1, 2, 3] ++ [4, 5, 6]
[1, 2, 3, 4, 5, 6]
iex> [1, true, 2, false, 3, true] -- [true, false]
[1, 2, 3, true]
Торке
[уреди | уреди извор]Торке се дефинишу уз помоћ витичастих заграда { }.[5]
iex> {:ok, "Marina"}
{:ok, "Marina"}
iex> tuple_size {:ok, "Marina"}
2
Основни оператори
[уреди | уреди извор]У претходном делу, видели смо да Еликсир подржава аритметичке операторе +, -, *, /, као и функције div и rem које служе за количник и остатак при дељењу код целобројних типова.
Стрингови се надовезују уз помоћ оператора <>:
iex> "papa" <> "gaj"
"papagaj"
Еликсир такође обезбеђује три логичка оператора : or, and и not. Ови оператори очекују логичку вредност (true или false) као њихов први аргумент.
iex> true and true
true
iex> false or is_atom(:primer)
true
Задавање вредности које нису логичког типа ће избацити изузетак.
iex> 1 and true
** (ArgumentError) argument error: 1
Поред ових логичких оператора, Еликсир користи и ||, && и ! који се могу применити на било које типове. За ове операторе, све вредности осим false и nil ће бити true :
# or
iex> 1 || true
1
iex> false || 11
11
# and
iex> nil && 13
nil
iex> true && 17
17
# !
iex> !true
false
iex> !1
false
iex> !nil
true
Еликсир такође користи операторе поређења ==, !=, ===, !==, <=, >=, <, и > који враћају резултат логичког типа (true и false).
iex> 1 == 1
true
iex> 1 != 2
true
iex> 1 < 2
true
Разлика између == и === је у томе што је други строжији при поређењу целог и реалног типа.
iex> 1 == 1.0
true
iex> 1 === 1.0
false
У Еликсиру можемо да поредимо два различита типа података:[6]
iex> 1 < :atom
true
Оператор једнакости
[уреди | уреди извор]У овом поглављу ћемо показати да је = оператор једнакости у Еликсиру и како га користимо у структури података.
iex> x = 1
1
iex> x
1
iex> 1 = x
1
iex> 2 = x
** (MatchError) no match of right hand side value: 1
Приметимо да је 1 = x валидан израз, а то важи јер су лева и десна страна једнаке 1. Променљива се може доделити само са леве стране, а када се променљива нађе са десне стране, оператор = проверава једнакост. Када једнакост није испуњена исписаће се 'МатцхЕррор' .
iex> 1 = unknown
** (CompileError) iex:1: undefined function unknown/0
Пошто променљива ункноwн није претходно дефинисана, Еликсир ће покушати да позове функцију под називом unknown , али таква функција не постоји.
Оператор једнакости се не користи само за проверу једнакости над једноставним променљивим, него је користан и за разлагање сложенијих структура података. На пример, можемо га употребити и над торкама.
iex> {a, b, c} = {:student, "Paja", 42}
{:hello, "world", 42}
iex> a
:student
iex> b
"Paja"
Оператор једнакости ће избацити грешку ако стране нису упоредиве, на пример, ако су торке различите величине:
iex> {a, b, c} = {:hello, "world"}
** (MatchError) no match of right hand side value: {:hello, "world"}
I такође ако поредимо различите типове података:[7]
iex> {a, b, c} = [:hello, "world", 42]
** (MatchError) no match of right hand side value: [:hello, "world", 42]
Референце
[уреди | уреди извор]- ^ Елиxир сцхоол https://elixirschool.com/. Приступљено 05. 12. 2016. Недостаје или је празан параметар
|title=
(помоћ) - ^ а б https://www.sitepoint.com/elixir-love-child-ruby-erlang/.
|first1=
захтева|last1=
у Authors list (помоћ); Недостаје или је празан параметар|title=
(помоћ); Спољашња веза у|work=
(помоћ); Недостаје или је празан параметар|url=
(помоћ); - ^ „Архивирана копија”. Elixir-lang. Архивирано из оригинала 01. 12. 2016. г. Приступљено 05. 12. 2016.
- ^ „Архивирана копија”. Elixir-lang. Архивирано из оригинала 18. 04. 2012. г. Приступљено 05. 12. 2016.
- ^ Elixir-lang http://elixir-lang.org/getting-started/basic-types.html. Приступљено 05. 12. 2016. Недостаје или је празан параметар
|title=
(помоћ) - ^ Elixir-lang http://elixir-lang.org/getting-started/basic-operators.html. Приступљено 05. 12. 2016. Недостаје или је празан параметар
|title=
(помоћ) - ^ Elixir-lang http://elixir-lang.org/getting-started/pattern-matching.html. Приступљено 05. 12. 2016. Недостаје или је празан параметар
|title=
(помоћ)
Овај чланак је започет или проширен кроз пројекат семинарских радова. Потребно је проверити превод, правопис и вики-синтаксу. Када завршите са провером, допишете да након |проверено=. |