LiveScript

Aus JsWiki.de
Wechseln zu: Navigation, Suche
LiveScript
Das offizielle LiveScript-Logo

LiveScript ist eine Programmiersprache, die zu JavaScript kompiliert wird. Sie ermöglicht es unter anderem, komplexen Code ohne immer wiederkehrende und sich wiederholende Textbausteine wie Semikolons, Punkte, Kommas, normalen, eckigen und geschweiften Kammern zu schreiben.

Stattdessen werden hauptsächlich Einrückungen (Tabulatoren) und Leerzeichen zum bilden der Programmstruktur verwendet, was zu kompakteren Programmcode und zu einer besseren Lesbarkeit führen soll.

Herkunft und Einsatz[Bearbeiten]

Historisch gesehen ist LiveScript ist ein Fork des mittlerweile inaktiven Coco und ein indirekter Nachkomme der Programmiersprache CoffeScript, mit der sie viele Kompatibilitäten hat. Die Syntax ist außerdem an Ruby, Pytho, Haskell und Go angelehnt. Der Name LiveScript spielt an die gleichnamige ursprüngliche Version von JavaScript an, bevor diese später im Dezember 1995 in JavaScript umbenannt wurde.

LiveScript kann sowohl clientseitig, als auch serverseitig in Node.js oder io.js verwendet werden. Außerdem ist es möglich, LiveScript und regulären JavaScript-Code beliebig zu mixen, sodass z.B. unter Node.js auch herkömmliche NPM-Module verwendet werden können. Da LiveScript vor der Ausführung in JavaScript übersetzt wird, wird die letztendliche Laufzeit-Performance nicht beeinträchtigt.

Die offizielle Dateiendung von LiveScript ist .ls. Für nahezu alle bekannten Code-Editoren und IDEs stehen Erweiterungen zur Verfügung, die eine Syntaxhervorhebung der einzelnen Sprachelemente ermöglichen.[1]

Syntax[Bearbeiten]

Nachfolgend ein paar grundlegende Beispiele für die Syntax von LiveScript, und deren Ergebnis als kompiliertes JavaScript.

If/Else-Bedingungen[Bearbeiten]

Anstatt geschweifte Klammern zu verwenden, müssen Anweisungen die bei einer if-Bedingung ausgeführt werden sollen lediglich mit der Tabulatortaste oder Leerzeichen eingerückt werden:

if 1 + 1 == 2
  doSomething()
if (1 + 1 === 2) {
  doSomething();
}

Gleiches gilt auch im Falle von else if und else:

if 1 + 1 == 2
  doSomething()
else if 4 > 6
  doAnotherThing()
else
  doSomethingElse()
if (1 + 1 === 2) {
  doSomething();
} else if (6 > 4) {
  doAnotherThing();
} else {
  doSomethingElse();
}

Anweisungen könne auch ineinander verschachtelt werden:

if 1 + 1 == 2
  if 2 + 2 == 4
    doSomething()
  else
    doAnotherThing()
else
  if 3 + 3 == 6
    doAnotherThing2()
  else
    doAnotherThing3()
if (1 + 1 === 2) {
  if (2 + 2 === 4) {
    doSomething();
  } else {
    doAnotherThing();
  }
} else {
  if (3 + 3 === 6) {
    doAnotherThing2();
  } else {
    doAnotherThing3();
  }
}

Alternativ zur Verschachtelung kann man nach der Bedingung auch das Schlüsselwort then verwenden, womit die Anweisung in der gleichen Zeile geschrieben werden können. Da bei einem else hingegen keine eigene Bedingung vorhanden ist, kann hier das then weggelassen werden:

if 1 + 1 == 2 then doSomething()
else doSomethingElse()
if (1 + 1 === 2) {
  doSomething();
} else {
  doSomethingElse();
}

Wenn lediglich ein if verwendet werden soll, kann man dieses auch hinter die entsprechende Anweisung schreiben:

doSomething() if 1 + 1 == 2
if (1 + 1 === 2) {
  doSomething();
}

Funktionen[Bearbeiten]

Die Definition von Funktionen kommt ebenfalls ohne geschweifte Klammern aus:

function hallo
  alert 'Hallo Welt!'
function hallo(){
  return alert('Hallo Welt!');
}

Wenn eine Funktion Parameter annehmen kann, so kann man auch hierbei die Klammern weglassen. Mehrere Parameter-Namen müssen bei der Funktionsdefinition jedoch weiterhin mit Kommas getrennt werden:

function hallo vorname, nachname
  alert "Hallo #{vorname} #{nachname}!"
function hallo(vorname, nachname){
  return alert("Hallo " + vorname + " " + nachname + "!");
}

In diesem Beispiel wird außerdem Gebrauch von der Variablen-Einbindung gemacht, welche bei LiveScript innerhalb doppelter Anführungszeichen möglich ist.[2]

Beim Aufrufen einer Funktion können die Kommas hingegen problemlos weggelassen werden, sofern der jeweils vorherige Wert direkt übergeben wird:

hallo 'JavaScript' 'Wiki'
hallo('JavaScript', 'Wiki');

Wenn es sich bei den übergebenen Werten hingegen um Variablen handelt sind Kommas zur Trennung weiterhin notwendig, da LiveScript die aneinandergereihten Variablen sonst als Funktionsaufruf interpretieren würde:

vorname = 'Max'
nachname = 'Mustermann'
 
hallo vorname, nachname
var vorname, nachname;
vorname = 'Max';
nachname = 'Mustermann';
hallo(vorname, nachname);

Callbacks[Bearbeiten]

Callbacks, also Rückruf-Funktionen, können in LiveScript folgendermaßen übergeben werden:

db.get 'users' (data) ->
  console.log data
db.get('users', function(data){
  return console.log(data);
});

Zudem ist es auch möglich, Callbacks ohne Verschachtelungen zu definieren. So lasst sich synchroner und somit übersichtlicherer Quellcode schreiben, der letztendlich dennoch asynchron ausgeführt wird, ähnlich wie in der Programmiersprache Go:

err, data <- db.get 'users'
console.log data
db.get('users', function(err, data){
  return console.log(data);
});

Letzteres ist vor allem bei sehr vielen ineinander verschachtelten Rückruf-Funktionen hilfreich, wie man es z.B. in komplexen serverseitigen JavaScript-Anwendungen antrifft.

Weblinks zu LiveScript[Bearbeiten]

Quellen und Einzelnachweise[Bearbeiten]

  1. Projects supporting LiveScript (auf github.com)
  2. Literals | LiveScript - a language which compiles to JavaScript (livescript.net)