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 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
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.
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.
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.
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.
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.
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
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"
Melde dich bei Exercism an, um Gleam mit 33 Konzepte122 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.