Ένας σημαντικός τρόπος οργάνωσης του κώδικα είναι η χρήση χώρων ονομάτων.
Οι κλάσεις και τα αρθρώματα παρέχουν χώρους ονομάτων.
Δύο μέθοδοι μπορεί να έχουν σύγκρουση ονομάτων, η οποία μπορεί να λυθεί βάζοντάς τες σε διαφορετικούς χώρους ονομάτων.
Οι χώροι ονομάτων μπορούν να είναι εμφωλευμένοι, κάτι που μπορεί να βοηθήσει στη δομή μεγάλων βάσεων κώδικα.
Η πρόσβαση στους χώρους ονομάτων γίνεται μέσω του τελεστή προσδιορισμού εμβέλειας ::.
Το παρακάτω παράδειγμα δείχνει τη χρήση δύο διαφορετικών μεθόδων foo.
Χρησιμοποιούνται μαζί, προτάσσοντας τους αντίστοιχους χώρους ονομάτων τους.
class MyNamespace
def self.foo
44
end
class MyInnerNamespace
def self.baz
90
end
end
end
class MyOtherNamespace
def self.foo
-2
end
end
p MyNamespace::foo + MyOtherNamespace::foo * MyNamespace::MyInnerNamespace::baz # => -136
Πρόσεξε ότι οι χώροι ονομάτων ερμηνεύονται με βάση το πού βρίσκεται ο κώδικας που εκτελείται.
Για να αναφερθείς σε κάτι στον χώρο ονομάτων ρίζας (δηλαδή έξω από όλους τους ορισμένους χώρους ονομάτων), ξεκίνα με ::.
Για παράδειγμα:
class Example
def self.example
5
end
end
class MyNamespace
class Example
def self.example
10
end
end
def self.call_example
p Example::example # => 10
p ::Example::example # => 5
end
end
Εργάζεσαι σε ένα φημισμένο δικηγορικό γραφείο που ειδικεύεται σε μοναδικά αιτήματα διαθηκών.
Σε αυτή την άσκηση, θα ανοίξεις ένα μυστηριώδες θησαυροφυλάκιο. Είσαι ο εκτελεστής της κληρονομιάς και θα συνθέσεις τους επί μακρόν φυλαγμένους μυστικούς κωδικούς τριών οικογενειών για να πάρεις έναν αριθμό λογαριασμού και τον αντίστοιχο κωδικό.
Για να μην μπορεί καμία οικογένεια να ανοίξει το θησαυροφυλάκιο μόνη της, αυτό ανοίγει μόνο αν συνδυάσεις τις γνώσεις τους με έναν μυστικό τροποποιητή που γνωρίζεις από τη διαθήκη.
Έχεις τρεις εργασίες, όλες σχετικές με το να βοηθήσεις τις οικογένειες να ανοίξουν το θησαυροφυλάκιο.
Όρισε έναν χώρο ονομάτων με το όνομα EstateExecutor.
Ο κώδικας από τις επόμενες εργασίες θα πρέπει να οριστεί στο σώμα του χώρου ονομάτων EstateExecutor.
class SomeName
# The space between the class/module name
# and the `end` keyword
# is called body of the namespace.
end
Αυτή είναι η μεγάλη σου στιγμή. Μόνο εσύ έχεις το μυστικό κλειδί τροποποιητή για να αποκαλύψεις τον μυστικό αριθμό λογαριασμού.
Όρισε τη μέθοδο assemble_account_number(secret_modifier) που παίρνει ως όρισμα τον μυστικό τροποποιητή Integer και επιστρέφει τον συναρμολογημένο αριθμό λογαριασμού Integer.
Για να πάρεις τον σωστό αριθμό, πρέπει να αθροίσεις το bank_number_part από καθεμία από τις τρεις οικογένειες.
Οι οδηγίες στη διαθήκη σου ζητούν να προσθέσεις πρώτα όλα τα μπλε και μετά όλα τα κόκκινα θραύσματα. Ο κωδικός που προκύπτει βγαίνει πολλαπλασιάζοντας τα δύο αθροίσματα.
Όρισε τη μέθοδο assemble_code που επιστρέφει τον κωδικό που προκύπτει, συνδυάζοντας τα θραύσματα από τις τρεις οικογένειες σε ένα μόνο αποτέλεσμα Integer.
Η μέθοδος δεν παίρνει κανένα όρισμα και βασίζεται αποκλειστικά στις πληροφορίες που βρίσκονται στους σχετικούς χώρους ονομάτων των οικογενειών.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ruby με 21 έννοιες121 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.