Το Char είναι ένας τύπος δεδομένων στη Crystal που αναπαριστά ένα σημείο κώδικα Unicode 32 bit.
Το μέγεθός τους τα κάνει οικονομικά σε μνήμη και τους δίνει συγκεκριμένες ιδιότητες που δεν έχουν οι συμβολοσειρές.
Δημιουργούνται με απλά εισαγωγικά (') και επιτρέπουν να μπει μέσα μόνο ένα σημείο κώδικα Unicode.
'a' # => 'a'
'a'.class # => Char
Είναι αρκετά συνηθισμένο να δουλεύεις με Chars όταν δουλεύεις με συμβολοσειρές στη Crystal, αφού αρκετές μέθοδοι της κλάσης String επιστρέφουν Chars ή δέχονται Chars ως ορίσματα.
Για παράδειγμα, η μέθοδος String#[] επιστρέφει ένα Char, ή η μέθοδος String#chars επιστρέφει μια συλλογή από Chars.
Επειδή το char είναι ένα σημείο Unicode 32 bit, υποστηρίζει αύξηση και μείωση, κι έτσι αν έχεις το 'a' μπορείς να πάρεις το 'b' προσθέτοντας ένα.
'a' + 5
# => 'f'
'z' - 25
# => 'a'
Υπάρχει επίσης μια μέθοδος που ονομάζεται Char#succ, η οποία επιστρέφει το επόμενο char στον πίνακα Unicode, και η Char#pred, η οποία επιστρέφει το προηγούμενο char στον πίνακα Unicode.
'a'.succ
# => 'b'
'z'.pred
# => 'y'
Επειδή το Char προορίζεται να αναπαριστά μόνο ένα σημείο Unicode 32 bit, δύο chars δεν μπορούν να συνενωθούν. Επομένως, τα Chars μπορούν να συνενωθούν μόνο με συμβολοσειρές.
'a' + "bc"
# => "abc"
'a' + 'b'
# => error: expected argument #1 to 'Char#+' to be Int or String, not Char
Η Crystal έχει μερικές μεθόδους για να παίρνεις πληροφορίες για έναν χαρακτήρα, όπως αν είναι αριθμός ή γράμμα ή αν είναι πεζός ή κεφαλαίος. Ακολουθεί μια λίστα με μερικές από τις μεθόδους, για την πλήρη λίστα δες το Char API:
| Μέθοδος | Περιγραφή |
|---|---|
Char#number? |
Επιστρέφει true αν το Char είναι αριθμός |
Char#letter? |
Επιστρέφει true αν το Char είναι γράμμα |
Char#lowercase? |
Επιστρέφει true αν το Char είναι πεζό |
Char#uppercase? |
Επιστρέφει true αν το Char είναι κεφαλαίο |
Char#ascii? |
Επιστρέφει true αν το Char είναι χαρακτήρας ASCII |
Char#whitespace? |
Επιστρέφει true αν το Char είναι χαρακτήρας κενού |
Επειδή το Char είναι ένα σημείο Unicode 32 bit, μπορείς να μετατρέψεις μεταξύ Chars και σημείων κώδικα (Int).
Αυτό μπορεί να γίνει με τη μέθοδο Char#ord, η οποία θα επιστρέψει το σημείο κώδικα του Char, ή με τη μέθοδο Int#chr, η οποία θα επιστρέψει το Char του σημείου κώδικα.
'a'.ord
# => 97
97.chr
# => 'a'
Όπως και με τους άλλους τύπους δεδομένων, τα chars έχουν μερικές μεθόδους για μετατροπή μεταξύ τύπων.
Η πιο συνηθισμένη είναι η μέθοδος Char#to_s, η οποία μετατρέπει το Char σε συμβολοσειρά. Ωστόσο, υπάρχει επίσης η μέθοδος Char#to_i, η οποία μετατρέπει το Char σε Int, και η μέθοδος Char#to_f, η οποία μετατρέπει το Char σε Float.
'a'.to_s
# => "a"
'4'.to_i
# => 4
'a'.to_i
# => Error: Invalid integer: a (ArgumentError)
Η βιβλιοθήκη του Luton είναι μια μεγάλη βιβλιοθήκη με μια μεγάλη συλλογή λογοτεχνίας, που περιλαμβάνει από βιβλία μέχρι τέχνη. Η βιβλιοθήκη έχει ένα τμήμα όπου μελετούν τη λογοτεχνία και προσθέτουν βιβλία στο σύστημα του υπολογιστή.
Κάποια κομμάτια στοχεύουν να αυτοματοποιηθούν και σου ζητείται να βοηθήσεις. Αυτό περιλαμβάνει από την αυτοματοποίηση των φορμών της διαδικασίας εγγραφής μέχρι τη βοήθεια στην αποκρυπτογράφηση κειμένων.
Τα βιβλία μιας βιβλιοθήκης υποτίθεται ότι είναι εύκολο να βρεθούν, γι' αυτό ταξινομούνται με βάση το πρώτο γράμμα του τίτλου.
Υλοποίησε τη μέθοδο Library.first_letter, η οποία παίρνει ένα όρισμα title, που περιέχει τον τίτλο του βιβλίου.
Η μέθοδος πρέπει να επιστρέφει το πρώτο γράμμα του τίτλου.
Library.first_letter("Mystery of the Crystal Skull")
# => 'M'
Η βιβλιοθήκη έχει πολλά βιβλία γραμμένα από διαφορετικούς συγγραφείς.
Οι συγγραφείς αναφέρονται συχνά με τα αρχικά τους, γι' αυτό η βιβλιοθήκη ζήτησε ένα σύστημα που δίνει τα αρχικά του συγγραφέα εισάγοντας το όνομα και το επώνυμο του συγγραφέα.
Τα αρχικά πρέπει να έχουν τη μορφή: {first_letter_of_first_name}.{first_letter_of_last_name}
Υλοποίησε τη μέθοδο Library.initials που παίρνει δύο ορίσματα first_name και last_name, τα οποία περιέχουν το όνομα και το επώνυμο του συγγραφέα.
Η μέθοδος πρέπει να επιστρέφει τα αρχικά του συγγραφέα.
Library.initials("William", "Shakespeare")
# => "W.S"
Κάποια λογοτεχνία είναι κρυπτογραφημένη και η βιβλιοθήκη έχει πολλά κρυπτογραφημένα κείμενα. Η βιβλιοθήκη θα ήθελε ένα νέο σύστημα αποκρυπτογράφησης για ειδική κρυπτογράφηση.
Η κρυπτογράφηση λειτουργεί παίρνοντας το γράμμα και αντικαθιστώντας το με το γράμμα που προηγείται στο αλφάβητο.
Για παράδειγμα, το a γίνεται z, το b γίνεται a, το c γίνεται b, και ούτω καθεξής.
Η βιβλιοθήκη θα ήθελε να μπορεί να αποκρυπτογραφεί και κεφαλαία και πεζά γράμματα, διατηρώντας την ίδια γραφή με το αρχικό γράμμα.
Υλοποίησε τη μέθοδο Library.decrypt_character, η οποία παίρνει ένα όρισμα character, που περιέχει το γράμμα προς αποκρυπτογράφηση.
Η μέθοδος πρέπει να επιστρέφει το αποκρυπτογραφημένο γράμμα.
Library.decrypt_character('a')
# => 'z'
Η βιβλιοθήκη θα ήθελε επίσης να αποκρυπτογραφεί ένα ολόκληρο κείμενο, με την κρυπτογράφηση που παίρνει το προηγούμενο γράμμα στο αλφάβητο.
Ο αποκρυπτογραφητής πρέπει να αποκρυπτογραφεί μόνο γράμματα και να αφήνει όλους τους άλλους χαρακτήρες ως έχουν.
Υλοποίησε τη μέθοδο Library.decrypt_text, η οποία παίρνει ένα όρισμα text, που περιέχει το κείμενο προς αποκρυπτογράφηση.
Η μέθοδος πρέπει να επιστρέφει το αποκρυπτογραφημένο κείμενο.
Library.decrypt_text("Ifmmp Xpsme!")
# => "Hello World!"
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Crystal με 26 έννοιες142 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.