Τα εύρη αντιπροσωπεύουν ένα διάστημα μεταξύ δύο τιμών.
Οι πιο συνηθισμένοι τύποι που υποστηρίζουν εύρη είναι οι Integer και String.
Μπορούν να χρησιμοποιηθούν για πολλά πράγματα, όπως η γρήγορη δημιουργία μιας συλλογής, το κόψιμο συμβολοσειρών, ο έλεγχος αν μια τιμή βρίσκεται μέσα σε ένα εύρος και η επανάληψη.
Δημιουργούνται με τον τελεστή εύρους .. ή ... (περιεκτικό και αποκλειστικό αντίστοιχα).
1..5 # => 1..5
1...5 # => 1...5
(1..5).to_a # => [1, 2, 3, 4, 5]
(1...5).to_a # => [1, 2, 3, 4]
Ο λόγος που υπάρχουν δύο τελεστές εύρους είναι για να μπορείς να δημιουργείς εύρη που περιλαμβάνουν ή όχι την τελική τιμή, κάτι που είναι χρήσιμο, για παράδειγμα, όταν δουλεύεις με θέσεις που ξεκινούν από το μηδέν.
Τα εύρη μπορούν επίσης να δημιουργηθούν με τον κατασκευαστή Range, το new.
Range.new(1, 5) # A range containing 1, 2, 3, 4, 5
Όταν δημιουργείς ένα εύρος στη Ruby με τους τελεστές εύρους .. ή ... και θέλεις να καλέσεις μια μέθοδο πάνω στο εύρος, πρέπει να βάλεις το εύρος μέσα σε παρενθέσεις.
Αυτό συμβαίνει γιατί, αλλιώς, η μέθοδος θα κληθεί στο 2ο όρισμα του τελεστή εύρους.
(1..5).sum # => 15
1..5.sum # => Error: undefined method `sum' for 5:Integer (NoMethodError)
Όταν θέλεις να κόψεις μια συμβολοσειρά, μπορείς να χρησιμοποιήσεις τον τελεστή εύρους για να πάρεις μια υποσυμβολοσειρά. Δηλαδή, δημιουργώντας ένα εύρος με τη θέση αρχής και τέλους της υποσυμβολοσειράς.
"Hello World"[0..4] # => "Hello"
"Hello World"[6..10] # => "World"
Μπορείς επίσης να χρησιμοποιήσεις αρνητικές θέσεις για να πάρεις την υποσυμβολοσειρά από το τέλος της συμβολοσειράς.
"Hello World"[-5..-1] # => "World"
"Hello World"[6..-4] # => "Wo"
Τα εύρη έχουν ένα σύνολο μεθόδων που μπορούν να χρησιμοποιηθούν για να δουλέψεις μαζί τους. Για παράδειγμα, αυτές οι μέθοδοι μπορούν να χρησιμοποιηθούν για να πάρεις το άθροισμα όλων των τιμών στο εύρος ή να ελέγξεις αν το εύρος περιλαμβάνει μια τιμή.
| Method | Description | Example |
|---|---|---|
sum |
Επιστρέφει το άθροισμα όλων των τιμών στο εύρος | (1..5).sum # => 15 |
size |
Επιστρέφει το μέγεθος του εύρους | (1..5).size # => 5 |
include? |
Επιστρέφει true αν το εύρος περιλαμβάνει τη δεδομένη τιμή, αλλιώς false
|
(1..5).include?(3) # => true |
Ένα εύρος μπορεί να είναι χωρίς τέλος και χωρίς αρχή.
Το εύρος χωρίς τέλος ή χωρίς αρχή έχει ως τιμή αρχής ή τέλους το nil, αλλά όταν ορίζεις το εύρος μπορείς να παραλείψεις το nil.
Η χρήση ευρών χωρίς αρχή και χωρίς τέλος είναι χρήσιμη όταν θέλεις, για παράδειγμα, να κόψεις μια συμβολοσειρά από την αρχή ή μέχρι το τέλος.
"Hello World"[0..] # => "Hello World"
"Hello World"[4..] # => "o World"
"Hello World"[..5] # => "Hello "
Αν δεν χρησιμοποιηθεί πάνω σε μια συλλογή, το εύρος χωρίς τέλος μπορεί να δημιουργήσει μια ατέρμονη ακολουθία, αν δεν το χρησιμοποιήσεις με προσοχή.
Οι συμβολοσειρές μπορούν επίσης να χρησιμοποιηθούν σε εύρη και σου επιτρέπουν να πάρεις ένα διάστημα συμβολοσειρών ανάμεσα σε δύο συμβολοσειρές. Η συμπεριφορά μπορεί να είναι λίγο απρόβλεπτη με ορισμένες συμβολοσειρές, οπότε καλό είναι να το χρησιμοποιείς με προσοχή.
("aa".."az").to_a # => ["aa", "ab", "ac", ..., "az"]
Ως λάτρης του σκακιού, θα ήθελες να γράψεις τη δική σου εκδοχή του παιχνιδιού. Ναι, μπορεί να υπάρχουν ήδη πολλές υλοποιήσεις του σκακιού διαθέσιμες στο διαδίκτυο, αλλά η δική σου θα είναι μοναδική!
Ξεκινάς υλοποιώντας ένα βασικό σύστημα κίνησης για τα πιόνια.
Το παιχνίδι σκακιού θα παίζεται σε μια σκακιέρα που έχει 8 τετράγωνα πλάτος και 8 τετράγωνα μήκος. Τα τετράγωνα προσδιορίζονται από ένα γράμμα και έναν αριθμό.
Το παιχνίδι θα πρέπει να αποθηκεύει τις γραμμές της σκακιέρας. Οι γραμμές είναι οι σειρές της σκακιέρας και αριθμούνται από το 1 έως το 8.
Το παιχνίδι θα πρέπει επίσης να αποθηκεύει τις στήλες της σκακιέρας. Οι στήλες είναι οι κολόνες της σκακιέρας και προσδιορίζονται από τα γράμματα A έως H.
Όρισε τις σταθερές Chess::RANKS και Chess::FILES που αποθηκεύουν το εύρος των γραμμών και των στηλών αντίστοιχα.
Chess::RANKS
# => 1..8
Chess::FILES
# => 'A'..'H'
Το παιχνίδι θα πρέπει να ελέγχει αν ένα τετράγωνο είναι έγκυρο. Ένα τετράγωνο είναι έγκυρο αν η γραμμή και η στήλη βρίσκονται μέσα στα εύρη των γραμμών και των στηλών.
Όρισε τη μέθοδο Chess.valid_square? που δέχεται τα ορίσματα rank που περιέχει έναν ακέραιο της γραμμής και file που περιέχει έναν χαρακτήρα της στήλης.
Η μέθοδος θα πρέπει να επιστρέφει true αν η γραμμή και η στήλη βρίσκονται μέσα στα εύρη των γραμμών και των στηλών και να επιστρέφει false διαφορετικά.
Chess.valid_square?(1, 'A')
# => true
Το παιχνίδι θα πρέπει να παίρνει το ψευδώνυμο του παίκτη. Το ψευδώνυμο αποτελείται από τους πρώτους 2 χαρακτήρες του ονόματος του παίκτη και τους τελευταίους 2 χαρακτήρες του επωνύμου του. Το ψευδώνυμο θα πρέπει να γράφεται με κεφαλαία.
Όρισε τη μέθοδο Chess.nickname που δέχεται τα ορίσματα first_name που περιέχει μια συμβολοσειρά με το όνομα του παίκτη και last_name που περιέχει μια συμβολοσειρά με το επώνυμο του παίκτη.
Η μέθοδος θα πρέπει να επιστρέφει το ψευδώνυμο του παίκτη ως συμβολοσειρά με κεφαλαία.
Chess.nickname("John", "Doe")
# => "JOOE"
Το παιχνίδι θα πρέπει να δημιουργεί ένα μήνυμα για μια κίνηση που να λέει ποιος παίκτης μετακινήθηκε σε ποιο τετράγωνο. Το μήνυμα θα πρέπει να χρησιμοποιεί το ψευδώνυμο του παίκτη και το τετράγωνο στο οποίο μετακινήθηκε. Το παιχνίδι πρέπει επίσης να προσδιορίζει αν η κίνηση είναι έγκυρη ελέγχοντας αν η στήλη και η γραμμή του τετραγώνου βρίσκονται μέσα στα εύρη των στηλών και των γραμμών.
Αν η κίνηση είναι έγκυρη, το μήνυμα θα πρέπει να είναι: "{nickname} moved to {square}"
Αν η κίνηση δεν είναι έγκυρη, το μήνυμα θα πρέπει να είναι: "{nickname} attempted to move to {square}, but that is not a valid square"
Όρισε τη μέθοδο Chess.move_message που δέχεται τα ορίσματα first_name που περιέχει μια συμβολοσειρά με το όνομα του παίκτη, last_name που περιέχει μια συμβολοσειρά με το επώνυμο του παίκτη, και square που περιέχει μια συμβολοσειρά με το τετράγωνο στο οποίο μετακινήθηκε ο παίκτης.
Η μέθοδος θα πρέπει να επιστρέφει το μήνυμα για την κίνηση ως συμβολοσειρά.
Chess.move_message("John", "Doe", "A1")
# => "JOOE moved to A1"
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ruby με 21 έννοιες121 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.