Andrew Chalkley
írja január 31-én, 2013
CoffeeScript egyre népszerűbb az elmúlt pár évben elfogadása miatt a csomópont.js és Rails közösségek. Vessünk egy pillantást arra, hogy miért vált ez a nyelv, amikor az emberek Javascriptet akarnak írni alkalmazásaikba.
- mi az a CoffeeScript?
- miért CoffeeScript?
- A CoffeeScript telepítése
- az OS X
- A Windows
- és végül
- parancssor használata
- Futtatás és fordítás
- figyelem
- figyelő
- fájlok összekapcsolása
- REPL
- szövegszerkesztő kiemelése
- TextMate
- Sublime Text 2
- A jó dolgok, más néven a szintaxis
- változók
- karakterláncok
- függvények
- tömbök
- objektumok
- tartományok
- Splat
- osztályok
- Példányváltozók
- osztály öröklés
- Általános szintaxis
- Existential Operator
- megértések
- következtetés
mi az a CoffeeScript?
a CoffeeScript egy olyan nyelv, amelyet JavaScript-re fordítanak. Kód be .a coffee fájlokat nem értelmezik futási időben, mint a JavaScript, de össze vannak állítva .js fájlok.
hogy JavaScript-et írsz-e a csomóponthoz.js vagy bármely adott böngésző végrehajtását, CoffeeScript lehet írni minden ízek JavaScript.
miért CoffeeScript?
a múltban a JavaScriptnek nem volt a legnagyobb hírneve a 90-es évek és a 2000-es évek elején a copy-and-paste mentalitás miatt, úgy tűnt, hogy csak kevesen tudták, mi folyik itt. Úgy tekintettek rá, mint egy nem túl “komoly” nyelvre. A JavaScript mint nyelv azonban sokat kínál, és néhány szuper funkcióval rendelkezik.
a CoffeeScript a JavaScript erőteljes funkcióit használja anélkül, hogy megtanulná a JavaScript kevésbé ismert jellemzőit azáltal, hogy “szintaktikai cukrot” ad hozzá a JavaScript-hez. A CoffeeScript nem rendelkezik fél-kettőspontokkal és göndör zárójelekkel, hasonló szintaxissal, mint a Python és a Ruby.
Ez azt jelenti, hogy kevesebb kódot írhatsz és gyorsabban végezhetsz dolgokat. Ez megkönnyíti az olvasást és a karbantartást is.
a CoffeeScript által használt optimalizálások miatt, amikor lefordítják, az eredményül kapott JavaScript ugyanolyan teljesítményű, vagy bizonyos esetekben még jobban teljesít a kézzel írt kódhoz képest.
sokat tanulhat a JavaScript-ről, ha megnézi azt a Javascriptet, amelyre a CoffeeScript lefordít. Ha van valami új, amit ott lát, kutassa meg, és nézze meg, miért fordít így a CoffeScript, nem pedig azt, amit szokott látni.
A CoffeeScript telepítése
telepítsük a CoffeeScript-et, hogy követni tudja. A CoffeeScript egy csomópont.js csomag. Tehát a csomóponttól függ.js és a csomagkezelő (NPM).
az OS X
csomóponton.a js telepíthető a Homebrew, az OS X nyílt forráskódú csomagkezelője segítségével.
győződjön meg róla, hogy a Homebrew naprakész, írja be abrew update parancsot a terminálba.
a Homebrew képlet csomópont.js is node. Tehát telepíteni csomópont.js beírja brew install node a terminálba. Kövesse a megjelenő további utasításokat, ha meg kell változtatnia a PATHs vagy bármi hasonlót.
ezután írja be a npm install -g coffee-script parancsot a globális telepítéshez.
A Windows
látogatás csomópont.nyomja meg az “Install” gombot. Automatikusan fel kell ismernie a használt Windows ízét, és a telepítő elkezdi letölteni.
menjen végig a telepítési folyamaton.
a telepítés után nyissa meg a parancssort, és írja be anpm install -g coffee-script parancsot a globális telepítéshez.
és végül
írja be acoffee -v parancsot a parancssorba, hogy lássa, helyesen lett-e telepítve.
parancssor használata
acoffee fordító többféle módon használható. Itt van egy pár, hogy megnézze, mi áll rendelkezésre.
Futtatás és fordítás
a következő parancs lefordítja az összes .coffee fájlt a coffeescripts nevű mappában .js fájlok párhuzamos fa szerkezetben a javascripts / div > mappa.
coffee -o javascripts/ -c coffeescripts/
figyelem
a -cA fordítást jelenti, a -o a kimeneti mappát jelenti. Vegye figyelembe, hogy a megrendelés kimenetre kerül, majd lefordítja. Ennek oka az, hogy ha megváltoztatja a megrendelést, az nem működik!
figyelő
a fenti parancs futtatása minden alkalommal, amikor CoffeeScript fájlokat szeretne lefordítani, így van egy másik praktikus lehetőség,-w.
coffee -w -o javascripts/ -c coffeescripts/
a figyelő figyeli a coffeescripts mappában lévő fájlok változásait, és menet közben lefordítja azokat.
ha új fájlt ad hozzá a coffeescripts mappához, akkor a mappának le kell fordítania, azonban ha hozzáad egy új mappát és egy CoffeeScript fájlt, akkor az nem lesz lefordítva. Ez a későbbi verziókban megváltozhat.
fájlok összekapcsolása
az összes.coffee fájlt egyetlen JavaScript fájlba is lefordíthatja. Ez csökkenti a böngésző által végrehajtandó HTTP-kérések számát és javítja a teljesítményt. Ehhez használja a -j opciót, mint például:
coffee -j javascripts/app.js -c coffeescripts/*.coffee
a * egy helyettesítő karakter operátor.
REPL
ha beírja coffee opciók nélkül egy interaktív shell nyílik meg. Ez hasonló a irb Ruby-ban. Ez egy nagyszerű eszköz a dolgokat a konzolon, és teljesítő gyors kísérletek.
szövegszerkesztő kiemelése
Ha a CoffeeScript-ben kódol, akkor a legjobb dolog a szintaxis kiemelése.
TextMate
Jeremy Ashkenas, a CoffeeScript feltalálója létrehozott egy praktikus TextMate csomagot. A telepítési utasításokat itt találja.
Sublime Text 2
Sublime Text 2 egy plugin által létrehozott GitHub felhasználó Xavura. Ezt a Sublime Package Control segítségével telepítheti, ha már rendelkezik ezzel.
A jó dolgok, más néven a szintaxis
változók
a CoffeeScript változóinak nincs szükségük avar kulcsszóra. Egyszerűen nevezze meg a változót, egy egyenlőségjelet, majd az értéket.
year = 1985speed = 88
karakterláncok
a karakterláncok idézőjelekkel vannak deklarálva, mint a legtöbb más nyelven.
first_name = "Marty"
a karakterláncok összekapcsolásához vagy összefűzéséhez sorolhatja őket egymás után egy plusz szimbólummal, például:
full_name = first_name + " McFly"
a hash szimbólumot is felveheti (#), amelyet göndör zárójelek követnek, ezeken belül pedig a karakterlánc változó.
full_name = "#{first_name} McFly"
a fenti két példa létrehozná aMarty McFly karakterláncot.
az utóbbi típusú karakterlánc-interpoláció csak akkor működik, ha dupla idézőjeleket használ. Ha egyetlen idézőjelet használ, a szöveg “ahogy van”jelenik meg. Egyetlen idézet húrok szó húrok.
full_name = '#{first_name} McFly'
tehát a fentiek a#{first_name} McFly karakterláncai lesznek. Ez tükrözi a viselkedést.
függvények
a függvényeket a függvény, egyenlőségjel, majd egy speciális funkciószimbólum elnevezésével deklarálják (->).
initialize_time_circuits = -> year * flux_capacitor_constant * speed
nem használtuk a return kulcsszót, mert a CoffeeScript minden függvénye az utolsó kódsor eredményét adja vissza.
a többsoros függvények több sorra íródnak, a deklaráció után minden sornak van némi fehér helye előtte.
initialize_time_circuits = -> year = 1885 year * flux_capacitor_constant * speed
Ez az évet1885 minden alkalommal. Ha azt akarjuk, hogy az év sokkal rugalmasabb legyen, de van alapértelmezett értékünk, akkor ezt a következőképpen hozhatjuk fel a metódus deklaraionba:
initialize_time_circuits = (speed, year = 1885) -> year * flux_capacitor_constant * speed
Ez azt jelenti, hogy ezt a speed a year mindig alapértelmezés szerint 1885.
initialize_time_circuits(88)
zárójelek használata nélkül is hívhat metódusokat. A fentiek úgy is írhatók, mint:
initialize_time_circuits 88
tömbök
a tömbök inicializálásának és deklarálásának többféle módja van a CoffeeScript-ben. Valószínűleg megszokta, hogy szögletes zárójelekkel deklarált tömböket és vesszővel elválasztott értékeket lát.
mcflys =
tömböket több sorban is deklarálhat, mint ez:
mcflys =
minden sorban fehér szóköznek kell lennie.
opcionálisan eltávolíthatja a záró vesszőt minden sorból.
mcflys =
e két deklarációs stílus kombinációját is használhatja.
a következő példa…
woah =
…egyenértékű a következővel:
woah =
amely az alkalmazástól függően többé-kevésbé olvasható lehet. CoffeeScript lehetővé teszi, hogy csináld a különböző módon, hogy megfeleljen az Ön igényeinek.
objektumok
Az objektum literálok vagy hashek a JavaScript megfelelőikhez hasonlóan és más funky módon deklarálhatók.
a következő JSON…
…a vesszőket és a göndör zárójeleket eldobhatja:
mindaddig, amíg behúz egy kis fehér szóközt, a szerkezet beágyazódik, ahogy az elvárható.
tartományok
a tartományokat két egész számmal deklaráljuk, két ponttal elválasztva, szögletes zárójelbe csomagolva.
days =
a tartományok nem szabványos objektumtípusok a Javascript-ben, így tömbökké lesznek összeállítva.
ahhoz, hogy egy alszakasz egy tömb akkor adja át a tartományban is. Szeretne napokat kapni tuesday_to_fridayhol van Hétfő 1vasárnap pedig 7? Mivel a tömbök nulla alapúak, 1-nél kezdjük és 4-nél fejezzük be.
days = tuesday_to_friday = days
a tömbök egész szakaszait hasonló módon is kicserélheti.
a következő…
days =
módosítja a daystömböt .
használhatja a tartományokat a visszaszámláláshoz is, például lenne10 to0.
Splat
a splat kényelmes módja annak, hogy több értéket fogadjon el argumentumként a metódusokhoz.
a következő példában kudos pontokat szeretnénk kiosztani a fórum felhasználók egy csoportjának az adott hét bejegyzéseinek számáért.
az első személy kap 10 pontot, a második kap 6, a harmadik kap 2 és minden más kap egy pontot.
hozzunk létre egy függvényt,giveKudos Afirstsecond ésthird paraméterekkel. A többi jól használja a splat, amely a változó neve, amelyet 3 periódus követ. A giveKudosmetóduson belül hívjunk egy megvalósítatlanaddKudosToUser metódust, amely két paramétert vesz igénybe, a felhasználót és a hozzáadandó pontokat. Nem fogunk aggódni a megvalósítás miatt, csak szemléltető célokat szolgál.
giveKudos = (first, second, third, rest...) -> addKudosToUser first, 10 addKudosToUser second, 6 addKudosToUser third, 2
ezután használhatjuk a for ina rest hurokját.
mivel van egy sor felhasználó:
users =
azt akarjuk, hogy Pasan 10 pontot kapjon, Amit 6, Jim 2, majd a többi 1.
át kell adnunk a felhasználóknak a periódusokat a metódushoz, hogy megfelelően hozzárendeljük a tömb értékeit a következő paraméterekhez:
giveKudos users...
ezen időszakok nélkül users get hozzárendelve a first paraméter és undefined a többihez.
osztályok
osztályok triviálisan deklarálhatók a CoffeeScript-ben, ami Frissítő kontraszt a sokkal bőbeszédűbb JavaScripthez képest.
először írja be aclass kulcsszót, majd az osztály nevét.a
metódusokat, beleértve a konstruktor metódust is, a módszer nevével írják, amelyet kettőspont követ. Minden módszer neve előtt fehér szóközre van szükség. Ezután használhatja a függvény operátort (->).
class TimeMachine constructor: ->
egy objektum példányának példányosításához használja anew kulcsszót, amelyet az osztály neve követ.
time_machine = new TimeMachine
Példányváltozók
a Példányváltozók egy @ szimbólummal kezdődnek. Tehát lehet egy pilóta
class TimeMachine constructor: (pilot) -> @pilot = pilot
pont jelöléssel is elérheti őket.
class TimeMachine constructor: (pilot) -> @pilot = pilot time_machine = new TimeMachine "H. G. Wells"console.log time_machine.pilot
a fenti példában a H. G. Wells karakterlánc lesz nyomtatva a konzolra.
a @pilot = pilot beállítás helyett a következőképpen írhatod:
class TimeMachine constructor: (@pilot) ->
osztály öröklés
alosztály írásához használd a extends mint ez:
class Tardis extends TimeMachineclass DeLorean extends TimeMachine
tegyük fel, hogy TimeMachinerendelkezik egy módszerrel go egy paraméterrel, amely kijelentkezik, amikor az Időgép időben utazik.
class TimeMachine constructor: (@pilot) -> go: (noise) -> console.log noise
most minden time machine implementnél hívjuk meg asuper metódust.
tehát a go() meghívása mindkét időgép példányain kinyomtatja a saját hangját.
Általános szintaxis
a CoffeeScript segítségével a kód jobban hasonlít egy angol mondatra:
light_bulbs() if switch is on
ami ugyanaz, mint:
light_bulbs() unless switch is not on
bár az utóbbit nehezebb elemezni, mint az előbbit, megmutatja az új cukor hatókörét.
itt egy táblázat az ekvivalensekről a CoffeeScript dokumentációs oldalról az operátorokról és az Álnevekről.
| CoffeeScript | JavaScript |
|---|---|
| = = = | |
| isnt | != = |
| nem | ! |
| and | && |
| or | || |
| true, yes, on | true |
| false, no, off | false |
| @, this | this |
| of | in |
| in | no JS equivalent |
Existential Operator
CoffeeScript brings another cool operator to the table called the Existential Operator, which is a question mark (?).
tegyük fel, hogy egyuser még nem jelentkezett be és be van állítva. Ha a user nincs jelen, akkor csak az ilyen egzisztenciális operátort használja:
login() if not user?
az ilyen alapértelmezett értékeket is beállíthatja:
year ?= 1885
az egzisztenciális operátort hasonló módon használhatja egy hármas operátornak. A következő példa szerint az üdvözlés vagy message, ha nem undefined vagy a ` ” Hello, világ!”.
greeting = message ? "Hello, World!"
végül van egy kiegészítő változat, amelyet fel lehet használni null hivatkozások, amikor tulajdonságokat láncol össze.
ip = securitySystem.lastUser?().remoteSystem?.ipAddress
tehát a TypeErrorfelemelése helyett ez visszaadja a undefined értéket.
megértések
a megértések olvashatóbbá tehetik a kódot. A kudos példánkban a for hurok két vonalon haladt át, amikor egy ilyen sorra írhattuk volna:
a CoffeeScript dolgainak hurkolásának másik jó tulajdonsága, hogy a hurok a hurok eredményeinek tömbjét adja vissza. Tegyük fel, hogy 0-tól 100-ig akarok számolni a 10-es többszörösében. Csak annyit teszek, hogy a hurokomat egy ilyen változó hozzárendeléssel írom elő:
multiples = for num in num * 10
zárójelek hozzáadásával egy sorra is felveheti!
multiples = (num * 10 for num in )
következtetés
Woah! Ez volt a sok, hogy a de mint látható CoffeeScript tele van ízletes cukros szintaxis. Miért nem ad ez egy bash a következő JavaScript projekt, és mit fordít le a motorháztető alatt?
- kezdő útmutató a coffeescript-hez
- coffeescript
- tanulás programozás
- weboldal készítése