Mi a szilfa 1. rész

Az első rész a cikk lefedi az alapokat és szintaxis.

hellow WORLD

Írjuk be az első kérelem az Elm. Hozzon létre egy könyvtárat a kérelmet, és futtassa a következő parancsot:

Így fogunk létrehozni html modult. Ezután adjunk hozzá Hello.elm fájlt az alábbi kódot:

Mi változik a könyvtárba, és fut:

Meg kell látni a következő:

Bár nem fogunk figyelni vorning hiányzó Kommentártípus fő-, mi lesz később.

Nézzük meg, hogy mit teszünk.

Az Elm van külön importálása a modulokat szeretnénk használni. Ebben az esetben használjuk HTML modult.

Ez a modul egy sor funkcióval rendelkezik html. Fogjuk használni .text. így importálni a funkció az aktuális névterek segítségével tesszük.

Front-end alkalmazások kiindulni Elm fő funkciója hívást. amely visszaadja az elem az oldal megjelenítéséhez. Ebben az esetben - HTML elem generált szöveget funkciót.

Elm reaktor

Csapat szil reaktor létrehoz egy szerver, amely lefordítja Elm kódot a légy. A reaktor hasznos az alkalmazások, amelyek nem zavarja sokat a konfiguráció az összeállítási folyamat. Mindazonáltal a reaktor megvannak a maga korlátai, így később jutunk, hogy a saját összeszerelés folyamata.

jelentős típusok

Kezdjük a sort:

Elm használ operátor (++) az összefűzés. Megjegyzendő, hogy mindkét vonalon megőrzik alakjukat hozzáadása előtt -, amikor hozzá «szia» és a «világ» nem lesz hiányos.

Semmi különös, a számítások:

Basics funkciók

Tekintsük az alapokat a nyelvi szintaxis, hogy megtudjuk, a funkciók, funkció aláírást részleges alkalmazása Funky és a cső-operátor.

Tekintsük az Elm:

Az első sorban - egy példa az aláírás funkciót. Aláírás nem szükséges Elm, de használata ajánlott, mivel ez ad egyértelműség kívánt funkciót.

Add hozzá ezt a függvény két egész szám (Int -> Int), és visszatér a másik értéke (a harmadik -> Int).

Következő látjuk a funkció a test - x + y - ami egyszerűen visszaadja az összeget a két paraméter.

Nevezhetjük ezt a funkciót, mint ez:

csoportosítás konzolok

Ha azt akarjuk, hogy hívja a funkció, átadva azt az eredményt más funkciót, akkor kell használni, zárójelben a csoport hívás:

Itt szakadék március 12. add eredményt továbbítjuk a második paraméter.

Összehasonlításképpen, sok nyelven, úgy nézne ki:

részleges alkalmazása

Az Elm tudjuk venni a funkció, például, hozzáadjuk a fenti példa, és hogy hívják átadásával egyetlen paramétert, azaz adjunk hozzá 2.

Ez a függvény eltérő értéket 2. kötve, mint az első érv. Calling ezt a funkciót vissza fog térni a második érv 2 + értéke az érv:

Az aláírás funkciók, például összeadást. Int -> Int -> Int. akkor nézd másrészt - ez egy olyan funkció, hogy vesz egy egész szám, és visszatér egy másik funkció. A kapott függvény egy több egységet, és visszaadja az eredményt.

Részleges alkalmazás nagyon hasznos, Elm, mivel Lehetővé teszi, hogy a kód olvashatóbbá, és lehetővé teszi, hogy adja át az állami funkciók között az alkalmazásban.

Pipe üzemben

Mint a fentiekből kiderül, hogy lehetséges, hogy a hívásokat funkciók, mint ez:

Ez egy primitív példát, de elképzelhető egy bonyolultabb:

Ez alapján részleges alkalmazása. Ebben a példában az érték három továbbítjuk részben alkalmazott funkciók szaporodnak 2. Ennek eredménye viszont továbbították egy másik részleges alkalmazás funkció adjunk hozzá 1.

