Ruby είναι μια διερμηνευόμενη, δυναμική, ανακλαστική, αντικειμενοστρεφής γλώσσα προγραμματισμού. Αναπτύχθηκε από τον Yukihiro Matsumoto, η Ruby εστιάζει στην απλότητα και την παραγωγικότητα. Η κομψή σύνταξη επιτρέπει στους προγραμματιστές να διαβάζουν και να γράφουν κώδικα πιο εύκολα.
Σε αυτόν τον οδηγό, θα εργαστούμε με συμβολοσειρές στη Ruby.
Προαπαιτούμενα
Για να εκτελέσετε τα βήματα που παρουσιάζονται σε αυτό το σεμινάριο, χρειάζεστε τα ακόλουθα στοιχεία:
- Ένα σωστά ρυθμισμένο σύστημα Ubuntu. Μάθετε περισσότερα σχετικά με τη ρύθμιση του δικού σας διακομιστή Ubuntu στο CloudSigma.
- Οποιοδήποτε σύγχρονο πρόγραμμα επεξεργασίας κειμένου, κατά προτίμηση με επισήμανση σύνταξης, για παράδειγμα, VS Code, Sublime Text, Atom, Brackets, Vim, κ.λπ.
Ο τύπος δεδομένων String
Στον προγραμματισμό, μια συμβολοσειρά είναι ένας κοινός τύπος δεδομένων που υποστηρίζει κάθε σύγχρονη γλώσσα προγραμματισμού. Χαρακτηρίζεται από μια ακολουθία χαρακτήρων. Ολόκληρη η ακολουθία χαρακτήρων αντιμετωπίζεται ως ένα ενιαίο δεδομένο. Μια συμβολοσειρά μπορεί να περιέχει γράμματα, ψηφία και ειδικούς χαρακτήρες/σύμβολα.
Η Ruby, όντας μια καθαρά αντικειμενοστρεφής γλώσσα προγραμματισμού, αντιμετωπίζει τις συμβολοσειρές ως αντικείμενα. Σε αντίθεση με πολλές άλλες γλώσσες, οι συμβολοσειρές στη Ruby είναι μεταβλητές. Βασικά, η τιμή της συμβολοσειράς μπορεί να τροποποιηθεί απευθείας (in-place).
Βήμα 1 – Δημιουργία και εκτύπωση συμβολοσειρών
Στη Ruby, οι συμβολοσειρές περιβάλλονται είτε από μονά εισαγωγικά ( ') είτε από διπλά εισαγωγικά ( "). Ακολουθούν δύο έγκυρες συμβολοσειρές στη Ruby:
|
1 2 |
'the quick brown fox' "jumps over the lazy dog" |
Για την εκτύπωση οποιουδήποτε αποτελέσματος στην οθόνη της κονσόλας, η Ruby διαθέτει τη print μέθοδο:
|
1 2 |
print 'the quick brown fox' print "jumps over the lazy dog" |
Ώρα να το θέσουμε σε εφαρμογή. Δημιουργήστε ένα νέο αρχείο Ruby practice.rb και εισαγάγετε τον ακόλουθο κώδικα:
Εκτελέστε τον κώδικα:
|
1 |
ruby practice.rb |
Όπως αναμενόταν, η εντολή print εκτυπώνει τις παρεχόμενες συμβολοσειρές. Αν θέλουμε να εκτυπώσουμε τις συμβολοσειρές σε ξεχωριστές γραμμές, είναι καλύτερο να χρησιμοποιήσουμε τη puts στη θέση της. Ενημερώστε τον κώδικα:
|
1 2 |
puts 'the quick brown fox' puts "jumps over the lazy dog" |
Στη συνέχεια, εκτελέστε ξανά τον κώδικα:
|
1 |
ruby practice.rb |
Βήμα 2 – Μεταβλητές συμβολοσειρών
Οι μεταβλητές είναι ονόματα που αναφέρονται σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή όπου αποθηκεύεται μια τιμή. Μπορούμε να αποθηκεύσουμε την επιθυμητή τιμή στη μεταβλητή και να τη χρησιμοποιήσουμε αργότερα.
Στη Ruby, για να δηλώσετε μια μεταβλητή συμβολοσειράς, ορίστε το όνομα της μεταβλητής και εκχωρήστε μια τιμή συμβολοσειράς:
|
1 |
<variable_name> = <string> |
Γράψτε τον ακόλουθο κώδικα στο practice.rb:
|
1 2 3 4 |
first_half = 'the quick brown fox' second_half = "jumps over the lazy dog" puts first_half puts second_half |
Εκτελέστε τον κώδικα:
|
1 |
ruby practice.rb |
Εδώ:
- Έχουμε ορίσει δύο μεταβλητές first_half και second_half, σε καθεμία από τις οποίες έχει εκχωρηθεί μια τιμή συμβολοσειράς.
- Η μέθοδος puts εκτυπώνει την τιμή των μεταβλητών.
Βήμα 3 – Συνένωση συμβολοσειρών
Με τη συνένωση, μπορούμε να πάρουμε πολλές συμβολοσειρές και να τις ενώσουμε για να δημιουργήσουμε μια νέα συμβολοσειρά. Η συνένωση συμβολοσειρών υποδηλώνεται με τον τελεστή συνένωσης ( +). Σημειώστε ότι αυτό το σύμβολο είναι επίσης ο τελεστής πρόσθεσης όταν εργάζεστε με αριθμητικές πράξεις.
Ας δοκιμάσουμε να εκτελέσουμε συνένωση συμβολοσειρών στις συμβολοσειρές που έχουμε δηλώσει μέχρι τώρα:
|
1 |
puts "the quick brown fox" + "jumps over the lazy dog" |
Εκτελέστε τον κώδικα:
|
1 |
ruby practice.rb |
Όπως δείχνει το αποτέλεσμα, η συνένωση δεν εισάγει κανέναν επιπλέον χαρακτήρα ανάμεσα στις συμβολοσειρές. Γι’ αυτό το fox και το jumps είναι κολλημένα μαζί. Μπορούμε να το διορθώσουμε εισάγοντας ένα κενό διάστημα μετά το fox:
|
1 |
puts "the quick brown fox " + "jumps over the lazy dog" |
Εκτελέστε τον κώδικα:
|
1 |
ruby practice.rb |
Τώρα το αποτέλεσμα φαίνεται καλύτερο.
Η συνένωση συμβολοσειρών λειτουργεί επίσης με μεταβλητές. Ρίξτε μια ματιά στο ακόλουθο παράδειγμα:
|
1 2 |
first_half = "η γρήγορη καφέ αλεπού " puts first_half + "πηδάει πάνω από τον τεμπέλικο σκύλο" |
Εκτελέστε τον κώδικα:
|
1 |
ruby practice.rb |
Το επόμενο παράδειγμα δείχνει μια μακριά αλυσίδα συνένωσης:
|
1 2 3 |
username = "cloudsigma" fav_color = "μπλε" puts "γεια σου, " + username + "! το αγαπημένο σου χρώμα είναι " + fav_color + "." |
Εκτελέστε τον κώδικα:
|
1 |
ruby practice.rb |
Μέχρι στιγμής, έχουμε ασχοληθεί μόνο με μεταβλητές συμβολοσειράς. Τι γίνεται αν υπήρχαν διαφορετικοί τύποι μεταβλητών; Το ακόλουθο πρόγραμμα δοκιμάζει αυτό το σενάριο:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts username + user_id |
Όταν προσπαθήσετε να εκτελέσετε αυτό το πρόγραμμα, η Ruby θα εμφανίσει ένα μήνυμα σφάλματος:
|
1 |
ruby practice.rb |
Ωστόσο, μπορούμε να μετατρέψουμε τον ακέραιο σε συμβολοσειρά για να αποφύγουμε αυτό το πρόβλημα:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts username + user_id.to_s |
Εδώ:
-
Η μέθοδος to_s μετατρέπει την τιμή της μεταβλητής σε συμβολοσειρά.
Η μετατροπή αριθμών σε συμβολοσειρές είναι ένα συχνό φαινόμενο όταν εργάζεστε με στοιχεία όπως ταχυδρομικούς κώδικες, νομίσματα, τηλεφωνικούς αριθμούς και άλλα αριθμητικά δεδομένα.
Βήμα 4 – Παρεμβολή Συμβολοσειράς
Αν και η συνένωση συμβολοσειρών είναι μια ισχυρή δυνατότητα, μπορεί να γίνει πολύ εύκολα περίπλοκη. Σε πολλές περιπτώσεις, πιθανότατα θα διαπιστώσετε ότι σας λείπει ένας τελεστής συνένωσης ( +), προκαλώντας μεγάλο πονοκέφαλο. Επιπλέον, όταν εργάζεστε με διαφορετικούς τύπους δεδομένων, πρέπει πρώτα να μετατραπούν σε συμβολοσειρά. Ευτυχώς, η Ruby προσφέρει άλλους τρόπους εισαγωγής τιμών μεταβλητών σε μια συμβολοσειρά χρησιμοποιώντας τη δυνατότητα παρεμβολή συμβολοσειράς.
Ορίστε πώς φαίνεται. Για παράδειγμα, αντί να χρησιμοποιήσετε:
|
1 |
"γεια σου, " + username + "!" |
Θα χρησιμοποιήσουμε:
|
1 |
"γεια σου, #{username}!" |
Αν και η σύνταξη μπορεί να φαίνεται λίγο περίεργη, απλοποιεί δραματικά τον κώδικα. Δεν χρειάζεται να καλέσετε χειροκίνητα τη μέθοδο to_s για τη μετατροπή της τιμής της μεταβλητής σε συμβολοσειρά.
Ας χρησιμοποιήσουμε αυτή τη νέα τεχνική για να ενημερώσουμε τον προηγούμενο κώδικά μας:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts "γεια σου, #{username}! το ID χρήστη σου είναι #{user_id}" |
Εκτελέστε τον κώδικα:
|
1 |
ruby practice.rb |
Βήμα 5 – Λεκτικά Συμβολοσειράς και Τιμές Συμβολοσειράς
Παρατηρήστε ότι οι συμβολοσειρές που δηλώνονται στους κώδικες περιβάλλονται πάντα από εισαγωγικά. Ωστόσο, κατά την εκτύπωση του αποτελέσματος στην οθόνη της κονσόλας, δεν υπάρχουν σύμβολα εισαγωγικών. Υπάρχει σαφής διάκριση μεταξύ τους.
- Λεκτικό συμβολοσειράς: Είναι η συμβολοσειρά που είναι γραμμένη στον πηγαίο κώδικα (συμπεριλαμβανομένων των εισαγωγικών).
- Τιμή συμβολοσειράς: Είναι η τιμή που εκτυπώνεται στο αποτέλεσμα (χωρίς τα εισαγωγικά).
Για παράδειγμα, το παρακάτω είναι ένα λεκτικό συμβολοσειράς:
|
1 |
"γεια σου κόσμε" |
Η τιμή της συμβολοσειράς του θα ήταν γεια σου κόσμε.
Βήμα 6 – Διαφυγή Εισαγωγικών και Αποστρόφων
Όπως δείξαμε, τα εισαγωγικά και οι απόστροφοι χρησιμοποιούνται για τον προσδιορισμό συμβολοσειρών στον πηγαίο κώδικα. Αυτό δημιουργεί ένα πρόβλημα: δεν μπορείτε να τα έχετε απευθείας στη συμβολοσειρά. Διαφορετικά, θα προκληθούν προβλήματα. Ο ακόλουθος κώδικας το δείχνει αυτό:
|
1 |
puts 'it's what it is' |
Υπάρχουν διάφορες τακτικές για την παράκαμψη αυτού του προβλήματος.
-
Χρήση Εναλλακτικής Σύνταξης Συμβολοσειράς
Αυτός είναι ο απλούστερος τρόπος για να ξεπεράσετε το πρόβλημα. Εάν η συμβολοσειρά σας χρειάζεται μονά εισαγωγικά, τότε χρησιμοποιήστε διπλά εισαγωγικά στο λεκτικό της συμβολοσειράς (και αντίστροφα).
Ας διορθώσουμε το προηγούμενο παράδειγμα:
|
1 |
puts "it's what it is" |
Ένα άλλο παράδειγμα θα ήταν:
|
1 |
puts 'he said, "hello world"' |
Ωστόσο, αυτό δεν πρόκειται να λειτουργήσει σε κάθε περίπτωση. Για παράδειγμα:
|
1 |
puts "Clousdigma says, "I'm a happy boi!"" |
-
Χρήση Χαρακτήρων Διαφυγής
Ο χαρακτήρας ανάστροφης καθέτου ( \) αναφέρεται συχνά ως χαρακτήρας διαφυγής. Εμποδίζει τη Ruby να ερμηνεύσει τον επόμενο χαρακτήρα κυριολεκτικά. Ας διορθώσουμε το προηγούμενο παράδειγμα. Χρησιμοποιήστε την ανάστροφη κάθετο για να εμποδίσετε τη Ruby να ερμηνεύσει τα εσωτερικά διπλά εισαγωγικά ως λεκτικά:
|
1 |
puts "Η Cloudsigma λέει, \"Είμαι ένα χαρούμενο αγόρι!\"" |
-
Χρήση εναλλακτικής σύνταξης
Μέχρι στιγμής, έχουμε εργαστεί μόνο με μονά και διπλά εισαγωγικά για να δηλώσουμε το αλφαριθμητικό. Ωστόσο, τα προηγούμενα παραδείγματα είναι απλές αποδείξεις του πώς αυτό μπορεί να ξεφύγει από τον έλεγχο πολύ γρήγορα. Για να λύσουμε αυτό το πρόβλημα, μπορούμε να εγκαταλείψουμε εντελώς τα εισαγωγικά και να χρησιμοποιήσουμε ένα εντελώς διαφορετικό σύμβολο για να δηλώσουμε την αρχή και το τέλος ενός αλφαριθμητικού.
Ρίξτε μια ματιά στο ακόλουθο παράδειγμα:
|
1 |
%$η γρήγορη καφέ αλεπού είπε, "πήδηξα πάνω από τον τεμπέλη σκύλο"$ |
Εδώ:
-
- Το σύμβολο % ορίζει τον επόμενο χαρακτήρα ( $, σε αυτή την περίπτωση) ως τον οριοθέτη του αλφαριθμητικού.
- Το αλφαριθμητικό εδώ είναι $η γρήγορη καφέ αλεπού είπε, "πήδηξα πάνω από τον τεμπέλη σκύλο"$.
Ας το κάνουμε πράξη:
|
1 |
puts %$η γρήγορη καφέ αλεπού είπε, "πήδηξα πάνω από τον τεμπέλη σκύλο"$ |
Εδώ, το αλφαριθμητικό αντιμετωπίζεται βασικά ως εξής:
|
1 |
"η γρήγορη καφέ αλεπού είπε, \"πήδηξα πάνω από τον τεμπέλη σκύλο\"" |
Ωστόσο, αυτό επαναφέρει το πρόβλημα της διαφυγής του οριοθέτη εάν αυτός χρησιμοποιείται στο αλφαριθμητικό. Ένας τρόπος για να το αποφύγετε είναι να χρησιμοποιήσετε σύμβολα που γενικά δεν εμφανίζονται σε αλφαριθμητικά. Τέτοια σύμβολα θα μπορούσαν να περιλαμβάνουν άγκιστρα, αγκύλες κ.λπ.:
|
1 |
puts %{"γεια σου, κόσμε!", αυτός είπε} |
Λειτουργεί επίσης τέλεια με παρεμβολές αλφαριθμητικών (string interpolations):
|
1 2 3 |
username = "cloudsigma" user_id = 5 puts %{γεια σου, #{username}.#{user_id}!} |
Είναι επίσης σύνηθες να χρησιμοποιείται το %Q{} και %q{} για τον ορισμό αλφαριθμητικών σε προγράμματα Ruby. Εδώ, %Q{} λειτουργεί όπως τα διπλά εισαγωγικά και το %q{} λειτουργεί όπως τα μονά εισαγωγικά.
Βήμα 7 – Νέες γραμμές και μεγάλα αλφαριθμητικά
Όταν εργάζεστε με αλφαριθμητικά, θα υπάρξουν περιπτώσεις που θα θέλετε να εισαγάγετε μια νέα γραμμή ή επιστροφή φορέα στο αλφαριθμητικό. Μπορούμε να το κάνουμε αυτό εισάγοντας τους χαρακτήρες διαφυγής \n (newline) και \r (carriage return).
Ρίξτε μια ματιά στο ακόλουθο παράδειγμα:
|
1 2 |
hello_world = "η γρήγορη\nκαφέ αλεπού\nπηδάει πάνω από\nτον τεμπέλη σκύλο" puts hello_world |
Το αλφαριθμητικό φαίνεται μπερδεμένο, σωστά; Ας το αναδιατάξουμε για καλύτερη αναγνωσιμότητα:
|
1 2 3 4 5 6 7 |
hello_world = "η γρήγορη\n" + "καφέ αλεπού\n" + "πηδάει πάνω από\n" + "τον τεμπέλη σκύλο" puts hello_world |
Αντί να δηλώνουμε χειροκίνητα τους χαρακτήρες νέας γραμμής, μπορούμε επίσης να χρησιμοποιήσουμε την ακόλουθη δομή:
|
1 2 3 4 5 6 |
hello_world = "η γρήγορη καφέ αλεπού πηδάει πάνω από τον τεμπέλη σκύλο" puts hello_world |
Σε αυτή τη μέθοδο, το αλφαριθμητικό διατηρεί όλα τα κενά διαστήματα. Ωστόσο, αυτό αλλοιώνει το αποτέλεσμα. Αφαιρέστε τα επιπλέον κενά για να το διορθώσετε:
|
1 2 3 4 5 |
hello_world = "η γρήγορη καφέ αλεπού πηδάει πάνω από τον τεμπέλη σκύλο" |
Αν και το πρόβλημα με τα κενά διαστήματα διορθώθηκε, αυτό μειώνει την αναγνωσιμότητα του κώδικα. Μπορούμε να διορθώσουμε αυτό το πρόβλημα εφαρμόζοντας ένα heredoc, ένας όρος για αλφαριθμητικά πολλαπλών γραμμών. Ο ενημερωμένος κώδικας θα έδειχνε κάπως έτσι:
|
1 2 3 4 5 6 7 8 |
hello_world = <<-END η γρήγορη καφέ αλεπού πηδάει πάνω από τον τεμπέλη σκύλο END puts hello_world |
Ξεκινώντας από τη Ruby v2.3 και μεταγενέστερες εκδόσεις, υπάρχει άλλη μια διαθέσιμη δυνατότητα, η οποία ονομάζεται squiggly heredoc σύνταξη. Αφαιρεί τα αρχικά κενά διαστήματα στα αλφαριθμητικά. Για να εκφράσετε ένα squiggly heredoc, αντικαταστήστε την παύλα ( -) με μια περισπωμένη ( ~):
|
1 2 3 4 5 6 7 8 |
hello_world = <<~END η γρήγορη καφέ αλεπού πηδάει πάνω από τον τεμπέλικο σκύλο END puts hello_world |
Βήμα 8 – Αναπαραγωγή συμβολοσειρών
Σε ορισμένες περιπτώσεις, μπορεί να είναι απαραίτητο να επαναλάβετε μια συμβολοσειρά αρκετές φορές. Η Ruby επιτρέπει την αναπαραγωγή συμβολοσειρών με διάφορους τρόπους.
Μια τέτοια τεχνική είναι η χρήση του * τελεστή. Γενικά, χρησιμοποιείται ως τελεστής πολλαπλασιασμού όταν πρόκειται για αριθμούς. Όταν πρόκειται για συμβολοσειρές, ωστόσο, γίνεται ο τελεστής αναπαραγωγής συμβολοσειρών, επαναλαμβάνοντας τη μεμονωμένη συμβολοσειρά όσες φορές είναι απαραίτητο. Ο αριθμός των επαναλήψεων πρέπει να είναι ακέραιος.
Στο ακόλουθο παράδειγμα, το κείμενο Boris πρόκειται να επαναληφθεί 5 φορές:
|
1 |
print "Boris" * 5 + "\n" |
Χρησιμοποιώντας αυτή τη δυνατότητα, μπορούμε να δημιουργήσουμε μερικά ενδιαφέροντα ASCII art. Δείτε το ακόλουθο παράδειγμα:
|
1 2 3 |
puts "=" * 15 puts "| γεια σου κόσμε |" puts "=" * 15 |
Τελικές Σκέψεις
Οι συμβολοσειρές, στον προγραμματισμό, είναι θεμελιώδεις. Αυτός ο οδηγός παρουσιάζει την εργασία με συμβολοσειρές στη Ruby. Μάθαμε πώς να δημιουργούμε συμβολοσειρές και να εκτελούμε διάφορες λειτουργίες όπως συνένωση, χειρισμό νέων γραμμών, εισαγωγικών κ.λπ. Χρησιμοποιώντας την παρεμβολή συμβολοσειρών, μάθαμε επίσης πώς να ενσωματώνουμε καλύτερα τις τιμές των μεταβλητών σε συμβολοσειρές. Χρησιμοποιώντας τον τελεστή αναπαραγωγής συμβολοσειρών, μπορούμε επίσης να επαναλάβουμε μια μεμονωμένη συμβολοσειρά πολλές φορές.
Αν και η Ruby, από μόνη της, είναι μια εξαιρετική γλώσσα προγραμματισμού, συχνά συνδυάζεται με το πλαίσιο Rails. Ruby on Rails είναι ένα πλαίσιο εφαρμογών ιστού ανοιχτού κώδικα. Μάθετε περισσότερα για την εγκατάσταση του Ruby on Rails σε Ubuntu. Ωστόσο, η Ruby μπορεί επίσης να λειτουργήσει με άλλες εφαρμογές, όπως το MySQL και το PostgreSQL.
Καλό προγραμματισμό!












































Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.