Lasagne

Lasagne

Lernübung

Einführung

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.

Variablen und Zuweisung

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"

Konstanten

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.

Arithmetische Operatoren

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)

Funktionen

Es gibt zwei gängige Wege, eine benannte Funktion in Julia zu definieren:

  1. 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.

  2. 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)

Namenskonventionen

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.

Anleitung

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.

1. Speichere die erwartete Backzeit in einer Konstante

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

2. Berechne die Vorbereitungszeit in Minuten

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

3. Berechne die verbleibende Backzeit in Minuten

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

4. Berechne die gesamte Arbeitszeit in Minuten

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
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Julia Exercism

Bereit, mit Lasagne zu starten?

Melde dich bei Exercism an, um Julia mit 35 Konzepte128 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.