Ein großer Vorteil ist natürlich die Menge an syntaktischem Zucker, die in vielen Fällen zu kürzerem Code führt. Auf http://jashkenas.github.com/coffee-script/ gibt es beeindruckende Beispiele. Andererseits habe ich Zweifel, dass diese Beispiele den Code komplexer realer Anwendungen darstellen. In meinem Code füge ich zum Beispiel niemals Funktionen zu nackten Objekten hinzu, sondern zu ihren Prototypen. Darüber hinaus ist die Prototyp-Funktion für den Benutzer nicht sichtbar, was eher auf klassische OOP als auf idiomatisches Javascript hindeutet.
Das Array-Verständnis Beispiel würde in meinem Code wahrscheinlich so aussehen:
cubes = $.map(list, math.cube); // which is 8 characters less using jQuery...
javascript
coffeescript
Philip
quelle
quelle
Antworten:
Ich bin der Autor eines bevorstehenden Buches über CoffeeScript:
http://pragprog.com/titles/tbcoffee/coffeescript
Ich war überzeugt, dass es sich lohnt, CoffeeScript nach etwa einer Woche zu verwenden, obwohl die Sprache zu diesem Zeitpunkt nur ein paar Monate alt war und viel rauere Kanten hatte als jetzt. Auf der offiziellen Website sind die (meisten) Funktionen der Sprache hervorragend aufgelistet, daher werde ich diese hier nicht wiederholen. Vielmehr sage ich nur, dass die Profis der Sprache sind:
Nr. 3 bekommt viel mehr Aufmerksamkeit als die ersten beiden (sogar in meinem Buch), aber je mehr ich darüber nachdenke, desto mehr wird mir klar, dass ich den Sprung nicht nur wegen der hübschen Syntax gemacht habe; Ich habe den Sprung gemacht, weil mich die Sprache in Richtung eines besseren, weniger fehleranfälligen JavaScript getrieben hat. Um ein paar kurze Beispiele zu nennen:
var
, eine Variable mit demselben Namen spiegeln (außer mit benannten Argumenten) oder Variablen in verschiedenen Dateien haben, die interagieren (siehe https://stackoverflow.com/questions) / 5211638 / pattern-for-coffeescript-modules / 5212449 ).->
das Schreiben sehr viel einfacher ist alsfunction(){}
das Verwenden von Rückrufen. Semantische Einrückung macht deutlich, wann Callbacks verschachtelt sind. Und=>
erleichtert die Aufbewahrungthis
bei Bedarf.unless x
einfacher für englischen Muttersprachler ist als zu analysierenif (!x)
, undif x?
ist einfacher alsif (x != null)
, um nur zwei Beispiele zu geben, können Sie weniger Gehirn Zyklen auf Logik - Syntax und mehr auf der Logik selbst zu verbringen.Eine großartige Bibliothek wie Underscore.js kann einige dieser Probleme lösen, aber nicht alle.
Nun zu den Nachteilen:
Natürlich denke ich, dass die Vor- und Nachteile für mich persönlich überwiegen, aber das wird nicht für jede Person, jedes Team oder jedes Projekt der Fall sein. (Auch Jeremy Ashkenas schreibt viel JavaScript.) CoffeeScript wird am besten als eine gute Ergänzung zu JavaScript angesehen, nicht als Ersatz.
quelle
=>
in der Dokumentation vermisst ? Das ist großartig . (Die anderen Punkte waren auch gut - sehr gute unvoreingenommene Antwort mit einer ehrlichen Liste der Nachteile. :)Foo.prototype.bar = ...
alle Linien zu zerstreuen , was Wahnsinn ist!). Es ist eine großartige Möglichkeit, Code sauber zu organisieren. Andererseits kann es dazu führen, dass Benutzer OOP verwenden, auch wenn ein funktionaler Ansatz viel eleganter ist.Wir haben eine ziemlich große JavaScript-Codebasis und vor ungefähr einem Monat beschlossen wir, CoffeeScript auszuprobieren. Einer unserer Entwickler begann mit der Migration eines unserer Module von JS zu CS unter http://js2coffee.org/ . Dieses Tool war ziemlich praktisch und es dauerte ungefähr zwei oder drei Stunden, um 1000-Zeilen-JavaScript zu portieren. Einige Beobachtungen, die wir an diesem Punkt bemerkt haben:
Der resultierende CoffeeScript-Code war gut lesbar.
Wir haben es wieder in JavaScript kompiliert und es war ziemlich einfach zu navigieren und zu debuggen. Während wir dieses Modul portierten, entdeckte ein anderer Entwickler aus unserem Team einen Fehler darin. Diese beiden Entwickler haben den Fehler in unserem alten JavaScript-Code und im neuen JavaScript-Code, der aus dem CS-Compiler stammt, behoben. Sie arbeiteten unabhängig und es dauerte ungefähr die gleiche Zeit (15-20 Minuten).
Aufgrund der Tatsache, dass es sich um einen Port handelte, verwendete der resultierende Code keine für Kaffee geeigneten oder wünschenswerten Funktionen. Wenn wir von Grund auf in CoffeeScript schreiben würden, wäre der Code idiomatischer. Aus diesem Grund haben wir später beschlossen, den vorhandenen Code nicht zu portieren.
Im Allgemeinen ist die Lesbarkeit der kürzeren Funktion und des kleineren Objekts in gewissem Maße erhöht. Bei längeren Methoden war dies jedoch überhaupt nicht der Fall. Die größten Einsparungen beim Aufblähen kamen von
->
und explizitreturn
, aber ansonsten war unser Code nicht wesentlich kürzer oder einfacher geworden. Einige Syntaxelemente, insbesondere Objektliterale, schienen ziemlich verwirrend. CS lässt geschweifte Klammern um Elementdefinitionen weg und kombiniert sie mit "Alles-ist-ein-Ausdruck" und implizitreturn
, was das Lesen einiger Codebits ziemlich schwierig machte.Hier ist JavaScript:
Und so würde der entsprechende CoffeeScript-Code aussehen:
Da es jetzt ziemlich schwierig ist, herauszufinden, dass die return-Anweisung in der
(*)
Zeile beginnt . In unserem Projekt verlassen wir uns stark auf Objektliterale: Wir übergeben sie als Funktionsparameter und geben sie von anderen Funktionen zurück. In vielen Fällen sind diese Objekte recht komplex: mit Elementen unterschiedlichen Typs und mehreren Verschachtelungsebenen. In unserem Fall war das allgemeine Gefühl, dass CoffeeScript-Code tatsächlich schwerer zu lesen war als einfacher JavaScript-Code.Obwohl sich das Debuggen von CoffeeScript als einfacher herausstellte, als wir erwartet hatten, hat sich die Bearbeitungserfahrung erheblich verschlechtert. Wir konnten keinen guten Editor / IDE für diese Sprache finden. Wir haben Editor / IDE für clientseitigen Code für unser Projekt nicht standardisiert, und tatsächlich verwenden wir alle verschiedene Tools. Tatsächlich sind sich alle in einem Team einig, dass ihr Tool bei einem Wechsel zu CoffeeScript einen eher schlechten Support bietet. IDE- und Editor-Plug-ins sind in einem sehr frühen Stadium und können uns in einigen Fällen nicht einmal eine ordnungsgemäße Syntaxhervorhebung oder Einrückungsunterstützung bieten. Ich spreche nicht von Codeausschnitten oder Refactoring. Wir verwenden WebStorm, Eclipse, NetBeans, VisualStudio, Notepad ++ und SublimeText2.
Apropos Tools Ich sollte erwähnen, dass der CoffeScript-Compiler selbst als Node-JS-Paket geliefert wird. Wir sind in erster Linie ein Java / .NET-Shop, daher entwickeln alle auf Windows-Boxen. Bis vor kurzem gab es in Node kaum Windows-Unterstützung. Der CoffeeScript-Compiler konnte nicht unter Windows ausgeführt werden. Daher entschieden wir uns vorerst, bei
<script type="text/coffeescript">
Tags und dem browserbasierten On-the-Fly-Compiler zu bleiben .Der Compiler ist ziemlich schnell und verlängert die Startzeit nicht wesentlich. Der Nachteil ist, dass das resultierende JavaScript bearbeitet wird
eval
und es etwas schwierig ist, in den Entwicklertools der Browser (insbesondere in IE8) Haltepunkte zu setzen. Wenn wir Probleme mit dem Debuggen haben, kompilieren wir CoffeeScript-Code mit demselben Migrationstool, das ich oben aufgeführt habe, aber das ist immer noch nicht sehr praktisch.Andere Versprechungen von CoffeeScript wie automatisches
var
Einfügen oder halbtransparentes Verwaltenthis
mit dem Operator fat arrow (=>
) haben nicht so viel Gewinn gebracht, wie wir gehofft hatten. Wir verwenden JSLint bereits als Teil unseres Erstellungsprozesses und schreiben Code in einerES3 x ES5-Strict
Teilmenge der Sprache. Wie auch immer, die Tatsache, dass Coffee denselben "sauberen" Code produziert, ist eine gute Sache . Ich wünsche mir, dass jedes serverseitige Framework auch gültige HTML5- und CSS3-Markups erzeugt!Das heißt, ich würde nicht sagen, dass CoffeeScript viel Zeit spart, indem es
var
mir Keywords hinzufügt. Fehlendevar
s werden leicht von JSLint abgefangen und können leicht behoben werden. Darüber hinaus schreiben Sie nach einer gewissen Korrektur automatisch gutes JavaScript . So würde ich nicht sagen Kaffee wirklich ist , dass in dieser Hinsicht hilfreich.Wir haben CoffeeScript etwa eine Woche lang getestet. Alle Teammitglieder schrieben Code darin und wir tauschten unsere Erfahrungen miteinander aus. Wir haben damit einen neuen Code geschrieben und einen vorhandenen Code portiert, wenn wir das für richtig hielten. Unsere Gefühle für die Sprache waren gemischt.
Im Allgemeinen würde ich sagen, dass es unsere Entwicklung nicht beschleunigt hat, aber es hat uns auch nicht gebremst. Einige Geschwindigkeitszuwächse aufgrund von weniger Eingabe und weniger Fehlerfläche wurden durch Verlangsamungen in anderen Bereichen ausgeglichen, hauptsächlich durch die Unterstützung von Werkzeugen. Nach einer Woche haben wir beschlossen, die Verwendung von CoffeeScript nicht zu verbieten, aber auch nicht zu verbieten . Bei einer freien Wahl wird sie in der Praxis zumindest vorerst von niemandem verwendet. Von Zeit zu Zeit denke ich darüber nach, ein neues Feature zu prototypisieren und dann den Code in JavaScript zu konvertieren, bevor ich ihn in den Rest des Projekts integriere, um einen schnelleren Start zu erzielen, aber ich habe diesen Ansatz noch nicht ausprobiert.
quelle
Vorteile
Sehen Sie sich die Antwort von Trevor Burnham an .
Außerdem können Sie sich als einen angesagten Kerl vorstellen, der trendige Sachen macht, anstatt mit dem Dreck von Javascript herumzuspielen.
Nachteile
CoffeeScript ist nichts anderes als syntaktischer Zucker und rosa Gläser.
Für einfache Dinge - CoffeeScript ist überflüssig, da es in jeder Sprache einfach ist, einfache Dinge zu tun. Und jQuery ist wahrscheinlich noch einfacher als CoffeeScript.
Für harte Sachen - Sie müssen Ihr Medium verstehen. Und Ihr Medium ist HTML, DOM und CSS, Javascript ist lediglich ein Werkzeug, um sie miteinander zu verbinden - alle APIs sind speziell für Javascript geschrieben. Die Verwendung einer anderen Sprache, die dann zu einer "echten" kompiliert wird, ist sehr riskant, sei es Java (GWT), Dart oder CoffeeScript.
Anti-Patterns oder banale Unkenntnis der Sprachregeln können durch das Lesen von zwei guten Büchern behoben werden. Und ich bin mir ziemlich sicher, dass Coffeescript seine eigenen Anti-Patterns hat.
Die IDE-Unterstützung für Coffeescript ist noch schlechter als für JS.
quelle
Der größte Profi ist meiner Meinung nach:
Geradlinig Coffeescript kompiliert in die Javascript Sie sollte geschrieben haben, aber nicht, weil es nicht einfach war.
Es gibt einige unangenehme Ecken von Javascript, die nur mit Wachsamkeit vermieden werden - Beispiele aus der Luft:
Wenn Sie ein Kaffeeskript schreiben, werden alle diese automatisch für Sie behandelt .
Die Nachteile sind, IMO, meist gering:
quelle
Profis
Das obige Beispiel von Andrew fand ich aufschlussreich. Ich glaube, die Lesbarkeit der vorhandenen Objektliteralretouren würde durch einfaches manuelles Identifizieren der Retoure verbessert
Rückkehr
// Objektliteral hier
Die IDE-Tools wurden verbessert. TextMate und Cloud9 unterstützen CoffeeScript. Zugegebenermaßen ist die Windows-Unterstützung zurückgeblieben (gilt das nicht generell für die Webentwicklung?)
Nachteile
Browser-interpretiertes CoffeeScript kann schwierig zu debuggen sein.
Es ist eine zusätzliche Ebene über JavaScript, die einige Kenntnisse und Überlegungen von Entwicklern erfordert.
quelle
Profis
Nachteile
quelle