Η Crystal έχει έναν τύπο γνωστό ως String, που χρησιμοποιείται για να αναπαραστήσει κείμενο.
Οι συμβολοσειρές της Crystal είναι ακολουθίες χαρακτήρων Unicode.
Οι συμβολοσειρές είναι αμετάβλητες, που σημαίνει ότι δεν μπορούν να αλλάξουν μόλις δημιουργηθούν.
Αυτό σημαίνει ότι δημιουργείται μια νέα συμβολοσειρά κάθε φορά που τροποποιείς μια συμβολοσειρά· επομένως, η αρχική συμβολοσειρά δεν τροποποιείται.
Για να ορίσεις μια συμβολοσειρά χρησιμοποιείς διπλά εισαγωγικά ".
"Hello World"
Για να συνενώσεις δύο συμβολοσειρές, χρησιμοποίησε τον τελεστή +.
Ο τελεστής + θα επιστρέψει μια νέα συμβολοσειρά που συνδυάζει τις δύο συμβολοσειρές.
hello = "Hello"
hello + " World"
# => "Hello World"
Η μέθοδος to_i μετατρέπει μια συμβολοσειρά σε ακέραιο.
Εναλλακτικά, η μέθοδος to_f μπορεί να χρησιμοποιηθεί για να επιστρέψει έναν αριθμό κινητής υποδιαστολής.
Αν η συμβολοσειρά δεν μπορεί να μετατραπεί σε αριθμό, τότε θα πεταχτεί ένα ArgumentError.
"1".to_i
# => 1
"1.0".to_f
# => 1.0
"Hello".to_i
# => ArgumentError: Invalid integer: Hello
Ένας ακέραιος ή ένας αριθμός κινητής υποδιαστολής μπορεί να μετατραπεί σε συμβολοσειρά χρησιμοποιώντας τη μέθοδο to_s.
1.to_s
# => "1"
1.0.to_s
# => "1.0"
Η παρεμβολή είναι ένας βολικός τρόπος να συνδυάζεις συμβολοσειρές και να ενσωματώνεις εκφράσεις μέσα σε συμβολοσειρές.
Για να κάνεις παρεμβολή σε μια συμβολοσειρά, μπορείς να χρησιμοποιήσεις τον χαρακτήρα # ακολουθούμενο από άγκιστρα {} με την έκφραση μέσα στα άγκιστρα.
name = "World"
"Hello #{name}!"
# => "Hello World!"
Η Crystal θα μετατρέψει αυτόματα το αποτέλεσμα της έκφρασης σε συμβολοσειρά.
"Hello #{1 + 1}!"
# => "Hello 2!"
Όταν χρειάζεται να μάθεις τον αριθμό των χαρακτήρων σε μια συμβολοσειρά, μπορείς να χρησιμοποιήσεις τη μέθοδο size, η οποία επιστρέφει το μήκος της συμβολοσειράς ως ακέραιο.
Το μέγεθος μιας συμβολοσειράς είναι μια αποθηκευμένη ιδιότητα της συμβολοσειράς, οπότε δεν χρειάζεται να υπολογίζει το μέγεθος κάθε φορά που καλείς τη μέθοδο, κάνοντάς το πολύ γρήγορο.
"Hello World".size
# => 11
Η προσπέλαση με θέση είναι όταν θέλεις να πάρεις έναν συγκεκριμένο χαρακτήρα από μια συμβολοσειρά.
Για να πάρεις έναν χαρακτήρα από μια String, μπορείς να χρησιμοποιήσεις τη γνωστή σημειογραφία με αγκύλες.
Το [] υλοποιείται ως μέθοδος στιγμιοτύπου της String, όπου η θέση είναι το όρισμα της μεθόδου.
Ο πρώτος χαρακτήρας σε μια συμβολοσειρά βρίσκεται στη θέση 0.
"Hello World"[0]
# => 'H'
"Hello World"[6]
# => 'W'
Για να πάρεις έναν χαρακτήρα από το τέλος μιας συμβολοσειράς, μπορείς να πάρεις το μήκος της συμβολοσειράς μείον ένα για να βρεις τη θέση του τελευταίου χαρακτήρα, και για να πάρεις τον προτελευταίο χαρακτήρα, μπορείς να πάρεις το μήκος της συμβολοσειράς μείον δύο, και ούτω καθεξής. Υπάρχει ένας συντομότερος τρόπος για αυτό, και είναι απλώς να χρησιμοποιήσεις μια αρνητική θέση, όπου ο τελευταίος χαρακτήρας βρίσκεται στη θέση -1, ο προτελευταίος χαρακτήρας στη θέση -2, και ούτω καθεξής.
name = "Hello World"
name[name.size - 1]
# => 'd'
name[-1]
# => 'd'
Κάποιοι χαρακτήρες δεν μπορούν να γραφτούν απευθείας σε μια συμβολοσειρά· αντ' αυτού, πρέπει να χρησιμοποιήσεις μια ακολουθία διαφυγής.
Για παράδειγμα, αν θέλεις να χρησιμοποιήσεις διπλά εισαγωγικά μέσα σε μια συμβολοσειρά, πρέπει να κάνεις διαφυγή στα διπλά εισαγωγικά.
Μπορείς να χρησιμοποιήσεις τον χαρακτήρα \ για να γράψεις μια ακολουθία διαφυγής, ακολουθούμενη από τον χαρακτήρα που θέλεις να κάνεις διαφυγή.
Αυτοί είναι οι ειδικοί χαρακτήρες στην Crystal:
| Τιμή | Περιγραφή |
|---|---|
\a |
Ειδοποίηση |
\b |
Οπισθοχώρηση |
\e |
Διαφυγή |
\f |
Αλλαγή σελίδας |
\n |
Αλλαγή γραμμής ή νέα γραμμή |
\r |
Επιστροφή καροτσιού |
\t |
Οριζόντιος στηλοθέτης |
\v |
Κατακόρυφος στηλοθέτης |
\\ |
Ανάποδη κάθετος |
\' |
Απλό εισαγωγικό |
\" |
Διπλό εισαγωγικό |
\377 |
Οκταδικός χαρακτήρας ASCII |
\xFF |
Δεκαεξαδικός χαρακτήρας ASCII |
\uFFFF |
Δεκαεξαδικός χαρακτήρας Unicode |
puts "Hello \"World\""
# => Hello "World"
puts "Hello \nWorld"
# => Hello
# => World
Για να γράψεις μια πολυγραμμική συμβολοσειρά, χρησιμοποιείς την ίδια σύνταξη όπως σε μια συμβολοσειρά μιας γραμμής, αλλά αλλάζεις γραμμή για κάθε γραμμή που θέλεις να περιέχει η συμβολοσειρά.
"Hello
World"
# => "Hello\nWorld"
Μια φορά κι έναν καιρό ζούσε ένας εκκεντρικός προγραμματιστής σε ένα παράξενο σπίτι με κάγκελα στα παράθυρα. Μια μέρα δέχτηκε μια δουλειά από μια διαδικτυακή πλατφόρμα εργασίας για να φτιάξει ένα ρομπότ για πάρτι. Το ρομπότ υποτίθεται ότι χαιρετάει τους ανθρώπους και τους βοηθάει να βρουν τις θέσεις τους. Η πρώτη έκδοση ήταν πολύ τεχνική και έδειχνε την έλλειψη ανθρώπινης επαφής του προγραμματιστή. Κάποια από αυτά πέρασαν και στην επόμενη έκδοση.
Υλοποίησε τη μέθοδο welcome ώστε να επιστρέφει ένα μήνυμα καλωσορίσματος χρησιμοποιώντας το όνομα που δίνεται:
PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!
Υλοποίησε τη μέθοδο happy_birthday ώστε να επιστρέφει ένα μήνυμα γενεθλίων χρησιμοποιώντας το όνομα και την ηλικία του ατόμου που δίνονται.
Δυστυχώς ο προγραμματιστής είναι λίγο επιδειξίας, οπότε το ρομπότ πρέπει να αποδεικνύει τη γνώση του για τα γενέθλια κάθε καλεσμένου.
PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!
Υλοποίησε τη συνάρτηση assign_table ώστε να δίνει οδηγίες.
Θα πρέπει να δέχεται 5 παραμέτρους.
String)Int)String)String)Float64)Η ακριβής μορφή του αποτελέσματος φαίνεται στο παράδειγμα παρακάτω.
Το όνομα του διπλανού καλεσμένου θα πρέπει να συντομεύεται στο πρώτο και το τελευταίο γράμμα του ονόματος. Ο Frank γίνεται Fk, ο Christian γίνεται Cn, και ούτω καθεξής.
Το ρομπότ δίνει τον αριθμό του τραπεζιού. Το ρομπότ αναφέρει επίσης την απόσταση του τραπεζιού. Ευτυχώς, μόνο με ακρίβεια που περιορίζεται σε 1 ψηφίο.
PartyRobot.assign_table("Christiane", "on the left", 27, 23.7834298, "Frank")
# =>
# Welcome to my party, Christiane!
# You have been assigned to table 27. Your table is on the left, exactly 23.8 meters from here.
# You will be sitting next to Fk.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Crystal με 26 έννοιες142 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.