Im gesamten Julia-Track wirst du deine Lösung wie kleine Bibliotheken behandeln müssen, das heißt, du definierst Funktionen, Typen usw., die dann gegen eine Testsuite ausgeführt werden. Aus diesem Grund führen wir benannte Funktionen als allererstes Konzept ein.
Julia ist eine dynamische, streng typisierte Programmiersprache. Der Programmierstil ist überwiegend funktional, allerdings mit mehr Flexibilität als in Sprachen wie Haskell.
Du musst eine Variable nicht vorher deklarieren. Weise einfach einem passenden Namen einen Wert zu:
julia> myvar = 42 # an integer
42
julia> name = "Maria" # strings are surrounded by double-quotes ""
"Maria"
Wenn ein Wert im ganzen Programm verfügbar sein soll, sich aber voraussichtlich nicht ändert, ist es am besten, ihn als Konstante zu kennzeichnen.
Wenn du einer Zuweisung das Schlüsselwort const voranstellst, kann der Compiler effizienteren Code erzeugen, als es bei einer Variablen möglich ist.
Konstanten helfen dir außerdem, dich vor Programmierfehlern zu schützen.
Wenn du versehentlich versuchst, den const-Wert zu ändern, bekommst du eine Warnung:
julia> const answer = 42
42
julia> answer = 24
WARNING: redefinition of constant Main.answer. This may fail, cause incorrect answers, or produce other errors.
24
Beachte, dass ein const nur außerhalb jeder Funktion deklariert werden kann.
Das ist normalerweise ganz oben in der *.jl-Datei, noch vor den Funktionsdefinitionen.
Sie sind die gleichen wie in vielen anderen Sprachen:
2 + 3 # 5 (addition)
2 - 3 # -1 (subtraction)
2 * 3 # 6 (multiplication)
8 / 2 # 4.0 (division with floating-point result)
8 % 3 # 2 (remainder)
Es gibt zwei gängige Wege, eine benannte Funktion in Julia zu definieren:
Mit dem Schlüsselwort function
function muladd(x, y, z)
x * y + z
end
Eine Einrückung um 4 Leerzeichen ist aus Gründen der Lesbarkeit üblich, aber der Compiler ignoriert sie.
Das Schlüsselwort end ist unbedingt erforderlich.
Beachte, dass wir auch return x * y + z hätten schreiben können.
Julia-Funktionen geben jedoch immer den zuletzt ausgewerteten Ausdruck zurück, deshalb ist das Schlüsselwort return optional.
Viele Programmierer geben es lieber an, um ihre Absicht klarer zu machen.
Mit der „Zuweisungsform“
muladd(x, y, z) = x * y + z
Diese Form wird am häufigsten verwendet, um knappe Funktionen mit einem einzigen Ausdruck zu schreiben.
In der Zuweisungsform wird niemals das Schlüsselwort return verwendet.
Die beiden Formen sind gleichwertig und werden genau gleich verwendet, also wähle die, die besser lesbar ist.
Eine Funktion rufst du auf, indem du ihren Namen angibst und für jeden Parameter der Funktion ein Argument übergibst:
# invoking a function
muladd(10, 5, 1)
# and of course you can invoke a function within the body of another function:
square_plus_one(x) = muladd(x, x, 1)
Wie viele Sprachen verlangt Julia, dass Namen (von Variablen, Funktionen und vielem anderem) mit einem Buchstaben beginnen, gefolgt von einer beliebigen Kombination aus Buchstaben, Ziffern und Unterstrichen.
Konvention ist, dass Namen von Variablen, Konstanten und Funktionen kleingeschrieben werden, wobei Unterstriche auf ein vernünftiges Minimum beschränkt bleiben.
In dieser Übung schreibst du etwas Code, der dir hilft, eine großartige Lasagne aus deinem Lieblingskochbuch zu kochen.
Du hast vier Aufgaben, die alle mit der Zeit zu tun haben, die du für die Zubereitung der Lasagne brauchst.
Definiere die Konstante expected_bake_time, die zurückgibt, wie viele Minuten die Lasagne im Ofen backen soll.
Laut Kochbuch muss die Lasagne insgesamt 60 Minuten im Ofen sein.
julia> expected_bake_time
60
Definiere die Funktion preparation_time, die die Anzahl der Schichten, die du zur Lasagne hinzugefügt hast, als Argument entgegennimmt und zurückgibt, wie viele Minuten du mit der Vorbereitung der Lasagne verbracht hast. Dabei gehst du davon aus, dass du für jede Schicht 2 Minuten brauchst.
julia> preparation_time(4)
8
Definiere die Funktion remaining_time, die die tatsächlichen Minuten, die die Lasagne schon im Ofen war, als Parameter entgegennimmt und zurückgibt, wie viele Minuten die Lasagne noch im Ofen bleiben muss.
julia> remaining_time(50)
10
Definiere die Funktion total_working_time, die zwei Argumente entgegennimmt: Das erste Argument ist die Anzahl der Schichten, die du zur Lasagne hinzugefügt hast, und das zweite Argument ist die Anzahl der Minuten, die die Lasagne im Ofen war.
Die Funktion soll zurückgeben, wie viele Minuten du insgesamt an der Zubereitung der Lasagne gearbeitet hast. Das ist die Summe aus der Vorbereitungszeit in Minuten und der Zeit in Minuten, die die Lasagne im Moment im Ofen verbracht hat.
julia> total_working_time(3, 20)
26
Melde dich bei Exercism an, um Julia mit 35 Konzepte128 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.