Vad är Dart, och varför ska du bry dig?

I den här handledningen introducerar jag dig till Googles nya webbprogrammeringsspråk, Dart, och förklarar varför du skulle vilja ha det och vad du behöver veta om det. Lär dig om det här nya språket och formulera några åsikter om det - kommer det verkligen att ersätta JavaScript?


Vad är Dart?

Strax från hästens mun (som ligger här):

Dart är ett klassbaserat, arv, rent objektorienterat programmeringsspråk. Dart är valfritt skrivet ... och stöder reified generics och gränssnitt.
Dartprogrammen kan kontrolleras statiskt. Den statiska kontrollen rapporterar
vissa överträdelser av typreglerna, men sådana överträdelser avbryter inte kompilering
eller utesluta exekvering.

Om det är en stor, ångande hög av mumbo-jumbo till dig, låt mig omformulera ovanstående.

Klass-baserade: Dart förväntar dig att använda klasser. Medan JavaScript är kinda-sorta klassbaserat kan du inte skriva Dart utan att skriva klasser.

Single-arv: Klasser kan förlänga andra klasser, men bara en i taget. Detta är en gemensam struktur i objektorienterad programmering. Ett sällsynt få språk stöder flera arv, men det allmänna samförståndet är att det orsakar fler problem än det löser, så de flesta OOP-språk går för en arv.

Objektorienterat programmeringsspråk: Detta uttalande är lite överflödigt, givet den "klassbaserade" biten från tidigare. Men det är viktigt: Dart är OOP genom och igenom. Faktum är att det snarare påminner om Java (inte JavaScript, Java), vilket också är klassbaserat.

Valfritt skrivet: De flesta språk är antingen typade eller inte. JavaScript, till exempel, är det inte. När du definierar en variabel kommer den att vara otypad. Du kan ställa in den till en Sträng, sedan till en siffra, och ingen kommer att klaga (ja, jag kommer). Dessutom kan du ringa Array metoder på den variabeln, och du kommer inte ha några problem förrän du faktiskt kör den här koden. Däremot skrivs Java. Varje variabel måste deklareras med en typ, t.ex. Sträng eller int. Och när en variabel skrivs kan du inte lägga in en annan typ av värde i den. Och om du försökte ringa en metod som inte existerar på den typen kommer kompilatorn att höja ett fel, så att du vet ditt misstag innan du kör din kod. C och dess varianter är andra typade språk, medan Ruby och Python är andra otyckta språk.

Valfritt skrivet betyder, som du kan gissa, att du har möjlighet att deklarera en typ för variabler. Det är så enkelt som det här: du kan lämna typen av och kompilatorn gör ingen extra kontroll. Om du levererar en typ kommer kompilatorn att hjälpa dig med fel. ActionScript är ett exempel på ett annat valfritt typat språk.

Det här är ganska smart drag, en som antagligen är avsedd att hjälpa till med att snabbt antas. Dartprogrammerare kommer sannolikt att vara JavaScript-programmerare som gör språnget. Att ge stöd för ett otyckt språk ger JavaScripters en enklare inlärningskurva, samtidigt som en funktion som många programmerare insisterar är nödvändig för allvarlig programmering, som kan hämtas vid en senare tidpunkt.

Reifierad generik: Generics är en språkfunktion som låter dig skriva in elementen i en samling. Till exempel, en Array i JavaScript kan inte garantera att objekten den innehåller är någon specifik typ (förutom att JavaScript inte är ett typat språk). Generics tillåter dig dock att ange att varje objekt i en Array - eller någon annan samlingstyp - måste vara av en viss typ, kanske a Sträng. Således om du försöker sätta in en siffra in i Array, du kan få varningar. reified generics gå ett extra steg och tillåta denna typ av säkerhet förbi kompilatorn. Typintegritet vid körning bevaras.

gränssnitt: Ett gränssnitt är en praktisk Objektorienterad teknik. Det definierar en typ utan att definiera funktionalitet. Det är svårt att sammanfatta i en mening eller tio, tillräckligt för att säga att de är integrerade i avancerade (och rena) objektorienterade programmeringstekniker (nämligen designmönster). När du gräver gränssnitt, kommer du att beklaga bristen på dem på andra språk.

