Στη Gleam υπάρχουν δύο διαφορετικά είδη αριθμών: οι ακέραιοι και οι αριθμοί κινητής υποδιαστολής.
Οι ακέραιοι είναι αριθμοί χωρίς δεκαδικό μέρος.
let integer = 3
// -> 3
Η Gleam έχει αρκετούς τελεστές που δουλεύουν με ακέραιους.
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
Οι αριθμοί κινητής υποδιαστολής είναι αριθμοί με ένα ή περισσότερα ψηφία μετά την υποδιαστολή.
let float = 3.45
// -> 3.45
Οι αριθμοί κινητής υποδιαστολής έχουν επίσης το δικό τους σύνολο τελεστών.
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 οργανώνεται σε ενότητες, και κάθε αρχείο είναι μία ενότητα Gleam.
Μέχρι τώρα γράφαμε συναρτήσεις με τη σύνταξη pub fn, η οποία ορίζει μια συνάρτηση που είναι δημόσια διαθέσιμη σε άλλες ενότητες. Οι συναρτήσεις που ορίζονται με fn είναι ιδιωτικές για την ενότητα στην οποία ορίζονται και δε μπορούν να χρησιμοποιηθούν από άλλες ενότητες.
// This function is public
pub fn add(x, y) {
x + y
}
// This function is private
fn subtract(x, y) {
x - y
}
Οι ενότητες Gleam έχουν ονόματα, και το όνομα βασίζεται στη διαδρομή του αρχείου τους μέσα στον κατάλογο src ή test.
Για παράδειγμα, μια ενότητα που ορίζεται στο src\geometry\rectangle.gleam (στα Windows) ή στο src/geometry/rectangle.gleam (σε λειτουργικά συστήματα τύπου UNIX) θα ονομαζόταν geometry/rectangle.
Η πρόσβαση σε συναρτήσεις που ορίζονται σε άλλες ενότητες γίνεται μέσω εισαγωγών. Όλες οι συναρτήσεις μέσα σε μια ενότητα που εκείνη εκθέτει γίνονται προσβάσιμες όταν εισάγεις αυτή την ενότητα. Αλλά το πώς έχεις πρόσβαση σε αυτές διαφέρει ανάλογα με τον τρόπο που εισάγεται η ενότητα.
Οι εισαγωγές με πρόθεμα είναι η προεπιλογή, και η πρόσβαση σε μια συνάρτηση μέσα σε μια τέτοια ενότητα (για παράδειγμα στη συνάρτηση map της ενότητας gleam/list) γίνεται βάζοντας πρόθεμα το όνομα της ενότητας (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)
}
Από προεπιλογή, το όνομα που χρησιμοποιείς για να αναφέρεσαι στην ενότητα είναι το τελευταίο μέρος του ονόματος της ενότητας, στην περίπτωση αυτή int, αλλά αυτό μπορεί να αλλάξει χρησιμοποιώντας τη λέξη-κλειδί as.
// 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)
}
Οι εισαγωγές χωρίς πρόθεμα δίνουν άμεση πρόσβαση στις εκτεθειμένες συναρτήσεις αυτής της ενότητας, χωρίς να χρειάζεται πρόθεμα.
// Import the to_string function from the int module
import gleam/int.{to_string}
pub fn run(x: Int) -> String {
to_string(x)
}
Οι εισαγωγές με πρόθεμα προτιμώνται, γιατί κάνουν πιο σαφές στον αναγνώστη από πού προέρχεται μια συνάρτηση και βοηθούν να αποφεύγονται οι συγκρούσεις ονομάτων.
Η Gleam έχει μια πλούσια και καλά τεκμηριωμένη τυπική βιβλιοθήκη. Η τεκμηρίωση είναι διαθέσιμη στο διαδίκτυο στη διεύθυνση hexdocs.pm/gleam_stdlib. Αποθήκευσε κάπου αυτόν τον σύνδεσμο, θα τον χρησιμοποιήσεις πολύ!
Οι περισσότεροι ενσωματωμένοι τύποι δεδομένων έχουν μια αντίστοιχη ενότητα που προσφέρει συναρτήσεις για εργασία με αυτόν τον τύπο δεδομένων, π.χ. υπάρχει η ενότητα gleam/int για ακέραιους, η ενότητα gleam/string για συμβολοσειρές, η ενότητα gleam/list για λίστες και ούτω καθεξής.
Σε αυτή την άσκηση θα γράψεις κώδικα για να βοηθήσεις το Betty's Bike Shop, ένα ηλεκτρονικό κατάστημα για ποδήλατα και ανταλλακτικά. Έχεις τρεις εργασίες, με στόχο να εμφανίζονται σωστά οι τιμές των ποδηλάτων και των ανταλλακτικών στην ιστοσελίδα.
pence_to_pounds
Ο συνάδελφός σου έχει ήδη γράψει τον σκελετό του module, τις ημιτελείς συναρτήσεις pence_to_pounds και pounds_to_string.
Ωστόσο, ξέχασε να εξάγει τη συνάρτηση pence_to_pounds, οπότε αυτή τη στιγμή δεν είναι ορατή από άλλα modules ή από τη σουίτα δοκιμών.
Εξήγαγε τη συνάρτηση pence_to_pounds.
Αυτή τη στιγμή, η τιμή αποθηκεύεται ως ακέραιος αριθμός πεννών (το κατάστημα ποδηλάτων εδρεύει στο Ηνωμένο Βασίλειο).
Στην ιστοσελίδα θέλουμε να δείχνουμε την τιμή σε λίρες, όπου 1,00 λίρα αντιστοιχεί σε 100 πέννες.
Η πρώτη σου εργασία είναι να υλοποιήσεις τη συνάρτηση pence_to_pounds, η οποία παίρνει ένα ποσό σε πέννες ως Int και το μετατρέπει στο αντίστοιχο ποσό σε λίρες ως Float.
Θα πρέπει επίσης να προσθέσεις annotations τύπων για αυτή τη συνάρτηση.
pence_to_pounds(106)
// -> 1.06
Επειδή τα ποδήλατα της Betty πωλούνται σε λίρες, οι τιμές πρέπει να εμφανίζονται με το σύμβολο "£".
Η δεύτερη εργασία σου είναι λοιπόν να υλοποιήσεις τη συνάρτηση pounds_to_string, η οποία παίρνει ένα ποσό σε λίρες ως Float και επιστρέφει την τιμή του ως String, με το σύμβολο της λίρας μπροστά.
Θα πρέπει να κάνεις εισαγωγή των modules gleam/float και gleam/string πριν τα χρησιμοποιήσεις.
Θα πρέπει επίσης να ορίσεις το annotation τύπου για τη συνάρτηση pounds_to_string.
pounds_to_string(1.06)
// -> "£1.06"
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Gleam με 33 έννοιες122 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.