Crystal ist eine kompilierte, objektorientierte Programmiersprache. Das sind einige der Ziele dieser Sprache:
Ruby-inspirierte Syntax.
Statisch typgeprüft, aber ohne dass du den Typ von Variablen oder Methodenargumenten angeben musst.
C-Code aufrufen können, indem du dafür Bindings in Crystal schreibst.
Auswertung und Generierung von Code zur Kompilierzeit, um Boilerplate-Code zu vermeiden.
Zu effizientem nativen Code kompilieren.
Die Arbeit an Crystal begann 2011 mit dem Ziel, eine Sprache zu schaffen, die die Eleganz und Produktivität von Ruby mit der Performance und Typsicherheit einer kompilierten Sprache verbindet. Der Compiler der Sprache wurde zunächst in Ruby geschrieben, 2013 aber in Crystal neu geschrieben. Ary Borenszweig, Juan Wajnerman und Brian Cardiff haben die Sprache entwickelt und entworfen.
Um eine Variable zu deklarieren, verwendest du den Zuweisungsoperator =.
In Crystal sollten Variablen im Format snake_case geschrieben werden.
number = 1
puts number # => 1
number = 2
puts number # => 2
Konstanten werden mit demselben Zuweisungsoperator = deklariert, verwenden aber nur Großbuchstaben, bekannt als SCREAMING_SNAKE_CASE.
NUMBER = 1
puts NUMBER # => 1
Wenn du einer bereits definierten Konstante einen Wert zuweist, führt das zu einem Fehler zur Kompilierzeit.
NUMBER = 1
NUMBER = 2
# Error: already initialized constant NUMBER
Crystal ist eine kompilierte Sprache, das heißt, jeder Variablen oder jedem Methodenargument wird zur Kompilierzeit ein Typ zugewiesen. Der Compiler kann den Typ einer Variablen oder eines Methodenarguments ableiten. In manchen Fällen ist es jedoch notwendig, den Typ anzugeben. Die Fälle, in denen ein Typ angegeben werden muss, werden in späteren Konzepten erklärt.
Methoden sind eine Möglichkeit, eine Reihe von Anweisungen zu gruppieren, die wiederverwendet werden können.
In Crystal werden Methoden oft in einer Klasse, einem Modul oder einem Struct definiert.
Methoden können aber auch außerhalb einer Klasse, eines Moduls oder eines Structs definiert werden.
Methoden werden mit dem Schlüsselwort def deklariert, gefolgt vom Namen der Methode.
In Crystal sollten Methoden in snake_case geschrieben werden.
Du kannst die runden Klammern weglassen, wenn eine Methode keine Argumente hat.
Um das Ende einer Methode zu kennzeichnen, musst du das Schlüsselwort end verwenden.
def hello
puts "Hello World!"
end
Wenn du eine Methode verwendest, die es für den Typ der Variablen oder des Methodenarguments nicht gibt, führt das zu einem Fehler zur Kompilierzeit.
number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String
Methoden können Argumente haben. Argumente sind Daten, die an eine Methode übergeben werden. Um einer Methode Argumente übergeben zu können, musst du den Namen des Arguments angeben. In Crystal sollten Argumente in snake_case geschrieben werden. Eine Methode kann mehrere Argumente haben, aber die Argumente müssen durch ein Komma getrennt werden.
def hello(name)
puts "Hello #{name}!"
end
Methoden können auch mehrere Argumente haben. In diesem Fall müssen die Argumente durch ein Komma getrennt werden.
def hello(name, language)
puts "Hello #{name}! You are learning #{language}."
end
Wenn du eine Methode aufrufst, die zu einer Klasse, einem Modul oder einem Struct gehört, musst du den Punktoperator (.) verwenden.
Das Format ist: <ClassName>.<method_name>.
Wenn eine Methode nicht zu einer Klasse, einem Modul oder einem Struct gehört, kannst du sie einfach aufrufen, indem du ihren Namen schreibst.
Methoden geben immer implizit den Wert des letzten Ausdrucks zurück.
Wenn eine Methode Argumente hat, kannst du beim Aufruf und bei der Definition runde Klammern um die Argumente setzen, etwa so: <method_name>(<argument_1>, <argument_2>, ...).
Wenn eine Methode keine Argumente hat, sollten die Klammern weggelassen werden.
def hello(name)
"Hello #{name}!"
end
hello("Crystal")
# => Hello Crystal!
Beim Aufruf einer Methode mit mehreren Argumenten sollten die Argumente durch ein Komma getrennt werden. Die Argumente müssen in derselben Reihenfolge angegeben werden wie die Methodenargumente.
def hello_language(name, language)
"Hello #{name}! You are learning #{language}."
end
hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.
Wenn du eine Methode mit der falschen Anzahl an Argumenten aufrufst, führt das zu einem Fehler zur Kompilierzeit.
hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)
In Crystal kannst du mit dem Operator + zwei Zahlen addieren.
Mit dem Operator - kannst du zwei Zahlen subtrahieren.
Und mit dem Operator * kannst du zwei Zahlen multiplizieren.
1 + 1
# => 2
2 - 1
# => 1
2 * 2
# => 4
In Crystal werden Kommentare mit dem Zeichen # geschrieben, gefolgt von einem Leerzeichen und dann dem Kommentar.
Kommentare werden verwendet, um Code zu dokumentieren.
Der Compiler führt Kommentare nicht aus.
# This is a comment