Tracks
/
Elm
Elm
/
Übungen
/
Bettys Fahrradladen
Bettys Fahrradladen

Bettys Fahrradladen

Lernübung

Einführung

Grundlagen 2

Funktionen exportieren

Wie du Funktionen exportierst, wurde im ersten Konzept behandelt. Hier ist eine kurze Auffrischung.

Jede Datei in Elm ist ein Modul und muss vor allem anderen Code eine module-Anweisung enthalten.

Modulnamen müssen zu ihrem Dateinamen passen. Das Modul Calculator muss also in der Datei Calculator.elm stehen, und das Modul Parser.Utils gehört in die Datei Parser/Utils.elm.

Alles, was in einem Modul definiert wird, ist privat auf dieses Modul beschränkt und kann von außerhalb nicht erreicht werden, es sei denn, es ist in exposing aufgeführt.

-- Calculator.elm
-- Define the Calculator module, and expose the `add` function
module Calculator exposing (add)

six = 3 + 3

add number1 number2 = number1 + number2
-- Calculator.elm
-- Define the Calculator module, and expose everything within: `six` and `add`
module Calculator exposing (..)

six = 3 + 3

add number1 number2 = number1 + number2

https://elm-lang.org/docs/syntax#modules

Funktionen aus anderen Modulen importieren

Auf Funktionen, die in anderen Modulen definiert sind, greifst du über Imports zu. Wenn du ein Modul importierst, werden alle Funktionen zugänglich, die dieses Modul exportiert hat. Wie du auf sie zugreifst, hängt aber davon ab, wie das Modul importiert wird.

Qualifizierte Imports sind der Standard. Auf eine Funktion in einem solchen Modul (zum Beispiel die Funktion map im Modul List) greifst du zu, indem du den Modulnamen voranstellst (List.map).

Offene Imports ermöglichen den direkten Zugriff auf die exportierten Funktionen dieses Moduls, ohne Präfix. Sie werden mit dem Schlüsselwort exposing geschrieben, gewissermaßen als Gegenstück zu dem, das beim Exportieren verwendet wird. Du kannst alle verfügbaren Funktionen exportieren (mit ..) oder nur bestimmte (zum Beispiel map).

Du kannst auch Typen und ihre Konstruktoren aus anderen Modulen importieren, das kommt aber erst in einem späteren Konzept.

Qualifizierte Imports sind vorzuziehen, weil sie die Klarheit erhöhen und Namenskonflikte vermeiden.

-- qualified imports
import List                            -- List.map, List.foldl
import List as L                       -- L.map, L.foldl

-- open imports
import List exposing (..)              -- map, foldl, concat, ...
import List exposing ( map, foldl )    -- map, foldl, List.concat

https://elm-lang.org/docs/syntax#modules

Typannotationen

Typannotationen werden mit name : parameter types -> return type definiert, wobei die Parametertypen ebenfalls durch -> getrennt werden.

add : Int -> Int -> Int
add number1 number2 = number1 + number2

Mit runden Klammern kannst du Funktionsparameter definieren (die selbst mit derselben Syntax definiert werden, daher die Notwendigkeit von Klammern).

-- Transform every character in a string
map : (Char -> Char) -> String -> String
map charMapperFunction string =
    -- ...

https://elm-lang.org/docs/syntax#type-annotations

Zahlen

In Elm gibt es zwei Arten von Zahlen, definiert durch die Typen Int und Float. Int entspricht der Menge der positiven und negativen Ganzzahlen. Float entspricht der Menge der reellen Zahlen, begrenzt durch die Genauigkeit des Computers. Operationen, die für Zahlen definiert sind, arbeiten meist mit dem einen oder dem anderen Typ, aber nicht mit beiden gemischt. Es gibt Funktionen, um zwischen beiden umzuwandeln, etwa toFloat, das Int in Float umwandelt, und round, floor, ceiling oder truncate, die einen Float mit unterschiedlicher Semantik in einen Int umwandeln.

https://package.elm-lang.org/packages/elm/core/latest/Basics#Int

String-Operationen

Um Wörter und Sätze im Code zu beschreiben, hat Elm einen nativen String-Typ. String-Literale werden zwischen doppelte Anführungszeichen geschrieben, zum Beispiel "Hello World!". Ein Operator zum Verketten von Strings ++ und ein Gleichheitsoperator == sind standardmäßig verfügbar.

hello : String -> String
hello subject = "Hello " ++ subject

hello "World!" --> "Hello World!"

Die meisten anderen String-Funktionen sind im Modul String, das importiert werden muss.

https://package.elm-lang.org/packages/elm/core/latest/String

Anleitung

In dieser Übung schreibst du etwas Code, um Betty's Bike Shop zu helfen, einem Online-Shop für Fahrräder und Teile. Du hast drei Aufgaben, mit dem Ziel, die Preise der Fahrräder und Teile auf der Website korrekt anzuzeigen.

1. Exportiere die Funktion penceToPounds

Dein Kollege hat bereits das Grundgerüst des Moduls geschrieben, die undefinierten Funktionen penceToPounds und poundsToString. Allerdings hat er vergessen, die Funktion penceToPounds zu exportieren, sodass sie derzeit für andere Module und für die Testsuite nicht sichtbar ist.

Füge penceToPounds zur Liste der exportierten Funktionen hinzu.

2. Rechne Pence in Pfund um

Derzeit wird der Preis als Ganzzahl in Pence gespeichert (der Fahrradladen hat seinen Sitz in Großbritannien). Auf der Website wollen wir den Preis in Pfund anzeigen, wobei 1,00 Pfund 100 Pence entspricht. Deine zweite Aufgabe ist es, die Funktion penceToPounds zu implementieren, die einen Pence-Betrag als Int entgegennimmt und ihn in den entsprechenden Pfund-Betrag als Float umrechnet. Außerdem solltest du die Typannotation für diese Funktion definieren.

penceToPounds 106
    --> 1.06

3. Formatiere den Preis für die Anzeige auf der Website

Da Bettys Fahrräder in Pfund verkauft werden, sollten die Preise mit dem Symbol „£“ angezeigt werden. Deine dritte Aufgabe ist es daher, die Funktion poundsToString zu implementieren, die einen Pfund-Betrag als Float entgegennimmt und den Preis als String mit vorangestelltem Pfund-Symbol zurückgibt. Das Modul String enthält die Funktion String.fromFloat, die dir dabei hilft. Du solltest das Modul String importieren, bevor du es verwendest. Außerdem solltest du die Typannotation für poundsToString definieren.

poundsToString 1.06
    --> "£1.06"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Elm Exercism

Bereit, mit Bettys Fahrradladen zu starten?

Melde dich bei Exercism an, um Elm mit 28 Konzepte110 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.