Διαδρομές
/
Ruby
Ruby
/
Ασκήσεις
/
Το λιμάνι του Παλέρμο
Το λιμάνι του Παλέρμο

Το λιμάνι του Παλέρμο

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

Εισαγωγή

Τα symbols είναι ονομασμένα αναγνωριστικά που μπορούν να χρησιμοποιηθούν για να αναφέρονται σε μια τιμή. Τα symbols δημιουργούνται μέσω ενός κυριολεκτικού symbol, βάζοντας δηλαδή μπροστά από ένα όνομα τον χαρακτήρα :, π.χ. :foo. Μπορούν επίσης να γραφτούν και με εισαγωγικά, π.χ. :"foo", κάτι που επιτρέπει, για παράδειγμα, κενά μέσα στο όνομα.

:foo # => :foo
:"foo boo" # => :"foo boo"

Τα symbols χρησιμοποιούνται σε πολλά σημεία της γλώσσας, μεταξύ άλλων ως κλειδιά σε hashes, για να αναπαριστούν ονόματα μεθόδων και ονόματα μεταβλητών.

Αναγνωριστικό

Αυτό που κάνει τα symbols διαφορετικά από τις συμβολοσειρές είναι ότι είναι αναγνωριστικά και δεν αναπαριστούν δεδομένα ή κείμενο. Αυτό σημαίνει ότι δύο symbols με το ίδιο όνομα είναι πάντα το ίδιο αντικείμενο.

"foo".object_id # => 60
"foo".object_id # => 80
:foo.object_id # => 1086748
:foo.object_id # => 1086748

Τροποποίηση symbols

Τα symbols είναι αμετάβλητα, που σημαίνει ότι δε μπορούν να τροποποιηθούν. Αυτό σημαίνει ότι όταν "τροποποιείς" ένα symbol, στην πραγματικότητα δημιουργείς ένα νέο symbol. Υπάρχουν μερικές μέθοδοι που μπορούν να χρησιμοποιηθούν για τον χειρισμό symbols και όλες επιστρέφουν νέα symbols. Όλες οι μέθοδοι βρίσκονται στο Symbol API.

:foo.upcase # => :FOO

:foo.object_id # => 1086748
:foo.upcase.object_id # => 60

Το πλεονέκτημα του ότι τα symbols είναι αμετάβλητα είναι ότι είναι πιο αποδοτικά ως προς τη μνήμη από τις συμβολοσειρές, αλλά και ασφαλέστερα στη χρήση ως αναγνωριστικά.

Μετατροπή

Τα symbols μπορούν να μετατραπούν σε συμβολοσειρές και αντίστροφα. Αυτό μπορεί να φανεί χρήσιμο όταν θέλεις να τροποποιήσεις ένα symbol ή όταν θέλεις να χρησιμοποιήσεις ένα symbol ως συμβολοσειρά. Για να παρουσιάσεις μια συμβολοσειρά ως symbol, μπορείς να χρησιμοποιήσεις τη μέθοδο String#to_sym και για το αντίθετο, τη μέθοδο Symbol#to_s. Επειδή τα symbols έχουν περιορισμένο σύνολο μεθόδων, μπορεί να φανεί χρήσιμο να μετατρέψεις ένα symbol σε συμβολοσειρά για να χρησιμοποιήσεις πάνω του μεθόδους συμβολοσειρών, αν χρειάζεσαι ένα νέο symbol.

:foo.to_s # => "foo"
"foo".to_sym # => :foo

Οδηγίες

Το λιμάνι του Παλέρμο είναι ένα πολυσύχναστο λιμάνι, με πολλά πλοία να έρχονται και να φεύγουν. Εδώ και πολύ καιρό χρησιμοποιεί ένα χειροκίνητο σύστημα για να παρακολουθεί τα πλοία που βρίσκονται αυτή τη στιγμή στο λιμάνι. Αυτό το σύστημα είναι πολύ επιρρεπές σε λάθη και ο λιμενάρχης αποφάσισε να το αντικαταστήσει με ένα μηχανογραφημένο σύστημα.

Ο λιμενάρχης σε προσέλαβε για να υλοποιήσεις το νέο σύστημα. Το σύστημα πρέπει να χειρίζεται αναγνωριστικά για πλοία, αλλά και για προορισμούς.

1. Δημιούργησε το αναγνωριστικό του λιμανιού

Το πρώτο πράγμα που πρέπει να κάνεις είναι να δημιουργήσεις το αναγνωριστικό για το λιμάνι του Παλέρμο. Το αναγνωριστικό είναι τα πρώτα τέσσερα γράμματα του ονόματος του λιμανιού, με κεφαλαία.

Όρισε τη σταθερά Port::IDENTIFIER να είναι ένα σύμβολο με την τιμή :PALE.

Port::IDENTIFIER 
# => :PALE

2. Πάρε αναγνωριστικά για άλλα λιμάνια

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

Όρισε τη μέθοδο Port.get_identifier ώστε να παίρνει μια συμβολοσειρά ως όρισμα και να επιστρέφει το αναγνωριστικό για αυτό το λιμάνι ως σύμβολο.

Port.get_identifier("Hamburg") 
# => :HAMB

3. Προσδιόρισε σε ποιον τερματικό σταθμό πρέπει να δέσει ένα πλοίο

Το λιμάνι έχει δύο τερματικούς σταθμούς και το σύστημα πρέπει να προσδιορίζει σε ποιον τερματικό σταθμό πρέπει να δέσει ένα πλοίο. Ο τερματικός σταθμός καθορίζεται από το αναγνωριστικό του πλοίου.

Το αναγνωριστικό αποτελείται από 2 μέρη: το πρώτο μέρος αποτελείται από 3 κεφαλαία γράμματα που δηλώνουν ποιο φορτίο μεταφέρει το πλοίο και, στη συνέχεια, 3 αριθμούς που είναι το μοναδικό αναγνωριστικό του πλοίου.

Αν το αναγνωριστικό του πλοίου μεταφέρει: OIL ή GAS, το πλοίο πρέπει να δέσει στον τερματικό σταθμό A. Αλλιώς, το πλοίο πρέπει να δέσει στον τερματικό σταθμό B.

Όρισε τη μέθοδο Port.get_terminal ώστε να παίρνει ως όρισμα ένα σύμβολο, το οποίο είναι το αναγνωριστικό του πλοίου. Η μέθοδος πρέπει να επιστρέφει τον τερματικό σταθμό ως σύμβολο.

Port.get_terminal(:OIL123)
# => :A
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Ruby Exercism

Έτοιμος να ξεκινήσεις την άσκηση Το λιμάνι του Παλέρμο;

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