Statiskt kontrollerad: Detta går tillbaka till typing sak. När du skriver används en variabel med en typ som "statiskt typad", och som sådan kan typen inte ändras när den har blivit deklarerad. Detta gör det möjligt för kompilatorn (eller "static checker") att göra antaganden om dina avsikter med din kod; det vill säga om du förklarar en variabel som en Sträng, då ska du inte försöka ringa changeTimeZone på det. Om du gjorde det (kanske du skrev in vad du trodde var den variabla som innehöll Datum objekt), då kan kompilatorn varna dig för felet utan att behöva köra koden.


Så vad är verkligen verkligen?

Ja, jag var tvungen att ge den "officiella" förklaringen till Dart. Men det kanske inte uppfyller dig. Här är vad Dart är, med den typiska webbutvecklaren i åtanke.

Dart är Googles ersättare för JavaScript. Det tillkännagavs i oktober 2011, och den allmänna avsikt är att tillhandahålla samma verktyg som JavaScript, bara som elverktyg. Som förklarats i föregående steg har det många objektorienterade funktioner som den typiska JavaScript-programmeraren kommer att vara obekanta. Men de flesta programmerare som är bekanta med dessa funktioner kommer lätt att förespråka dem som nödvändiga för en seriös utveckling.

Kort sagt, Google känner att JavaScript inte är upptaget för att vara ett "riktigt" programmeringsspråk, med tanke på hur mycket tung lyft det har gjort sedan iPhone sköt ett hål i Flash Zeppelin.

Googles hopp är att Dart kommer att stödjas inhemskt av alla större webbläsare på lång sikt. Det uppenbarligen inte händer just nu, eftersom Dart själv fortfarande är i tidigt släppläge, och vi kan inte förvänta oss att Apple, Microsoft eller Mozilla hoppar ombord ännu. Men det som gör Dart värt att titta på nu är att Google har tillhandahållit en kompilator för att konvertera Dart-kod till vanlig JavaScript.

Personligen är det något jag har längtat efter sedan jag gick till JavaScript, som kommer från ActionScript. Säg vad du ska om Flash (och försäkra dig, jag har antagligen sagt det också), men ActionScript 3 är ett bra språk. Att gå från avancerad AS3 till JavaScript har visat sig orsaka bölder. Jag har faktiskt lekat med min egen JavaScript-kompilator (jag blev inte väldigt långt och är ganska glad att överge projektet), och jag ville ha något som åtminstone skulle låta mig utvecklas med några nöjen, som riktiga klasser, gränssnitt och typer , även om det sammanställdes i otypad, prototypisk JavaScript. Kompileringsprocessen kan få några fel innan du kör projektet, vilket är en stor tidsbesparare.

Så, om Google får sin väg, är det säkert möjligt att skriva Dart-projekt på webben idag, så gör vi just det i slutet av denna handledning. Förhoppningsvis, under vägen, kommer jag att övertyga dig om att Dart är faktiskt ganska lovande.


Vad är fel med Dart?

Nu när du är upphetsad över "JavaScript 2.0", nu för den svåra sanningen. Endast Google har planer på att införliva stöd för Dart i sin webbläsare. Ingen annan har uttryckt intresse för det. Faktum är att en hel del uttalanden har gjorts mot Dart, eller åtminstone idén att stödja Dart, från själva webbläsarskaparna.

Och medan Dart-projekt kan kompilera i JavaScript, finns det nödvändigtvis lite överhuvudtaget i denna process. Dart-kompilatorn är inte riktigt som CoffeeScript-kompilatorn, vilket är mer en en-till-en-process. Dart är ett eget språk, med bibliotek och så, och när man kompilerar till JavaScript sammanställer den följaktligen extra bibliotekskod i den resulterande JavaScript. Detta väger för närvarande mer än ett bibliotek som jQuery. Detta måste förändras, eftersom Dart-teamet gör kompileringen, men i grunden är det ett jQuery-ish-bibliotek som måste normalisera webbläsarens skillnader, och även lite extra "socker" för att göra JavaScript lite mer ärligt om sin dynamiska natur. Denna typ av extravikt är inte hemskt, men om du bygger en enkel användargränssnitt för en mobil webbplats, är kanske Dart inte det bästa valet. Det kommer att lysa mer med större webbapplikationer som är beroende av betydande JavaScript.

