Erster Eindruck von CoffeeScript

Die Programmiersprache CoffeeScript hatte sofort nachdem ich ihren Namen gehört hatte, einen Stein bei mir im Brett. Die Idee hinter der Sprache ist, JavaScript zu vereinfachen,  zu erweitern und vor allem die Lesbarkeit zu erhöhen. Ich las immer wieder von ihr z.B. als Dropbox seinen kompletten JavaScript-Code auf CoffeeScript umgestellt hat.
Ich wollte sie unbedingt einmal selber ausprobieren. Da mir aber gerade kein passendes Projekt einfallen wollte, habe ich kurzerhand meinen Spaceshoter SpaceJs in CoffeeScript umgesetzt. Bei der gelegenheit habe ich ihn auch gleich nochmal überarbeitet.

Einrichtung

CoffeeScript lässt sich ohne Probleme mit dem Node-Paketmanager npm installieren:

sudo npm install -g coffee-script

Falls man dafür aber keine Rechte besitzt oder npm nicht zur Verfügung steht, kann die aktuelle Version auch auf einer andere Maschine kompiliert und anschließen auf den Arbeitsrechner kopiert werden. In diesem Fall empfiehlt sich ein Alias auf die Installation:

alias coffee='~/bin/coffee-script/bin/coffee'

Zum programmieren habe ich den Editor gedit verwendet. Ich habe ihn noch um das Highlighting von CoffeeScript angereichert. Die Files und Anleitung dafür findet ihr im GitHub Projek von wavded.

Das Programmieren

Am Anfang war es sehr gewöhnungsbedürftig auf sämtliche Klammern, Semikolons und vor allem auf „var“ zu verzichten. Da ich im Arbeitsalltag die Programmiersprache Java, mit ähnlicher Syntax, einsetze habe ich vielleicht noch etwas länger gebraucht. Da sie optional, trotzdem verwendet werden können ist das aber kein so großes Problem. Nach eine kurzen Eingewöhnungszeit hatte ich den Kniff auch raus.
Trotz der vorzüglichen Dokumentation,habe ich immer wieder auf den kompilierten JavaScript-Code zugegriffen. Dies hilf mir die Arbeitsweise und Syntax besser zu verstehen. Diese Vorgehen kann ich empfehlen und hat mir persönlich sehr geholfen. Ich habe festgestellt, das der kompilierte JavaScript-Code meinem selbstgeschriebenen Code ziemlich ähnlich sieht, dass liegt aber hauptsächlich daran, das ich ebenfalls stark auf Objekte mit Konstruktoren und das Prototype-Konzept setze. Den Erstellte Code wird im Browser verwende, aus diesem Grund hab ich mich dazu entschieden alles in einer JavaScript-Datei (Game.js) zu kompilieren.

coffee --output js/ --join Game.js --compile coffee/*.coffee

So sieht z.B. das Gegnerobjekt nach der Überarbeitung aus:

class Opponent

	constructor: (@$boardNode)  ->
		@dead = false
		@$opponentNode = @create()

	create: => 
		$opponentNode = $("<div class='opponent'>").appendTo(@$boardNode)
		$opponentNode.css('left', @findPosition($opponentNode) + 'px')
		return $opponentNode;

	findPosition: ($node) =>
		range = (Math.round((@$boardNode.width() - (@$boardNode.offset().left * 2)) / $node.width()) * $node.width()) * -1
		left = Math.round(Math.random() * range)
		left = @$boardNode.offset().left +  left
		if left > @$boardNode.offset().left + @$boardNode.width() - $node.width()
			return @findPosition($node)
		return left

	destroy: =>
		if @$opponentNode.length
			new Explosion(@$boardNode, @$opponentNode.offset())
			@$opponentNode.remove()
			@dead = true

	move: =>
		return if @dead
		@$opponentNode.css "margin-top", "+=1px"

Fazit

Ich schreibe für mein Leben gerne JavaScript-Code, schaue ihn mir gerne an und finde ihn in den meisten Fällen gut lesbar. Ich werde auch weiterhin bei der Arbeit „Plain-JavaScript“ verwenden. Im Arbeitsalltag kann man in meiner Umfeld leider nicht davon ausgehen, das CoffeeScript auf eine breite Akzeptanz stößt, denn die Syntax ist erst auf den 2. Blick wirklich verständlich. Dabei spielen vor allem die verdrehten Conditions und die Tatsache das „->“ und „=>“ leicht zu vertauschen sind, eine große Rolle.

CoffeeScript erfordert, im Vergleich zu anderen Programmiersprachen, einen sehr geringen Einarbeitungsaufwand. Bei guten Vorkenntnissen in JavaScript hat man nach nur ein paar Stunden das meiste drauf.

Durch das betrachten des echt guten, generierten JavaScript-Codes konnte ich meinen eigenen JavaScript-Code verbessern. Einige Syntax-Varianten fand ich so gut, das ich sie übernommen haben. Als Beispiel möchte ich hier „_this“ als Name für die zwischengespeicherte „this“ Variable nennen.
Falls es sich anbietet werde ich in privaten Projekte auf jeden Fall das ein oder andere mal CoffeeScript verwenden.

Das gesamte Projekt könnt ihr euch bei GitHub angucken, testen, runterladen und spielen. Viel Spaß!