Διαδρομές
/
Gleam
Gleam
/
Ασκήσεις
/
Ημέρα του Αγίου Βαλεντίνου
Ημέρα του Αγίου Βαλεντίνου

Ημέρα του Αγίου Βαλεντίνου

Άσκηση εκμάθησης

Εισαγωγή

Προσαρμοσμένοι τύποι

Οι προσαρμοσμένοι τύποι είναι ο τρόπος με τον οποίο ορίζονται νέοι τύποι δεδομένων στη 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"
  }
}

Οδηγίες

Σε αυτή την άσκηση είναι η μέρα του Αγίου Βαλεντίνου και εσύ και ο/η σύντροφός σου σχεδιάζετε να κάνετε κάτι ωραίο μαζί. Ο/η σύντροφός σου έχει πολλές ιδέες και τώρα σου ζητάει να τις βαθμολογήσεις, ώστε να βρείτε τη δραστηριότητα που θα κάνετε.

Ο/η σύντροφός σου προτείνει τις εξής ιδέες:

  • Να παίξετε επιτραπέζιο
  • Να χαλαρώσετε
  • Να δείτε μια ταινία
  • Να πάτε σε εστιατόριο
  • Να κάνετε μια βόλτα

Έχεις έξι εργασίες που θα σε βοηθήσουν να επιλέξεις τη δραστηριότητα για τη μέρα του Αγίου Βαλεντίνου.

1. Όρισε την έγκριση

Για κάθε ιδέα που προτείνει ο/η σύντροφός σου, απαντάς με μία από τρεις επιλογές: yes, no ή maybe.

Όρισε τον προσαρμοσμένο τύπο Approval ώστε να αναπαριστά αυτές τις επιλογές με τις εξής τρεις περιπτώσεις: Yes, No και Maybe.

2. Όρισε τις κουζίνες

Ο/η σύντροφός σου διάλεξε δύο πιθανά εστιατόρια: ένα με κορεάτικη κουζίνα και ένα με τουρκική κουζίνα.

Όρισε τον προσαρμοσμένο τύπο Cuisine ώστε να αναπαριστά αυτές τις κουζίνες με τις εξής δύο περιπτώσεις: Korean και Turkish.

3. Όρισε τα είδη ταινιών

Υπάρχουν πάρα πολλές ταινίες για να διαλέξεις, οπότε για να περιορίσετε τις επιλογές, ο/η σύντροφός σου αναφέρει και το είδος τους.

Όρισε τον προσαρμοσμένο τύπο Genre ώστε να αναπαριστά τα εξής είδη ως περιπτώσεις: Crime, Horror, Romance και Thriller.

4. Όρισε τη δραστηριότητα

Όπως είπαμε, ο/η σύντροφός σου σκέφτηκε πέντε διαφορετικές δραστηριότητες: να παίξετε επιτραπέζιο, να χαλαρώσετε, να δείτε μια ταινία, να πάτε σε εστιατόριο και να κάνετε μια βόλτα.

Όρισε τον προσαρμοσμένο τύπο Activity ώστε να αναπαριστά αυτούς τους τύπους δραστηριοτήτων:

  • BoardGame: χωρίς συσχετισμένα δεδομένα.
  • Chill: χωρίς συσχετισμένα δεδομένα.
  • Movie: έχει το Genre του ως συσχετισμένα δεδομένα.
  • Restaurant: έχει το Cuisine του ως συσχετισμένα δεδομένα.
  • Walk: έχει ένα Int που αναπαριστά τον αριθμό των χιλιομέτρων που θα περπατήσετε ως συσχετισμένα δεδομένα.

5. Βαθμολόγησε τη δραστηριότητα

Επιτέλους, ήρθε η ώρα να βαθμολογήσεις τις ιδέες του/της συντρόφου σου. Να πώς νιώθεις για την ιδέα του/της συντρόφου σου:

  • Να παίξετε επιτραπέζιο: no.
  • Να χαλαρώσετε: no.
  • Να δείτε μια ταινία: yes αν είναι ρομαντική ταινία, αλλιώς no.
  • Να πάτε σε εστιατόριο: yes αν η κουζίνα είναι Korean, maybe αν είναι Turkish.
  • Να κάνετε μια βόλτα: yes αν η βόλτα είναι πάνω από έντεκα χιλιόμετρα, maybe αν είναι πάνω από έξι χιλιόμετρα, αλλιώς no.

Υλοποίησε μια συνάρτηση με το όνομα rate_activity που παίρνει μια τιμή Activity και επιστρέφει το Approval με βάση τα παραπάνω συναισθήματα:

rate_activity(Restaurant(Turkish))
// -> Maybe
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Gleam Exercism

Έτοιμος να ξεκινήσεις την άσκηση Ημέρα του Αγίου Βαλεντίνου;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Gleam με 33 έννοιες122 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.