Slutligen är Dart för närvarande i utveckling. Det är spännande, och det är inte något "fel" med Dart i sig, men om du börjar utveckla i Dart nu finns det en viss chans att API: n kommer att förändras, eller att saker inte kommer att dokumenteras helt eller korrekt, och hur mycket Informationen på webben är mindre än det belopp du kan hitta om jQuery. Det är blödande kant, och det kanske inte är för dig eller för ett visst projekt.


Vad är fantastiskt om Dart?

Samtidigt är det blödande kant, och det är fantastiskt. Att investera på lite tid nu för att lära sig Dart kunde sätta sig på ett trevligt ställe när Dart är stabilare. Om du blir involverad nu har du till och med möjlighet att hjälpa till att forma språket. Dart-postlistan på Google Grupper har ofta en del fram och tillbaka mellan personer som föreslår idéer och Google-ingenjörer som svarar på den här idén. Ofta beaktas användarbidrag och det är inte ovanligt att se dem införlivas.

Jag har redan diskuterat fördelarna med ett skrivet, objektorienterat språk, och det säger säkert att dessa egenskaper också är fantastiska.

Dart är också ganska påminner om Java, och det borde vara fantastiskt om du är mer av en Java (eller C) programmerare som vill komma in i webbutveckling. Dart ska ge en bättre övergång till den världen än JavaScript skulle.

Slutligen handlar Dart inte bara om en JavaScript-konkurrent. Det är ett helt nytt språk, och det är klart att springa någonstans. Den används på serverns sida, en la Node.js, och lovar att vara ett annat utbrett verktyg, som Ruby eller Python.


Skulle du bry dig?

Det här är förstås en laddad fråga, och jag skulle bjuda in en kommentarbaserad inkvisition oavsett hur jag svarar. Men svaret ska jag.

Du är noga med att du bryr dig, eller inte bryr dig, beroende på hur mycket du störs av Darts problem eller upphetsad av Darts fördelar. De två föregående stegen ger dig mycket information som leder dig till din egen slutsats.

Om du är den typ av person vars idé att programmera JavaScript är att söka på webben för jQuery-plugins och installera dem på din HTML-sida, kommer Dart förmodligen inte att ge dig mycket spänning. Känn dig inte omhändertagen. Och låt mig spara dig en massa tid och avslöja att jag bygger resten av denna handledning utifrån antagandet att läsaren bryr sig, åtminstone nog att utforska.

Om du är den typ av front-end-utvecklare som faktiskt tror på objektorienterad JavaScript, försöker du bygga felaktigt i dina skript och tenderar att skriva mer JavaScript än HTML, då kan du vara en redneck någon som bryr sig om bra programmering, oavsett språk eller plattform, i vilket fall du kanske bryr dig om Dart. Du är åtminstone skyldig för dig själv att prova det.

Enligt min mening visar Dart mycket löften och har en plats i webbprogrammering. Men jag tror inte att det kommer att ersätta eller till och med verkligen kompensera JavaScript-dominion över skript på HTML-sidor. Jag tror att det kommer att hitta en plats med de mer seriösa webbapplikationerna, men om webbläsare (andra än Google) är överens om att bygga in en Dart VM - vilket jag inte tror troligt - är Darts öde förvandlat till Chrome-experiment och stora skala webbapps. Enkla scripting-uppgifter, som ett streck av interaktivitet på en annars statisk sida, kommer inte att dra stor nytta av Dart.

Med detta sagt, tycker jag att det alltid är värt att lära sig nya saker. Du kan lära dig att det nya är inte värt din tid, men du bör formulera den uppfattningen på egen hand, genom erfarenhet. Vi ger lite erfarenhet i denna handledning, så om du känner dig äventyrlig, gör dig redo för Dart.


Slutsats

Den här korta diskussionen om Dart har förhoppningsvis sparkat ditt intresse för det nya språket som kanske kan ta webben med stormen. Om du vill prova, ta en titt på min Facebook-exklusiva handledning som gör att dina händer smutsar med ett enkelt Dart-projekt.

(Om du inte är på Facebook, oroa dig inte. Tutorialen kommer att vara på huvudaktiviten + webbplatsen så småningom, och vi har mycket mer Dart-innehåll uppställt under tiden).

Tack för att du läser! Dela dina åsikter om Dart i kommentarerna.