Επιστροφή στο blog

Εργασία με Συμβολοσειρές στη Ruby

Εργασία με Συμβολοσειρές στη Ruby

Ruby είναι μια διερμηνευόμενη, δυναμική, ανακλαστική, αντικειμενοστρεφής γλώσσα προγραμματισμού. Αναπτύχθηκε από τον Yukihiro Matsumoto, η Ruby εστιάζει στην απλότητα και την παραγωγικότητα. Η κομψή σύνταξη επιτρέπει στους προγραμματιστές να διαβάζουν και να γράφουν κώδικα πιο εύκολα.

Σε αυτόν τον οδηγό, θα εργαστούμε με συμβολοσειρές στη Ruby.

Προαπαιτούμενα

Για να εκτελέσετε τα βήματα που παρουσιάζονται σε αυτό το σεμινάριο, χρειάζεστε τα ακόλουθα στοιχεία:

Ο τύπος δεδομένων String

Στον προγραμματισμό, μια συμβολοσειρά είναι ένας κοινός τύπος δεδομένων που υποστηρίζει κάθε σύγχρονη γλώσσα προγραμματισμού. Χαρακτηρίζεται από μια ακολουθία χαρακτήρων. Ολόκληρη η ακολουθία χαρακτήρων αντιμετωπίζεται ως ένα ενιαίο δεδομένο. Μια συμβολοσειρά μπορεί να περιέχει γράμματα, ψηφία και ειδικούς χαρακτήρες/σύμβολα.

Η Ruby, όντας μια καθαρά αντικειμενοστρεφής γλώσσα προγραμματισμού, αντιμετωπίζει τις συμβολοσειρές ως αντικείμενα. Σε αντίθεση με πολλές άλλες γλώσσες, οι συμβολοσειρές στη Ruby είναι μεταβλητές. Βασικά, η τιμή της συμβολοσειράς μπορεί να τροποποιηθεί απευθείας (in-place).

Βήμα 1 – Δημιουργία και εκτύπωση συμβολοσειρών

