Ако сте чели публикации в блогове, хакерски теми за новини, любимите ви туитове на разработчици или слушате подкасти, на този етап вероятно сте чували за езика за програмиране Elixir. Езикът е създаден от Хосе Валим, добре познат разработчик в света с отворен код. Може да го познавате от рамката на Ruby on Rails MVC или от рубинните скъпоценни камъни, върху които той и неговите колеги от Plataformatec са работили през последните няколко години.
Според Хосе Валим, Еликсир е роден през 2011 г. . Той имал идеята да изгради новия език поради липсата на добри инструменти за решаване на проблемите със съвпадението в рубинския свят. По това време, след като прекарва време в изучаване на съвпадение и разпределя фокусирани езици, той открива два езика, които му харесват, Erlang и Clojure, които работят в JVM. Харесваше всичко, което виждаше на езика Erlang (Erlang VM) и мразеше нещата, които не виждаше, като полиморфизъм, метапрограмиране и атрибути на разширяемост на езика, в които Clojure беше добър. И така, Elixir е роден с това предвид, за да има алтернатива на Clojure и динамичен език, който работи във виртуалната машина Erlang с добра поддръжка за разширяемост.
Еликсир описва себе си като динамичен, функционален език с неизменяемо състояние и основан на актьор подход към паралелността, предназначен за изграждане на мащабируеми и поддържани приложения с прост, модерен и подреден синтаксис. Езикът работи във виртуалната машина Erlang, устойчива на бой, високопроизводителна и разпределена виртуална машина, известна със своите ниски характеристики на латентност и толерантност към грешки.
Преди да видим някакъв код, струва си да кажем, че Elixir е бил приети от общността което нараства. Ако искате да научите Elixir днес, лесно ще намерите книги, библиотеки, конференции, срещи, подкасти, публикации в блогове, бюлетини и всякакви учебни източници, както е прието от създателите на Erlang.
Нека видим малко код!
Инсталирането на Elixir е супер лесно във всички основни платформи и е еднолинеен в повечето от тях.
Elixir се предлага на Arch Linux чрез официалните хранилища:
pacman -S elixir
Инсталирането на Elixir в Ubuntu е малко сложно. Но въпреки това е достатъчно лесно.
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb apt-get update apt-get install esl-erlang apt-get install elixir
Инсталирайте Elixir в OS X, като използвате Homebrew .
brew install elixir
След като инсталацията приключи, е време да отворите черупката си. Ще прекарате много време в черупката си, ако искате да се развиете в Еликсир.
Интерактивната обвивка на Elixir или IEx е REPL - (Прочетете Evaluate Print Loop), където можете да изследвате Elixir. Можете да въведете изрази там и те ще бъдат оценени, което ви дава незабавна обратна връзка. Имайте предвид, че вашият код наистина е оценен и не е компилиран, така че не забравяйте да стартирате профилиране или бенчмаркове в черупката.
Има важно нещо, което трябва да знаете, преди да започнете IEx REPL - как да излезете от него.
Вероятно сте свикнали да удряте CTRL+C
за да затворите програмите, изпълнявани в терминала. Ако натиснете CTRL+C
в IEx REPL ще отворите менюто Break. Веднъж в менюто за почивка можете да натиснете CTRL+C
отново, за да излезете от черупката, както и да натиснете a
.
Няма да се впускам във функциите на менюто за почивка. Но нека видим няколко помощници на IEx!
IEx предоставя куп помощници , за да се изброят всички от тях, напишете: h()
.
И ето какво трябва да видите:
Това са едни от любимите ми, мисля, че ще бъдат и ваши.
h
както току-що видяхме, тази функция ще отпечата помощното съобщение.h/1
което е същата функция, но сега очаква един аргумент.Например, когато искате да видите документацията на String
strip/2
метод, който можете лесно да направите:
Вероятно вторият най-полезен IEx помощник, който ще използвате, докато програмирате в Elixir, е c/2
, който компилира даден файл на еликсир (или списък) и очаква като втори параметър път за записване на компилираните файлове в .
Да предположим, че работите в едно от http://exercism.io/ упражненията Elixir, упражнението Anagram.
Значи сте внедрили Anagram
модул, който има метода match/2
във файла anagram.exs. Като доброто разработчик вие сте, написали сте няколко спецификации, за да сте сигурни, че всичко работи както се очаква.
Ето как изглежда текущата ви директория:
Сега, за да стартирате тестовете си срещу модула Anagram, трябва да стартирате / компилирате тестовете.
Както току-що видяхте, за да компилирате файл, просто извикайте elixir
изпълним файл, преминаващ като път на аргумент към файла, който искате да компилирате.
Сега да кажем, че искате да стартирате IEx REPL с модула Anagram, достъпен в контекста на сесията. Има две често използвани опции. Първото е, че можете да изискате файла, като използвате опциите -r
, нещо като iex -r anagram.exs
. Вторият, можете да компилирате направо от IEx сесията.
в какво е написано linux
Просто, просто така!
Добре, ами ако искате да прекомпилирате модул? Трябва ли да излезете от IEx, да го стартирате отново и да компилирате файла отново? Не! Ако имате добра памет, ще запомните, че когато изброихме всички помощници, налични в IEx REPL, видяхме нещо за командата за прекомпилиране. Нека да видим как работи.
Забележете, че този път сте предали като аргумент самия модул, а не пътя на файла.
Както видяхме, IEx има куп други полезни помощници, които ще ви помогнат да научите и разберете по-добре как работи една програма Elixir.
Има два вида числа. Цели числа с произволен размер и числа с плаваща запетая.
Целите числа могат да бъдат записани в десетичната основа, шестнадесетичната, осмичната и двоичната.
Както в Руби , можете да използвате долната черта, за да разделите групи от три цифри, когато пишете големи числа. Например можете да оправите сто милиона по този начин:
100_000_000
Октална:
0o444
Шестнадесетичен:
0xabc
Двоичен:
0b1011
Floare са IEEE 754 двойна прецизност. Те имат 16 цифри с точност и максимален експонентен показател около 10308.
Плувките се пишат с десетична запетая. Трябва да има поне една цифра преди и след точката. Можете също да добавите последващ експонент. Например 1.0, 0.3141589e1 и 314159.0-e.
как да използвам влизане в python
Атомите са константи, които представляват имена. Те са неизменни стойности. Пишете атом с водещо двоеточие :
и поредица от букви, цифри, долни черти и при знаци @
. Можете също да ги напишете с водещо дебело черво :
и произволна последователност от символи, затворени с кавички.
Атомите са много мощен инструмент, те се използват за препращане към ерланг функции, както и клавиши и методи на Еликсир.
Ето няколко валидни атома.
:name, :first_name, :'last name', :===, : [email protected] _question?
Разбира се, булевите са истински и фалшиви стойности. Но хубавото при тях е в края на деня, те са просто атоми.
По подразбиране низовете в Elixir са UTF-8 съвместим. За да ги използвате, можете да имате произволен брой знаци, затворени от '
или '
. Можете също така да имате интерполирани изрази вътре в низа, както и екранирани символи.
Имайте предвид, че низовете с единични кавички всъщност са списък на двоични файлове.
Като функционален език, Elixir има анонимни функции като основен тип. Един прост начин за писане на функция е fn (argument_list) -> body end
. Но една функция може да има множество тела с множество списъци с аргументи, защитни клаузи и т.н.
Дейв Томас, в Програмиране на еликсир book, предлага да мислим за fn ... end като за кавичките, обграждащи низ от литерал, където вместо да връщаме стойност на низа, ние връщаме функция.
Tuple е неизменяем индексиран масив. Те бързо връщат размера му и бавно добавят нови стойности поради неизменната си природа. Когато актуализирате кортеж, вие всъщност създавате изцяло ново копие на себе си.
Тройките много често се използват като върната стойност на масив. Докато кодирате в Elixir, много често ще виждате това, {:ok, something_else_here}
Ето как пишем кортеж: {?a,?b,?c}
.
Няма да мога да обясня всичко, което трябва да знаете за Pattern Matching, но това, което ще прочетете, обхваща много от това, което трябва да знаете, за да започнете.
Elixir използва =
като оператор на мачове. За да разберем това, ние трябва да научим това, което знаем за =
на други традиционни езици. В традиционните езици операторът за равно е за присвояване. В Elixir операторите equals са за съвпадение на шаблони.
И така, това е начинът, по който работи стойностите в лявата страна. Ако те са променливи, те са обвързани от дясната страна, ако не са променливи, еликсирът се опитва да ги съпостави с дясната страна.
Elixir предоставя начин за винаги принудително съвпадение на шаблона спрямо променливата в лявата страна, пин оператора.
В Elixir Списъците изглеждат като масиви, както го познаваме от други езици, но не са. Списъците са свързани структури, които се състоят от глава и опашка.
Списъците с ключови думи са списък от двойки Tuple.
Просто ги пишете като списъци. Например: [{: един, 1}, 2, {: три, 3}]. Има пряк път за дефиниране на списъци, ето как изглежда: [one: 1, three: 3].
За да извлечете елемент от списък с ключови думи, можете да използвате:
Keyword.get([{:one, 1}, 2, {:three, 3}], :one)
Или използвайте пряк път:
[{:one, 1}, 2, {:three, 3}][:one]
Тъй като списъците с ключови думи са бавни при извличане на стойност, това е скъпа операция, така че ако съхранявате данни, които се нуждаят от бърз достъп, трябва да използвате карта.
Картите са ефективна колекция от двойки ключ / стойност. Ключът може да има всякаква стойност, която искате като ключ, но обикновено трябва да бъде от същия тип. За разлика от списъците с ключови думи, Картите позволяват само един запис за даден ключ. Те са ефективни, докато растат и могат да бъдат използвани в съвпадението на модела Elixir в картите за общо използване, когато имате нужда от асоциативен масив.
Ето как можете да напишете карта:
%{ :one => 1, :two => 2, 3 => 3, 'four' => 4, [] => %{}, {} => [k: :v]}
Elixir е страхотен, лесен за разбиране, има прости, но мощни типове и много полезни инструменти около него, които ще ви помогнат, когато започнете да учите. В тази първа част разгледахме различните типове данни, върху които са изградени програмите на Elixir и операторите, които ги захранват. В следващите части ще се потопим по-дълбоко в света на Еликсир - функционално и едновременно програмиране.
Свързани: Разкопайте ClojureScript за Front-end разработка