Tracks
/
Gleam
Gleam
/
Übungen
/
Bettys Fahrradladen
Bettys Fahrradladen

Bettys Fahrradladen

Lernübung

Einführung

Ganzzahlen

In Gleam gibt es zwei verschiedene Arten von Zahlen: Ganzzahlen und Gleitkommazahlen.

Ganzzahlen sind Zahlen ohne Nachkommastellen.

let integer = 3
// -> 3

Gleam hat mehrere Operatoren, die mit Ganzzahlen arbeiten.

1 + 1 // -> 2
5 - 1 // -> 4
5 / 2 // -> 2
3 * 3 // -> 9
5 % 2 // -> 1

2 > 1  // -> True
2 < 1  // -> False
2 >= 1 // -> True
2 <= 1 // -> False

Gleitkommazahlen

Gleitkommazahlen sind Zahlen, die eine oder mehrere Ziffern hinter dem Dezimaltrennzeichen haben.

let float = 3.45
// -> 3.45

Gleitkommazahlen haben ebenfalls ihre eigenen Operatoren.

1.0 +. 1.4 // -> 2.4
5.0 -. 1.5 // -> 3.5
5.0 /. 2.0 // -> 2.5
3.0 *. 3.1 // -> 9.3

2.0 >. 1.0  // -> True
2.0 <. 1.0  // -> False
2.0 >=. 1.0 // -> True
2.0 <=. 1.0 // -> False

Module

Module

Gleam-Code ist in Module organisiert, und jede Datei ist ein Gleam-Modul.

Bisher haben wir Funktionen mit der Syntax pub fn geschrieben. Damit definierst du eine Funktion, die anderen Modulen öffentlich zur Verfügung steht. Funktionen, die mit fn definiert werden, sind privat für das Modul, in dem sie definiert sind, und können nicht von anderen Modulen verwendet werden.

// This function is public
pub fn add(x, y) {
  x + y
}

// This function is private
fn subtract(x, y) {
  x - y
}

Gleam-Module haben Namen, und der Name richtet sich nach ihrem Dateipfad innerhalb des Verzeichnisses src oder test.

Ein Modul, das zum Beispiel in src\geometry\rectangle.gleam (unter Windows) oder src/geometry/rectangle.gleam (unter UNIX-artigen Betriebssystemen) definiert ist, würde geometry/rectangle heißen.

Funktionen aus anderen Modulen importieren

Auf Funktionen, die in anderen Modulen definiert sind, greifst du über Importe zu. Beim Importieren eines Moduls werden alle Funktionen zugänglich, die dieses Modul bereitstellt. Wie du auf sie zugreifst, hängt aber davon ab, wie das Modul importiert wird.

Qualifizierte Importe sind der Standard. Um auf eine Funktion in einem solchen Modul zuzugreifen (zum Beispiel die Funktion map im Modul gleam/list), stellst du den Modulnamen voran (list.map).

// Import the int module
import gleam/int

pub fn run(x: Int) -> String {
  // Use the to_string function from the int module
  int.to_string(x)
}

Standardmäßig ist der Name, mit dem du auf das Modul verweist, der letzte Teil des Modulnamens, in diesem Fall int. Mit dem Schlüsselwort as kannst du das ändern.

// Import the int module and refer to it as i
import gleam/int as i

pub fn run(x: Int) -> String {
  i.to_string(x)
}

Unqualifizierte Importe ermöglichen den direkten Zugriff auf die bereitgestellten Funktionen in diesem Modul, ohne Präfix.

// Import the to_string function from the int module
import gleam/int.{to_string}

pub fn run(x: Int) -> String {
  to_string(x)
}

Qualifizierte Importe sind vorzuziehen, weil sie für den Leser klarer machen, woher eine Funktion stammt, und Namenskonflikte vermeiden.

Standardbibliothek

Gleam hat eine umfangreiche und gut dokumentierte Standardbibliothek. Die Dokumentation findest du online unter hexdocs.pm/gleam_stdlib. Speicher dir diesen Link gut ab, du wirst ihn oft brauchen!

Zu den meisten eingebauten Datentypen gibt es ein passendes Modul mit Funktionen für diesen Datentyp. Es gibt zum Beispiel das Modul gleam/int für Ganzzahlen, das Modul gleam/string für Strings, das Modul gleam/list für Listen und so weiter.

Anleitung

In dieser Übung schreibst du etwas Code, um Betty's Bike Shop zu helfen, einem Onlineshop für Fahrräder und Ersatzteile. Du hast drei Aufgaben, mit denen du die Preise der Fahrräder und Ersatzteile auf der Website korrekt anzeigen kannst.

1. Exportiere die Funktion pence_to_pounds

Deine Kollegin hat bereits das Grundgerüst des Moduls geschrieben, die unvollständigen Funktionen pence_to_pounds und pounds_to_string. Sie hat jedoch vergessen, die Funktion pence_to_pounds zu exportieren, daher ist sie derzeit für andere Module oder die Testsuite nicht sichtbar.

Exportiere die Funktion pence_to_pounds.

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 möchten wir den Preis in Pfund anzeigen, wobei 1,00 Pfund 100 Pence entspricht. Deine erste Aufgabe ist es, die Funktion pence_to_pounds zu implementieren. Sie nimmt einen Betrag in Pence als Int entgegen und rechnet ihn in die entsprechende Menge Pfund als Float um. Außerdem solltest du Typannotationen für diese Funktion hinzufügen.

pence_to_pounds(106)
// -> 1.06

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

Da Bettys Fahrräder in Pfund verkauft werden, sollten Preise mit dem Symbol „£“ angezeigt werden. Deine zweite Aufgabe ist es daher, die Funktion pounds_to_string zu implementieren. Sie nimmt einen Betrag in Pfund als Float entgegen und gibt den Preis als String zurück, wobei das Pfundsymbol vorangestellt wird.

Du solltest die Module gleam/float und gleam/string importieren, bevor du sie verwendest.

Außerdem solltest du die Typannotation für pounds_to_string definieren.

pounds_to_string(1.06)
// -> "£1.06"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Gleam Exercism

Bereit, mit Bettys Fahrradladen zu starten?

Melde dich bei Exercism an, um Gleam mit 33 Konzepte122 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.