A cső üzemeltető átírhatjuk a komplex példa a fent valahogy így:

További információ a funkciók

változó típusok

Tekintsük az az aláírás:

Ez a feltételezett függvény egy karakterláncot, és visszaadja egy sor húrok és az index a tömb, amely megtalálható a telt húr vagy -1. ha nem tudta megtalálni.

De mi van, ha van egy sor egész? Azt nem tudja használni ezt a funkciót. Ugyanakkor tudjuk, hogy ezt a funkciót a generalizált (általános), olyan változók, mint a vagy helyettesítő (stand-in) helyett bizonyos típusú változók.

Cseréje után a zsinórt a. aláírás most azt jelenti, hogy indexOf értéket vesz bármilyen típusú, és egy sor azonos típusú a. és visszatér egy egész szám. Mindaddig, amíg a típusok megegyeznek, a fordító elégedett lesz. Nevezhetjük a indexOf string és tömb string vagy Int és kitűnő Int. és működni fog.

Ugyanígy a funkció lehet általánosabb. Mi lehet több változó, úgy mint:

Ez a függvény egy tuple (tuple) A és B típusú. és b, és visszaad egy tuple. Mindezen kihívások érvényesek:

Funkcionál érvek

  • Vesz egy függvény: rész (Int -> karakterlánc)
  • Listája egészek
  • Visszaadja sztringlistát

Mi érdekli egy része (Int -> string). Azt mondja, hogy a funkció megfelelő aláírás (Int -> string) kell átvinni.

Például, a toString standard könyvtár egy ilyen funkció. Ezért tudjuk hívni a térkép funkció, mint ez:

De Int és a String túl konkrét. Ezért a legtöbb aláírás fog kinézni:

Ilyen funkció mapit listát a listán b. Nem érdekel, mit a és b, a legfontosabb, hogy közvetíti a függvény az azonos típusú.

Például olyan funkciókkal, aláírások:

Mi okozhat generalizált térkép, mint ez:

Ha a kifejezés

Ha szükségünk van elágazás, akkor használja a ha-kifejezést:

Kulcsszavak, ha majd mást használnak külön feltételek és két ágra, így nem kell fogszabályozó.

Elm nincs fogalma az „igazság”, így a számok, karakterláncok, listákat nem lehet használni, mint a logika értékeket. Ha megpróbáljuk Ehhez Elm azt mondja, hogy kell használni ezeket a logikai értékeket.

Írj egy függvényt, amely megválaszolja, hogy a továbbított szám nagyobb, mint 9000:

A backslash a REPL lehetővé teszi számunkra, hogy megtörjük a kódot több vonal, amit használni over9000 funkció felett. Sőt, a legjobb gyakorlat - mindig hordozzák a test egy függvény az alábbi sort, ez a kód több egyhangú és könnyebben olvasható.

List tartalmazhat több értékek kell lennie az azonos típusú. Néhány példa, hogy használja néhány könyvtári funkciók:

Ismét - minden elemét a listából kell tartozniuk az azonos típusú.

Rekordcsoportok - még egy hasznos adat struktúra. A tuple tartalmazhat rögzített számú értékek, és bármilyen érték lehet bármilyen típusú. Tipikus alkalmazások -, hogy visszatérjen több értéket a függvény. Ez a függvény egy nevet, és visszaad egy üzenetet a felhasználó:

Célszerű lehet, de a bonyolultsága dolgokat, gyakran jobb a rekordokat.

Tehát mi is létrehozhatunk egy felvétel segítségével merevítések és címmezőkre a ponton át. Elm is lehetősége van utalva a felvétel, ami működik, mint egy függvény. Készüljünk a változó nevét ponton, azt mondják, hogy „kap a mező értéke az azonos nevet.” Ez azt jelenti, hogy a .name - olyan funkció, amely megkapja az értéket a név mező bejegyzést.

Amikor a használó rekordok funkciókat tudjuk használni mintaegyezési, hogy egyszerűsítse az életét?

Ez azt jelenti, tudjuk hárítani bejegyzést, ha van életkor terén. amely tartalmaz egy olyan számot.