Στη Ruby, οι συμβολοσειρές περιβάλλονται είτε από μονά εισαγωγικά ( ') είτε από διπλά εισαγωγικά ( "). Ακολουθούν δύο έγκυρες συμβολοσειρές στη Ruby:

Για την εκτύπωση οποιουδήποτε αποτελέσματος στην οθόνη της κονσόλας, η Ruby διαθέτει τη print μέθοδο:

Ώρα να το θέσουμε σε εφαρμογή. Δημιουργήστε ένα νέο αρχείο Ruby practice.rb και εισαγάγετε τον ακόλουθο κώδικα:

Εκτελέστε τον κώδικα:

Strings in Ruby 1

Όπως αναμενόταν, η εντολή print εκτυπώνει τις παρεχόμενες συμβολοσειρές. Αν θέλουμε να εκτυπώσουμε τις συμβολοσειρές σε ξεχωριστές γραμμές, είναι καλύτερο να χρησιμοποιήσουμε τη puts στη θέση της. Ενημερώστε τον κώδικα:

Στη συνέχεια, εκτελέστε ξανά τον κώδικα:

Strings in Ruby 2

Βήμα 2 – Μεταβλητές συμβολοσειρών

Οι μεταβλητές είναι ονόματα που αναφέρονται σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή όπου αποθηκεύεται μια τιμή. Μπορούμε να αποθηκεύσουμε την επιθυμητή τιμή στη μεταβλητή και να τη χρησιμοποιήσουμε αργότερα.

Στη Ruby, για να δηλώσετε μια μεταβλητή συμβολοσειράς, ορίστε το όνομα της μεταβλητής και εκχωρήστε μια τιμή συμβολοσειράς:

Γράψτε τον ακόλουθο κώδικα στο practice.rb:

Εκτελέστε τον κώδικα:

Εδώ:

  • Έχουμε ορίσει δύο μεταβλητές first_half και second_half, σε καθεμία από τις οποίες έχει εκχωρηθεί μια τιμή συμβολοσειράς.
  • Η μέθοδος puts εκτυπώνει την τιμή των μεταβλητών.

Βήμα 3 – Συνένωση συμβολοσειρών

Με τη συνένωση, μπορούμε να πάρουμε πολλές συμβολοσειρές και να τις ενώσουμε για να δημιουργήσουμε μια νέα συμβολοσειρά. Η συνένωση συμβολοσειρών υποδηλώνεται με τον τελεστή συνένωσης ( +). Σημειώστε ότι αυτό το σύμβολο είναι επίσης ο τελεστής πρόσθεσης όταν εργάζεστε με αριθμητικές πράξεις.

Ας δοκιμάσουμε να εκτελέσουμε συνένωση συμβολοσειρών στις συμβολοσειρές που έχουμε δηλώσει μέχρι τώρα:

Εκτελέστε τον κώδικα:

Όπως δείχνει το αποτέλεσμα, η συνένωση δεν εισάγει κανέναν επιπλέον χαρακτήρα ανάμεσα στις συμβολοσειρές. Γι’ αυτό το fox και το jumps είναι κολλημένα μαζί. Μπορούμε να το διορθώσουμε εισάγοντας ένα κενό διάστημα μετά το fox:

Εκτελέστε τον κώδικα:

Τώρα το αποτέλεσμα φαίνεται καλύτερο.

Η συνένωση συμβολοσειρών λειτουργεί επίσης με μεταβλητές. Ρίξτε μια ματιά στο ακόλουθο παράδειγμα:

Strings in Ruby 3

Εκτελέστε τον κώδικα:

Το επόμενο παράδειγμα δείχνει μια μακριά αλυσίδα συνένωσης:

Strings in Ruby 4

Εκτελέστε τον κώδικα:

Μέχρι στιγμής, έχουμε ασχοληθεί μόνο με μεταβλητές συμβολοσειράς. Τι γίνεται αν υπήρχαν διαφορετικοί τύποι μεταβλητών; Το ακόλουθο πρόγραμμα δοκιμάζει αυτό το σενάριο:

Strings in Ruby 5

Όταν προσπαθήσετε να εκτελέσετε αυτό το πρόγραμμα, η Ruby θα εμφανίσει ένα μήνυμα σφάλματος:

Ωστόσο, μπορούμε να μετατρέψουμε τον ακέραιο σε συμβολοσειρά για να αποφύγουμε αυτό το πρόβλημα:

Strings in Ruby 6

Εδώ:

  • Η μέθοδος to_s μετατρέπει την τιμή της μεταβλητής σε συμβολοσειρά.

Η μετατροπή αριθμών σε συμβολοσειρές είναι ένα συχνό φαινόμενο όταν εργάζεστε με στοιχεία όπως ταχυδρομικούς κώδικες, νομίσματα, τηλεφωνικούς αριθμούς και άλλα αριθμητικά δεδομένα.

Βήμα 4 – Παρεμβολή Συμβολοσειράς

Αν και η συνένωση συμβολοσειρών είναι μια ισχυρή δυνατότητα, μπορεί να γίνει πολύ εύκολα περίπλοκη. Σε πολλές περιπτώσεις, πιθανότατα θα διαπιστώσετε ότι σας λείπει ένας τελεστής συνένωσης ( +), προκαλώντας μεγάλο πονοκέφαλο. Επιπλέον, όταν εργάζεστε με διαφορετικούς τύπους δεδομένων, πρέπει πρώτα να μετατραπούν σε συμβολοσειρά. Ευτυχώς, η Ruby προσφέρει άλλους τρόπους εισαγωγής τιμών μεταβλητών σε μια συμβολοσειρά χρησιμοποιώντας τη δυνατότητα παρεμβολή συμβολοσειράς.

Ορίστε πώς φαίνεται. Για παράδειγμα, αντί να χρησιμοποιήσετε:

Θα χρησιμοποιήσουμε:

Αν και η σύνταξη μπορεί να φαίνεται λίγο περίεργη, απλοποιεί δραματικά τον κώδικα. Δεν χρειάζεται να καλέσετε χειροκίνητα τη μέθοδο to_s για τη μετατροπή της τιμής της μεταβλητής σε συμβολοσειρά.

Ας χρησιμοποιήσουμε αυτή τη νέα τεχνική για να ενημερώσουμε τον προηγούμενο κώδικά μας:

Strings in Ruby 7

Εκτελέστε τον κώδικα:

Βήμα 5 – Λεκτικά Συμβολοσειράς και Τιμές Συμβολοσειράς

Παρατηρήστε ότι οι συμβολοσειρές που δηλώνονται στους κώδικες περιβάλλονται πάντα από εισαγωγικά. Ωστόσο, κατά την εκτύπωση του αποτελέσματος στην οθόνη της κονσόλας, δεν υπάρχουν σύμβολα εισαγωγικών. Υπάρχει σαφής διάκριση μεταξύ τους.

  • Λεκτικό συμβολοσειράς: Είναι η συμβολοσειρά που είναι γραμμένη στον πηγαίο κώδικα (συμπεριλαμβανομένων των εισαγωγικών).
  • Τιμή συμβολοσειράς: Είναι η τιμή που εκτυπώνεται στο αποτέλεσμα (χωρίς τα εισαγωγικά).

Για παράδειγμα, το παρακάτω είναι ένα λεκτικό συμβολοσειράς:

Η τιμή της συμβολοσειράς του θα ήταν γεια σου κόσμε.

Βήμα 6 – Διαφυγή Εισαγωγικών και Αποστρόφων

Όπως δείξαμε, τα εισαγωγικά και οι απόστροφοι χρησιμοποιούνται για τον προσδιορισμό συμβολοσειρών στον πηγαίο κώδικα. Αυτό δημιουργεί ένα πρόβλημα: δεν μπορείτε να τα έχετε απευθείας στη συμβολοσειρά. Διαφορετικά, θα προκληθούν προβλήματα. Ο ακόλουθος κώδικας το δείχνει αυτό:

Strings in Ruby 8

Υπάρχουν διάφορες τακτικές για την παράκαμψη αυτού του προβλήματος.

  • Χρήση Εναλλακτικής Σύνταξης Συμβολοσειράς

Αυτός είναι ο απλούστερος τρόπος για να ξεπεράσετε το πρόβλημα. Εάν η συμβολοσειρά σας χρειάζεται μονά εισαγωγικά, τότε χρησιμοποιήστε διπλά εισαγωγικά στο λεκτικό της συμβολοσειράς (και αντίστροφα).

Ας διορθώσουμε το προηγούμενο παράδειγμα:

Ένα άλλο παράδειγμα θα ήταν:

Ωστόσο, αυτό δεν πρόκειται να λειτουργήσει σε κάθε περίπτωση. Για παράδειγμα:

  • Χρήση Χαρακτήρων Διαφυγής

Ο χαρακτήρας ανάστροφης καθέτου ( \) αναφέρεται συχνά ως χαρακτήρας διαφυγής. Εμποδίζει τη Ruby να ερμηνεύσει τον επόμενο χαρακτήρα κυριολεκτικά. Ας διορθώσουμε το προηγούμενο παράδειγμα. Χρησιμοποιήστε την ανάστροφη κάθετο για να εμποδίσετε τη Ruby να ερμηνεύσει τα εσωτερικά διπλά εισαγωγικά ως λεκτικά:

  • Χρήση εναλλακτικής σύνταξης

Μέχρι στιγμής, έχουμε εργαστεί μόνο με μονά και διπλά εισαγωγικά για να δηλώσουμε το αλφαριθμητικό. Ωστόσο, τα προηγούμενα παραδείγματα είναι απλές αποδείξεις του πώς αυτό μπορεί να ξεφύγει από τον έλεγχο πολύ γρήγορα. Για να λύσουμε αυτό το πρόβλημα, μπορούμε να εγκαταλείψουμε εντελώς τα εισαγωγικά και να χρησιμοποιήσουμε ένα εντελώς διαφορετικό σύμβολο για να δηλώσουμε την αρχή και το τέλος ενός αλφαριθμητικού.

Ρίξτε μια ματιά στο ακόλουθο παράδειγμα:

Εδώ:

    • Το σύμβολο % ορίζει τον επόμενο χαρακτήρα ( $, σε αυτή την περίπτωση) ως τον οριοθέτη του αλφαριθμητικού.
    • Το αλφαριθμητικό εδώ είναι $η γρήγορη καφέ αλεπού είπε, "πήδηξα πάνω από τον τεμπέλη σκύλο"$.

Ας το κάνουμε πράξη:

Εδώ, το αλφαριθμητικό αντιμετωπίζεται βασικά ως εξής:

Ωστόσο, αυτό επαναφέρει το πρόβλημα της διαφυγής του οριοθέτη εάν αυτός χρησιμοποιείται στο αλφαριθμητικό. Ένας τρόπος για να το αποφύγετε είναι να χρησιμοποιήσετε σύμβολα που γενικά δεν εμφανίζονται σε αλφαριθμητικά. Τέτοια σύμβολα θα μπορούσαν να περιλαμβάνουν άγκιστρα, αγκύλες κ.λπ.:

Λειτουργεί επίσης τέλεια με παρεμβολές αλφαριθμητικών (string interpolations):

Είναι επίσης σύνηθες να χρησιμοποιείται το %Q{} και %q{} για τον ορισμό αλφαριθμητικών σε προγράμματα Ruby. Εδώ, %Q{} λειτουργεί όπως τα διπλά εισαγωγικά και το %q{} λειτουργεί όπως τα μονά εισαγωγικά.

Βήμα 7 – Νέες γραμμές και μεγάλα αλφαριθμητικά

Όταν εργάζεστε με αλφαριθμητικά, θα υπάρξουν περιπτώσεις που θα θέλετε να εισαγάγετε μια νέα γραμμή ή επιστροφή φορέα στο αλφαριθμητικό. Μπορούμε να το κάνουμε αυτό εισάγοντας τους χαρακτήρες διαφυγής \n (newline) και \r (carriage return).

Ρίξτε μια ματιά στο ακόλουθο παράδειγμα:

Το αλφαριθμητικό φαίνεται μπερδεμένο, σωστά; Ας το αναδιατάξουμε για καλύτερη αναγνωσιμότητα:

Αντί να δηλώνουμε χειροκίνητα τους χαρακτήρες νέας γραμμής, μπορούμε επίσης να χρησιμοποιήσουμε την ακόλουθη δομή:

Strings in Ruby 8

Strings in Ruby 9

Σε αυτή τη μέθοδο, το αλφαριθμητικό διατηρεί όλα τα κενά διαστήματα. Ωστόσο, αυτό αλλοιώνει το αποτέλεσμα. Αφαιρέστε τα επιπλέον κενά για να το διορθώσετε:

Strings in Ruby 10

Αν και το πρόβλημα με τα κενά διαστήματα διορθώθηκε, αυτό μειώνει την αναγνωσιμότητα του κώδικα. Μπορούμε να διορθώσουμε αυτό το πρόβλημα εφαρμόζοντας ένα heredoc, ένας όρος για αλφαριθμητικά πολλαπλών γραμμών. Ο ενημερωμένος κώδικας θα έδειχνε κάπως έτσι:

Strings in Ruby 11

Strings in Ruby 12

Ξεκινώντας από τη Ruby v2.3 και μεταγενέστερες εκδόσεις, υπάρχει άλλη μια διαθέσιμη δυνατότητα, η οποία ονομάζεται squiggly heredoc σύνταξη. Αφαιρεί τα αρχικά κενά διαστήματα στα αλφαριθμητικά. Για να εκφράσετε ένα squiggly heredoc, αντικαταστήστε την παύλα ( -) με μια περισπωμένη ( ~):

Strings in Ruby 13

Βήμα 8 – Αναπαραγωγή συμβολοσειρών

Σε ορισμένες περιπτώσεις, μπορεί να είναι απαραίτητο να επαναλάβετε μια συμβολοσειρά αρκετές φορές. Η Ruby επιτρέπει την αναπαραγωγή συμβολοσειρών με διάφορους τρόπους.

Μια τέτοια τεχνική είναι η χρήση του * τελεστή. Γενικά, χρησιμοποιείται ως τελεστής πολλαπλασιασμού όταν πρόκειται για αριθμούς. Όταν πρόκειται για συμβολοσειρές, ωστόσο, γίνεται ο τελεστής αναπαραγωγής συμβολοσειρών, επαναλαμβάνοντας τη μεμονωμένη συμβολοσειρά όσες φορές είναι απαραίτητο. Ο αριθμός των επαναλήψεων πρέπει να είναι ακέραιος.

Στο ακόλουθο παράδειγμα, το κείμενο Boris πρόκειται να επαναληφθεί 5 φορές:

Strings in Ruby 14

Χρησιμοποιώντας αυτή τη δυνατότητα, μπορούμε να δημιουργήσουμε μερικά ενδιαφέροντα ASCII art. Δείτε το ακόλουθο παράδειγμα:

Τελικές Σκέψεις

Οι συμβολοσειρές, στον προγραμματισμό, είναι θεμελιώδεις. Αυτός ο οδηγός παρουσιάζει την εργασία με συμβολοσειρές στη Ruby. Μάθαμε πώς να δημιουργούμε συμβολοσειρές και να εκτελούμε διάφορες λειτουργίες όπως συνένωση, χειρισμό νέων γραμμών, εισαγωγικών κ.λπ. Χρησιμοποιώντας την παρεμβολή συμβολοσειρών, μάθαμε επίσης πώς να ενσωματώνουμε καλύτερα τις τιμές των μεταβλητών σε συμβολοσειρές. Χρησιμοποιώντας τον τελεστή αναπαραγωγής συμβολοσειρών, μπορούμε επίσης να επαναλάβουμε μια μεμονωμένη συμβολοσειρά πολλές φορές.

Αν και η Ruby, από μόνη της, είναι μια εξαιρετική γλώσσα προγραμματισμού, συχνά συνδυάζεται με το πλαίσιο Rails. Ruby on Rails είναι ένα πλαίσιο εφαρμογών ιστού ανοιχτού κώδικα. Μάθετε περισσότερα για την εγκατάσταση του Ruby on Rails σε Ubuntu. Ωστόσο, η Ruby μπορεί επίσης να λειτουργήσει με άλλες εφαρμογές, όπως το MySQL και το PostgreSQL.

Καλό προγραμματισμό!

author

Preslav Dobrev

Συγγραφέας · CloudSigma

Ο Preslav Dobrev είναι Δημιουργικός Σχεδιαστής στην CloudSigma, με εστίαση στη συνεπή επιχειρηματική ταυτότητα μέσω παραδοσιακών και καινοτόμων καναλιών μάρκετινγκ. Διαθέτει την ικανότητα να συνδυάζει το καλλιτεχνικό όραμα με το στρατηγικό μάρκετινγκ για τη δημιουργία εντυπωσιακών αφηγήσεων επωνυμίας.

Σχόλια

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