Hvis du har lest blogginnlegg, hacker-nyhetstråder, favorittutviklerne dine tweets eller hørt på podcaster, har du sannsynligvis hørt om programmeringsspråket Elixir på dette punktet. Språket ble skapt av José Valim, en kjent utvikler i open source-verdenen. Du kjenner ham kanskje fra Ruby on Rails MVC-rammeverket eller fra utforme og enkle formformede rubinperler som han og hans kolleger fra Plataformatec har jobbet med de siste årene.
I følge José Valim ble Elixir født i 2011 . Han hadde ideen om å bygge det nye språket på grunn av mangel på gode verktøy for å løse samtidighetsproblemene i rubinverdenen. På den tiden, etter å ha brukt tid på å studere samtidighet og distribuert fokuserte språk, fant han to språk han likte, Erlang og Clojure, som kjører i JVM. Han likte alt han så på Erlang-språket (Erlang VM), og han hatet tingene han ikke så, som polymorfisme, metaprogrammering og språkutvidelsesegenskaper som Clojure var god for. Så, Elixir ble født med det i tankene, å ha et alternativ for Clojure og et dynamisk språk som kjører i Erlang Virtual Machine med god utvidelsesstøtte.
Eliksir beskriver seg selv som et dynamisk, funksjonelt språk med uforanderlig tilstand og en aktørbasert tilnærming til samtidighet designet for å bygge skalerbar og applikasjoner som kan vedlikeholdes med en enkel, moderne og ryddig syntaks. Språket kjører i Erlang Virtual Machine, en kampsikker, høy ytelse og distribuert virtuell maskin kjent for sin lave latenstid og feiltoleranseegenskaper.
Før vi ser litt kode, er det verdt å si at Elixir har vært akseptert av samfunnet som vokser. Hvis du vil lære Elixir i dag, vil du enkelt finne bøker, biblioteker, konferanser, møter, podcaster, blogginnlegg, nyhetsbrev og alle slags læringskilder der ute, så vel som det ble akseptert av Erlang-skaperne.
La oss se litt kode!
Installere Elixir er superenkelt i alle større plattformer og er en en-liner i de fleste av dem.
Elixir er tilgjengelig på Arch Linux gjennom de offisielle arkivene:
pacman -S elixir
Installering av Elixir i Ubuntu er litt ryddig. Men det er likevel enkelt nok.
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
Installer Elixir i OS X ved hjelp av Hjemme brygget .
brew install elixir
Etter at installasjonen er fullført, er det på tide å åpne skallet. Du vil tilbringe mye tid i skallet ditt hvis du vil utvikle deg i Elixir.
Elixirs interaktive skall eller IEx er en REPL - (Les Evaluer Print Loop) hvor du kan utforske Elixir. Du kan legge inn uttrykk der, og de vil bli evaluert og gi deg umiddelbar tilbakemelding. Husk at koden din virkelig blir evaluert og ikke kompilert, så sørg for at du ikke kjører profilering eller referanser i skallet.
Det er en viktig ting du trenger å vite før du starter IEx REPL - hvordan du avslutter den.
Du er sannsynligvis vant til å slå CTRL+C
for å lukke programmene som kjører i terminalen. Hvis du treffer CTRL+C
i IEx REPL åpner du pausemenyen. En gang i pausemenyen kan du trykke CTRL+C
igjen for å avslutte skallet og trykke på a
.
Jeg kommer ikke til å dykke inn i pausemenyfunksjonene. Men la oss se noen IEx-hjelpere!
IEx gir en haug med hjelpere , for å liste opp alle skriver du: h()
.
Og dette er hva du bør se:
Det er noen av favorittene mine, jeg tror de også blir dine.
h
som vi nettopp så, vil denne funksjonen skrive ut hjelpermeldingen.h/1
som er den samme funksjonen, men nå forventer den ett argument.For eksempel når du vil se dokumentasjonen til String
strip/2
metoden du enkelt kan gjøre:
Sannsynligvis den nest mest nyttige IEx-hjelperen du skal bruke mens du programmerer i Elixir, er c/2
, som kompilerer en gitt eliksir-fil (eller en liste) og forventer som en annen parameter en bane å skrive de kompilerte filene til .
La oss si at du jobber i en av http://exercism.io/ Elixir-øvelsene, Anagram-øvelsen.
Så du har implementert Anagram
modul, som har metoden match/2
i filen anagram.exs. Som det gode utvikler du er, du har skrevet noen spesifikasjoner for å sikre at alt fungerer som forventet også.
Slik ser din nåværende katalog ut:
Nå, for å kjøre testene dine mot Anagram-modulen, må du kjøre / kompilere testene.
Som du nettopp så, for å kompilere en fil, påkaller du bare elixir
kjørbar som passerer som argumentsti til filen du vil kompilere.
La oss si at du vil kjøre IEx REPL med Anagram-modulen tilgjengelig i øktkonteksten. Det er to vanlige alternativer. Den første er at du kan kreve filen ved å bruke alternativene -r
, noe sånt som iex -r anagram.exs
. Den andre kan du kompilere rett fra IEx-økten.
Enkelt, akkurat sånn!
Ok, hva med om du vil kompilere en modul på nytt? Skal du avslutte IEx, kjøre den igjen og kompilere filen igjen? Nei! Hvis du har et godt minne, vil du huske at når vi listet opp alle hjelpere som er tilgjengelige i IEx REPL, så vi noe om en rekompileringskommando. La oss se hvordan det fungerer.
Legg merke til at du denne gangen passerte selve modulen og ikke filbanen.
Som vi så har IEx en rekke andre nyttige hjelpere som vil hjelpe deg å lære og forstå bedre hvordan et Elixir-program fungerer.
Det er to typer tall. Heltall med vilkårlig størrelse og tall med flytende poeng.
Heltall kan skrives i desimalbase, heksadesimal, oktal og binær.
Som i Rubin , kan du bruke understrek for å skille grupper med tre sifre når du skriver store tall. For eksempel kan du rette hundre millioner slik:
100_000_000
Oktal:
0o444
Hexdecimal:
0xabc
Binær:
0b1011
Floare er IEEE 754 dobbel presisjon. De har 16 nøyaktighetssifre og en maksimal eksponent på rundt 10308.
Flyter skrives med et desimaltegn. Det må være minst ett siffer før og etter punktet. Du kan også legge til en etterfølgende eksponent. For eksempel 1.0, 0.3141589e1 og 314159.0-e.
Atomer er konstanter som representerer navn. De er uforanderlige verdier. Du skriver et atom med et ledende kolon :
og en sekvens av bokstaver, sifre, understrekninger og tegnet @
. Du kan også skrive dem med et ledende kolon :
og en vilkårlig sekvens av tegn som er omsluttet av anførselstegn.
Atomer er et veldig kraftig verktøy, de brukes til å referere til erlang-funksjoner så vel som nøkler og Elixir-metoder.
Her er noen gyldige atomer.
:name, :first_name, :'last name', :===, : [email protected] _question?
Selvfølgelig er booleanere sanne og falske verdier. Men det fine med dem er på slutten av dagen, de er bare atomer.
Som standard er strengene i Elixir UTF-8 kompatibel. For å bruke dem kan du ha et vilkårlig antall tegn omsluttet av '
eller '
. Du kan også ha interpolerte uttrykk inne i strengen, så vel som rømte tegn.
Vær oppmerksom på at enkelt siterte strenger faktisk er en liste over binærfiler.
Som et funksjonelt språk har Elixir anonyme funksjoner som en grunnleggende type. En enkel måte å skrive en funksjon på er fn (argument_list) -> body end
. Men en funksjon kan ha flere kropper med flere argumentlister, vaktklausuler og så videre.
Dave Thomas, i Programmering av eliksir bok, antyder at vi tenker på fn ... slutter som å være sitatene som omgir en streng bokstavelig, hvor vi i stedet for å returnere en strengverdi returnerer en funksjon.
Tuple er en uforanderlig indeksert matrise. De er raske til å returnere størrelsen og sakte til å legge til nye verdier på grunn av sin uforanderlige natur. Når du oppdaterer en tupel, lager du faktisk en helt ny kopi av tupel selvet.
Tuples brukes ofte som returverdien til en matrise. Mens du koder i Elixir vil du ofte se dette, {:ok, something_else_here}
.
Slik skriver vi en tuple: {?a,?b,?c}
.
Jeg vil ikke være i stand til å forklare alt du trenger å vite om Pattern Matching, men det du skal lese dekker mye av det du trenger å vite for å komme i gang.
Elixir bruker =
som en fyrstikkoperatør. For å forstå dette må vi liksom avlære det vi vet om =
på andre tradisjonelle språk. På tradisjonelle språk er lik operatør for oppgave. I Elixir er like operatører for mønstermatching.
Så det er slik det fungerer verdier på venstre side. Hvis de er variabler, er de bundet til høyre side, hvis de ikke er variabler, prøver eliksir å matche dem med høyre side.
Eliksir gir en måte å alltid tvinge mønstermatching mot variabelen på venstre side, pinneoperatøren.
I Elixir ser lister ut som arrays slik vi kjenner det fra andre språk, men det er de ikke. Lister er koblede strukturer som består av et hode og en hale.
Nøkkelordslister er en liste over Tuple-par.
Du skriver dem bare som lister. For eksempel: [{: one, 1}, 2, {: three, 3}]. Det er en snarvei for å definere lister. Slik ser det ut: [en: 1, tre: 3].
For å hente et element fra en nøkkelordliste kan du enten bruke:
Keyword.get([{:one, 1}, 2, {:three, 3}], :one)
Eller bruk snarveien:
[{:one, 1}, 2, {:three, 3}][:one]
Fordi søkeordlister er sakte når du henter en verdi, er det en kostbar handling, så hvis du lagrer data som trenger rask tilgang, bør du bruke et kart.
Kart er en effektiv samling av nøkkel / verdipar. Nøkkelen kan ha hvilken verdi du vil ha som nøkkel, men skal vanligvis være av samme type. Ulike fra søkeordlister tillater Maps bare en oppføring for en gitt nøkkel. De er effektive når de vokser, og de kan brukes i Elixir-mønstertilpasning til generelle kart når du trenger et assosiativt utvalg.
Slik kan du skrive et kart:
%{ :one => 1, :two => 2, 3 => 3, 'four' => 4, [] => %{}, {} => [k: :v]}
Elixir er fantastisk, lett å forstå, har enkle, men kraftige typer og veldig nyttig verktøy rundt det som vil hjelpe deg når du begynner å lære. I denne første delen har vi dekket de forskjellige datatypene Elixir-programmene er bygget på og operatørene som driver dem. I senere deler vil vi dykke dypere inn i Elixirs verden - funksjonell og samtidig programmering.
I slekt: Unearthing ClojureScript for front-end utvikling