Szintén gyakran kell frissíteni az adatokat az eredménye:

Fontos megjegyezni, hogy nem termel romboló frissítéseket. Amikor frissíteni minden területen rekordot számlát, mi, sőt, hozzon létre egy új bejegyzést, és nem írja felül a régit. Elm nem olyan hatékonyan, a közös adatok, amennyiben lehetséges. Ha frissíti az egyik a tíz területeken, az új bejegyzés megosztja az értékeket a maradék kilenc mezőket az eredeti felvétel.

Összehasonlítva tárgyak és nyilvántartások

  • Nem lehet hivatkozni egy olyan területen, amely nem létezik
  • Nem mező nem lehet null (meghatározatlan. W), vagy tartalmaznak null
  • Nem hozhat létre rekurzív bevitellel, ezt vagy én.

Elm ösztönzi a szigorú szétválasztását az adatok és a logika, és a képessége, hogy ezt. elsősorban szétválasztására használnak ilyen rendellenességek. Ez egy gyakori probléma, az összes objektum-orientált nyelvek Elm szándékosan kikerüli.

Bejegyzések is támogatja a strukturális gépelési, ami azt jelenti, hogy fel lehet használni minden helyzetben mindaddig, amíg a kívánt területen létezik. Ez megadja azt a rugalmasságot megbízhatóság veszélyeztetése nélkül.

Import és modulok

Az Elm kívánunk egy modult a kulcsszó import:

Így tettünk import HTML modult a standard könyvtár. Ezt követően, tudjuk használni a funkcióit és típusait ez a modul, a teljes elérési utat:

Azt is, hogy a modul import és kezet adott funkciók és típusok:

div most a jelenlegi körét. Ezért nevezhetjük közvetlenül:

Mi is tesz minden a tartalom a modul:

Akkor tudjuk használni bármilyen típusú függvény és a modul közvetlenül. De ez nem ajánlott megtenni, mert ez ahhoz vezet, hogy a kétértelműség és az esetleges csomópontok a modulok között.

Modulok és típusok az azonos nevű

A több modul azonos nevű exportált típusok. Például a HTML modul tartalmaz típus html. és a modul Feladat - típusú feladat.

Ezért ezt a funkciót, amely visszaadja a HTML elem:

Az első esetben, mi import csak html modul, és használja a teljes elérési utat Html.Html.

Második - leleplezni html html modul típusát. majd ezt a fajta közvetlenül.

Fő - a modul nevét. felfedve (..) azt jelenti, hogy azt akarjuk, hogy az összes funkciót és típusú ezt a modult. Elm számít, hogy ez a modul Main.elm fájlt. azaz fájl neve megegyezik a modult.

Mi lehet egy bonyolultabb szerkezet a fájlokat az alkalmazás. Például, a játékosok / Utils.elm fájlt kell a következő nyilatkozatot teszi:

modul Players.Utils tesszük (..)

Importálni ezt a modult bárhol a kérelmet, akkor:

Union típusú

Elm, Union típusú használják sok mindent, mert a rendkívüli rugalmasságot. Union típus a következő:

Válasz lehetnek igen. vagy a Nem Union típus hasznos hozza a kódot többet jelent, mint egy általánosítás. Például, a függvény ami a következőképpen:

Vehet Igen vagy Nem a pórusok az az érv, például válaszoljon Igen - a megfelelő hívást.

Union típusok is nevezik címkék Elm.

tartalom

Union típusú adatokat tartalmazhatnak belül:

Ebben az esetben a címke Egyéb tartalmazni fog egy bizonyos karaktersorozatot. Mi lehet válaszolni, hogy hívja, mint ez:

Be kell használni, zárójelben, különben Elm venni azt a átviteli függvénye két érv válaszolni.

a kivitelező

Nézzük meg, hogyan rögzítse az adatokat a Más:

Úgy néz ki, mint egy hívás Egyéb funkciók. Union típusú viselkednek funkciókat. Például, típus:

Mi is létrehozhatunk egy üzenet tag, mint ez:

Tudjuk használni részleges alkalmazása, valamint a szokásos funkciók. Általában kapott függvény nevezzük kivitelező, mert tudjuk használni őket, hogy építsenek egy teljes másolat, azaz az Üzenet. hogy (1. üzenet „Hello”).

fészkelő

Nagyon gyakori fészkelő Unió típusok:

Akkor hívja a funkció nem reagál. amely elvárja Válasz. mint ez:

Ön is használja változók, mint típusok in Union:

Ez válasz. amely adatokat tartalmazhatnak különböző típusú, például Int. Húr.

Például reagálnak függvény így néz ki:

Itt kijelentjük, hogy olyan típusú legyen Int. Segítségével aláírás válasz Int.

Így tudjuk válaszolni, hogy hívja a következő:

De nem tud hívni, hogy válaszoljon (Egyéb „Hello”), mert az arra adott válasz arra számít, egy egész életbe.

tipikus yuzkeys

Az egyik lehetséges alkalmazási módja a szakszervezeti típusú - átviteli értékek, amelyek tartoznak egy adott készlet.

Például egy tipikus webes alkalmazás, léteznek olyan intézkedések, amelyek elvégezhető egy személy vagy maga az alkalmazás, például a tagok betöltésekor a felhasználó hozzáadása, eltávolítja a felhasználót, stb Ezen intézkedések némelyike ​​végezhet adatokat.

Általában használni erre unió típusok:

Más nevek típusú (Type álnevek)

Az Elm alias típusok, mint a neve is mutatja - olyan álneveket mindenféle dolgokat. Például, a nyelvet a típusú Int és a String. Tudjuk beceneveket őket:

Ezért hoztunk létre egy pár fajta álnevek ez csak azt mutatja, hogy milyen típusú standard könyvtár. Ez kényelmes, mert, amelynek egy ilyen funkció:

Mi lehet átírni, mint ez:

Így sokkal egyértelműbb, hogy pontosan mit is működik.

Felbontású felvétel az Elm így néz ki:

Ha szükség van egy funkció, hogy vesz egy rekordot, akkor írna ő aláírása a következő:

Elég hosszadalmas, de álnevek hasznos lehet itt:

Így hozunk létre egy alias Player. ami azt jelzi, a meghatározása a felvételt, és akkor ezt a fedőnevet használja a funkciót aláírást.

Constructors

Más nevek típusokat lehet használni, mint a kivitelező funkciók. Ie mi is létrehozhatunk egy példányt a felvétel, álnéven függvényében.

Itt létrehoztunk egy alias Player. Ezután hívjuk a játékos függvényében két érv, amely visszaadja nekünk a rekordot a megfelelő attribútumokat. Megjegyezzük, hogy a sorrendben az érveket, hogy melyik értékek lesz attribútumokat.

Üres tuple - () - nevezett egység. Ő annyira gyakori, hogy megérdemel némi magyarázat.

Tekintsük alias típusú változó típusa (képviseli):

Mi is létrehozhatunk egy függvényt, amely elvárja, hogy az attribútum Message body String, mint ez:

Vagy funkció, amely elvárja Üzenet, akinek a testét - a számok listája:

De mi a helyzet funkciókat, amelyek nem igényelnek egy értéket a szervezetben. Ehhez használjuk a készüléket, amely jelzi, hogy a szervezet az üzenet (test) üresnek kell lennie:

Ez a függvény egy üzenetet egy üres testet. Ez nem olyan érték, és az üres.

Így a berendezés típusától, általában közvetlenül helyőrzőjeként üres értékekkel.

Esettanulmány - típusú feladat. Amikor használja Feladat. készülék nagyon gyakran találkozunk.

Egy tipikus feladat (feladat) hibát tartalmaz, és az eredmény:

  • Néha szükség van egy feladat, egy hiba, amely figyelmen kívül hagyhatja: Feladat () eredményezhet
  • Vagy figyelmen kívül hagyják az eredmény: Feladatok hiba ()
  • Vagy a kettő kombinációja: Feladat () ()