Um eine Variable zu deklarieren, verwendest du den Zuweisungsoperator =.
In Crystal sollten Variablen das Format snake_case verwenden.
number = 1
puts number # => 1
number = 2
puts number # => 2
Konstanten werden mit demselben Zuweisungsoperator = deklariert, verwenden aber ausschließlich 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 bedeutet, dass jeder Variablen oder jedem Methodenargument zur Kompilierzeit ein Typ zugewiesen wird. 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 festgelegt 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.
Allerdings können Methoden 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 festzulegen, musst du das Schlüsselwort end verwenden.
def hello
puts "Hello World!"
end
Wenn du eine Methode verwendest, die für den Typ der Variablen oder des Methodenarguments nicht existiert, 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 sollte so aussehen: <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 runde Klammern verwenden, um die Argumente beim Aufruf und bei der Definition der Methode anzugeben, wie folgt: <method_name>(<argument_1>, <argument_2>, ...).
Wenn eine Methode keine Argumente hat, sollten die runden Klammern weggelassen werden.
def hello(name)
"Hello #{name}!"
end
hello("Crystal")
# => Hello Crystal!
Wenn du eine Methode mit mehreren Argumenten aufrufst, 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 von 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 den Operator + verwenden, um zwei Zahlen zu addieren.
Du kannst auch den Operator - verwenden, um zwei Zahlen zu subtrahieren.
Und du kannst den Operator * verwenden, um zwei Zahlen zu 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
In dieser Übung schreibst du Code, der dir hilft, eine großartige Lasagne aus deinem Lieblingskochbuch zu kochen.
Es gibt vier Aufgaben, die sich alle mit der Zeit befassen, die du für die Zubereitung der Lasagne brauchst.
Definiere die Konstante EXPECTED_MINUTES_IN_OVEN in der Klasse Lasagna, die speichert, wie viele Minuten die Lasagne im Ofen bleiben soll.
Laut Kochbuch beträgt die erwartete Ofenzeit 40 Minuten:
Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40
Definiere die Methode Lasagna#remaining_minutes_in_oven, die die tatsächlichen Minuten, die die Lasagne bereits im Ofen war, als Parameter entgegennimmt und zurückgibt, wie viele Minuten die Lasagne noch im Ofen bleiben muss. Grundlage dafür ist die erwartete Ofenzeit aus der vorherigen Aufgabe.
Lasagna.new.remaining_minutes_in_oven(30)
# => 10
Definiere die Methode Lasagna#preparation_time_in_minutes, die die Anzahl der Schichten, die du der Lasagne hinzugefügt hast, als Parameter entgegennimmt und die Anzahl der Minuten zurückgibt, die du für die Vorbereitung gebraucht hast. Dabei dauert die Vorbereitung jeder Schicht 2 Minuten.
Lasagna.new.preparation_time_in_minutes(2)
# => 4
Definiere die Methode Lasagna#total_time_in_minutes, die zwei benannte Parameter entgegennimmt: Der Parameter number_of_layers ist die Anzahl der Schichten, die du der Lasagne hinzugefügt hast, und der Parameter actual_minutes_in_oven ist die Anzahl der Minuten, die die Lasagne im Ofen war.
Die Methode soll die Gesamtzahl der Minuten zurückgeben, die du für die Zubereitung der Lasagne aufgewendet hast. Das ist die Summe aus der Vorbereitungszeit in Minuten und der Zeit, die die Lasagne im Moment im Ofen war.
number_of_layers = 3
actual_minutes_in_oven = 20
Lasagna.new.total_time_in_minutes(number_of_layers, actual_minutes_in_oven)
# => 26
Melde dich bei Exercism an, um Crystal mit 26 Konzepte142 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.