Οι προσαρμοσμένοι τύποι είναι ο τρόπος με τον οποίο ορίζονται νέοι τύποι δεδομένων στη Gleam. Μπορούν να έχουν πολλές παραλλαγές, καθεμία με το δικό της όνομα.
pub type Season {
Spring
Summer
Autumn
Winter
}
Κάθε περίπτωση ενός προσαρμοσμένου τύπου μπορεί προαιρετικά να περιέχει κάποια δεδομένα, και διαφορετικές περιπτώσεις μπορούν να έχουν διαφορετικούς τύπους δεδομένων. Όταν μια παραλλαγή περιέχει δεδομένα, ονομάζεται καταγραφή.
pub type Number {
SomeInt(Int)
SomeFloat(Float)
Invalid
}
Μπορείς να δημιουργήσεις μια τιμή για μια συγκεκριμένη περίπτωση αναφέροντας το όνομά της, αν δεν περιέχει επιπλέον δεδομένα (Spring), ή καλώντας την ως συνάρτηση, αν περιέχει (SomeInt(2)).
let spring = Spring
let integerTwo = SomeInt(2)
Οι προσαρμοσμένοι τύποι, όπως και τα πάντα στη Gleam, έχουν δομική ισότητα, που σημαίνει ότι δύο τιμές της ίδιας παραλλαγής και με τα ίδια δεδομένα είναι ισοδύναμες.
Spring == Spring // -> True
Spring == Autumn // -> False
SomeInt(2) == SomeInt(2) // -> True
SomeInt(2) == SomeFloat(2.0) // -> False
Οι παραλλαγές των προσαρμοσμένων τύπων μπορούν να ελεγχθούν με αντιστοίχιση προτύπων χρησιμοποιώντας εκφράσεις case.
import gleam/int
import gleam/float
pub fn describe(flexible_number: Number) -> String {
case flexible_number {
SomeFloat(f) -> "Float: " <> float.to_string(f)
SomeInt(i) -> "Int: " <> int.to_string(i)
Invalid -> "Neither a float nor an int"
}
}
Σε αυτή την άσκηση είναι η μέρα του Αγίου Βαλεντίνου και εσύ και ο/η σύντροφός σου σχεδιάζετε να κάνετε κάτι ωραίο μαζί. Ο/η σύντροφός σου έχει πολλές ιδέες και τώρα σου ζητάει να τις βαθμολογήσεις, ώστε να βρείτε τη δραστηριότητα που θα κάνετε.
Ο/η σύντροφός σου προτείνει τις εξής ιδέες:
Έχεις έξι εργασίες που θα σε βοηθήσουν να επιλέξεις τη δραστηριότητα για τη μέρα του Αγίου Βαλεντίνου.
Για κάθε ιδέα που προτείνει ο/η σύντροφός σου, απαντάς με μία από τρεις επιλογές: yes, no ή maybe.
Όρισε τον προσαρμοσμένο τύπο Approval ώστε να αναπαριστά αυτές τις επιλογές με τις εξής τρεις περιπτώσεις: Yes, No και Maybe.
Ο/η σύντροφός σου διάλεξε δύο πιθανά εστιατόρια: ένα με κορεάτικη κουζίνα και ένα με τουρκική κουζίνα.
Όρισε τον προσαρμοσμένο τύπο Cuisine ώστε να αναπαριστά αυτές τις κουζίνες με τις εξής δύο περιπτώσεις: Korean και Turkish.
Υπάρχουν πάρα πολλές ταινίες για να διαλέξεις, οπότε για να περιορίσετε τις επιλογές, ο/η σύντροφός σου αναφέρει και το είδος τους.
Όρισε τον προσαρμοσμένο τύπο Genre ώστε να αναπαριστά τα εξής είδη ως περιπτώσεις: Crime, Horror, Romance και Thriller.
Όπως είπαμε, ο/η σύντροφός σου σκέφτηκε πέντε διαφορετικές δραστηριότητες: να παίξετε επιτραπέζιο, να χαλαρώσετε, να δείτε μια ταινία, να πάτε σε εστιατόριο και να κάνετε μια βόλτα.
Όρισε τον προσαρμοσμένο τύπο Activity ώστε να αναπαριστά αυτούς τους τύπους δραστηριοτήτων:
BoardGame: χωρίς συσχετισμένα δεδομένα.Chill: χωρίς συσχετισμένα δεδομένα.Movie: έχει το Genre του ως συσχετισμένα δεδομένα.Restaurant: έχει το Cuisine του ως συσχετισμένα δεδομένα.Walk: έχει ένα Int που αναπαριστά τον αριθμό των χιλιομέτρων που θα περπατήσετε ως συσχετισμένα δεδομένα.Επιτέλους, ήρθε η ώρα να βαθμολογήσεις τις ιδέες του/της συντρόφου σου. Να πώς νιώθεις για την ιδέα του/της συντρόφου σου:
Υλοποίησε μια συνάρτηση με το όνομα rate_activity που παίρνει μια τιμή Activity και επιστρέφει το Approval με βάση τα παραπάνω συναισθήματα:
rate_activity(Restaurant(Turkish))
// -> Maybe
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Gleam με 33 έννοιες122 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.