Powrót do bloga

Praca z ciągami znaków w Ruby

Praca z ciągami znaków w Ruby

Ruby to interpretowany, dynamiczny, refleksyjny, obiektowy język programowania. Stworzony przez Yukihiro Matsumoto, Ruby skupia się na prostocie i produktywności. Elegancka składnia pozwala programistom łatwiej czytać i pisać kod.

W tym poradniku będziemy pracować z ciągami znaków w języku Ruby.

Wymagania wstępne

Aby wykonać kroki przedstawione w tym samouczku, potrzebujesz następujących komponentów:

Typ danych String (ciąg znaków)

W programowaniu ciąg znaków to powszechny typ danych, który obsługuje każdy nowoczesny język programowania. Charakteryzuje się sekwencją znaków. Cała sekwencja znaków jest traktowana jako pojedyncza dana. Ciąg znaków może zawierać litery, cyfry oraz znaki specjalne/symbole.

Ruby, będąc czysto obiektowym językiem programowania, traktuje ciągi znaków jako obiekty. W przeciwieństwie do wielu innych języków, ciągi znaków w Ruby są modyfikowalne. Zasadniczo wartość ciągu znaków może zostać zmieniona w miejscu.

Krok 1 – Tworzenie i wyświetlanie ciągów znaków

W Ruby ciągi znaków są otoczone pojedynczymi cudzysłowami ( ') lub podwójnymi cudzysłowami ( "). Poniżej przedstawiono dwa poprawne ciągi znaków w Ruby:

Aby wyświetlić dowolny wynik na ekranie konsoli, Ruby oferuje metodę print :

Czas wypróbować to w praktyce. Utwórz nowy plik Ruby practice.rb i wprowadź następujący kod:

Uruchom kod:

Strings in Ruby 1

Zgodnie z oczekiwaniami, polecenie print wypisuje podane ciągi znaków. Jeśli chcemy wypisać ciągi znaków w osobnych liniach, lepiej użyć puts w zamian. Zaktualizuj kod:

Następnie uruchom kod ponownie:

Strings in Ruby 2

Krok 2 – Zmienne łańcuchowe

Zmienne to nazwy odnoszące się do określonego miejsca w pamięci komputera, w którym przechowywana jest wartość. Możemy zapisać pożądaną wartość w zmiennej i użyć jej później.

W Ruby, aby zadeklarować zmienną tekstową, zdefiniuj nazwę zmiennej i przypisz wartość ciągu znaków:

Zapisz następujący kod w practice.rb:

Uruchom kod:

Tutaj:

  • Zdefiniowaliśmy dwie zmienne first_half oraz second_half, z których każda ma przypisaną wartość ciągu znaków.
  • Metoda puts wypisuje wartość zmiennych.

Krok 3 – Konkatenacja ciągów znaków

Poprzez konkatenację możemy połączyć wiele ciągów znaków, aby utworzyć nowy ciąg. Konkatenacja ciągów znaków jest oznaczana przez operator konkatenacji ( +). Zauważ, że ten symbol jest również operatorem dodawania w operacjach arytmetycznych.

Spróbujmy wykonać konkatenację na ciągach znaków, które do tej pory zadeklarowaliśmy:

Uruchom kod:

Jak pokazuje wynik, konkatenacja nie wprowadza żadnego dodatkowego znaku pomiędzy ciągami. Dlatego fox i jumps są połączone ze sobą. Możemy to naprawić, wprowadzając spację po fox:

Uruchom kod:

Teraz wynik wygląda lepiej.

Konkatenacja ciągów znaków działa również ze zmiennymi. Spójrz na poniższy przykład:

Strings in Ruby 3

Uruchom kod:

Kolejny przykład demonstruje długi łańcuch konkatenacji:

Strings in Ruby 4

Uruchom kod:

Do tej pory zajmowaliśmy się tylko zmiennymi tekstowymi (string). Co jeśli istniałyby inne typy zmiennych? Poniższy program testuje ten scenariusz:

Strings in Ruby 5

Przy próbie uruchomienia tego programu Ruby zgłosi błąd:

Możemy jednak przekonwertować liczbę całkowitą (integer) na ciąg znaków (string), aby uniknąć tego problemu:

Strings in Ruby 6

Tutaj:

  • Metoda to_s konwertuje wartość zmiennej na ciąg znaków.

Konwersja liczb na ciągi znaków jest powszechnym zjawiskiem przy pracy z takimi elementami jak kody pocztowe, waluty, numery telefonów i inne dane liczbowe.

Krok 4 – Interpolacja ciągów znaków (String Interpolation)

Choć konkatenacja ciągów znaków jest potężną funkcją, może bardzo łatwo stać się skomplikowana. W wielu sytuacjach prawdopodobnie zapomnisz o operatorze konkatenacji ( +), co prowadzi do sporego bólu głowy. Co więcej, przy pracy z różnymi typami danych, wartość musi najpierw zostać przekonwertowana na ciąg znaków. Na szczęście Ruby oferuje inne sposoby wstrzykiwania wartości zmiennych do ciągu znaków za pomocą funkcji interpolacji ciągów znaków (string interpolation).

Oto jak to wygląda. Na przykład, zamiast używać:

Będziemy używać:

Choć składnia może wydawać się nieco dziwna, radykalnie upraszcza ona kod. Nie ma potrzeby ręcznego wywoływania metody to_s w celu konwersji wartości zmiennej na ciąg znaków.

Użyjmy tej nowej techniki, aby zaktualizować nasz poprzedni kod:

Strings in Ruby 7

Uruchom kod:

Krok 5 – Literały znakowe (String Literals) i wartości znakowe (String Values)

Zauważ, że ciągi znaków zadeklarowane w kodzie są zawsze otoczone cudzysłowami. Jednak podczas wypisywania wyniku na ekranie konsoli nie ma symboli cudzysłowu. Istnieje między nimi wyraźna różnica.

  • Literał znakowy (String literal): To ciąg znaków zapisany w kodzie źródłowym (łącznie z cudzysłowami).
  • Wartość znakowa (String value): To wartość, która jest wypisywana na wyjściu (bez cudzysłowów).

Na przykład poniższy to literał znakowy:

Jego wartością znakową byłoby hello world.

Krok 6 – Unikanie cudzysłowów i apostrofów (Escaping)

Jak wykazaliśmy, cudzysłowy i apostrofy służą do oznaczania ciągów znaków w kodzie źródłowym. Stwarza to problem: nie można ich umieścić bezpośrednio w ciągu znaków. W przeciwnym razie spowoduje to problemy. Poniższy kod to demonstruje:

Strings in Ruby 8

Istnieją różne taktyki obejścia tego problemu.

  • Użycie alternatywnej składni ciągów znaków

To najprostszy sposób na obejście tego problemu. Jeśli Twój ciąg znaków wymaga pojedynczych cudzysłowów, użyj podwójnych cudzysłowów w literale znakowym (i na odwrót).

Naprawmy poprzedni przykład:

Innym przykładem byłoby:

Jednak nie sprawdzi się to w każdej sytuacji. Na przykład:

  • Używanie znaków ucieczki (Escape Characters)

Ukośnik wsteczny ( \) jest często nazywany znakiem ucieczki. Zapobiega on interpretowaniu przez Ruby kolejnego znaku dosłownie. Naprawmy poprzedni przykład. Użyj ukośnika wstecznego, aby zapobiec interpretowaniu przez Ruby wewnętrznych podwójnych cudzysłowów jako literałów:

  • Używanie alternatywnej składni

Jak dotąd pracowaliśmy tylko z pojedynczymi i podwójnymi cudzysłowami do oznaczania literałów znakowych. Jednak poprzednie przykłady to proste demonstracje tego, jak szybko może to wymknąć się spod kontroli. Aby rozwiązać ten problem, możemy całkowicie zrezygnować z cudzysłowów i użyć zupełnie innego symbolu do oznaczenia początku i końca ciągu znaków.

Spójrz na poniższy przykład:

Tutaj:

    • Symbol % definiuje kolejny znak ( $, w tym przypadku) jako ogranicznik ciągu znaków.
    • Literał znakowy to tutaj $the quick brown fox said, "I jumped over the lazy dog"$.

Przetestujmy to w praktyce:

Tutaj ciąg znaków jest zasadniczo traktowany w następujący sposób:

Jednak to ponownie wprowadza problem unikania ogranicznika, jeśli jest on używany w ciągu znaków. Jednym ze sposobów na uniknięcie tego jest użycie symboli, które zazwyczaj nie pojawiają się w ciągach znaków. Takie symbole mogą obejmować nawiasy klamrowe, nawiasy kwadratowe itp.:

Działa to również idealnie z interpolacją ciągów znaków:

Często używa się również %Q{} oraz %q{} do definiowania ciągów znaków w programach w języku Ruby. Tutaj %Q{} działa jak podwójny cudzysłów, a %q{} działa jak pojedynczy cudzysłów.

Krok 7 – Znaki nowej linii i długie ciągi znaków

Podczas pracy z ciągami znaków zdarzają się sytuacje, w których chcesz wprowadzić znak nowej linii lub powrotu karetki do ciągu. Możemy to zrobić, wprowadzając znaki ucieczki \n (nowa linia) oraz \r (powrót karetki).

Spójrz na poniższy przykład:

Literał znakowy wygląda myląco, prawda? Uporządkujmy go dla lepszej czytelności:

Zamiast ręcznie deklarować znaki nowej linii, możemy również użyć następującej struktury:

Strings in Ruby 8

Strings in Ruby 9

W tej metodzie ciąg znaków zachowuje wszystkie białe znaki. Jednak to psuje formatowanie danych wyjściowych. Usuń dodatkowe białe znaki, aby to naprawić:

Strings in Ruby 10

Chociaż problem z białymi znakami został rozwiązany, zmniejsza to czytelność kodu. Możemy rozwiązać ten problem, implementując heredoc, czyli termin określający wielolinijkowe literały znakowe. Zaktualizowany kod wyglądałby tak:

Strings in Ruby 11

Strings in Ruby 12

Począwszy od wersji Ruby 2.3 i nowszych, dostępna jest kolejna funkcja o nazwie składnia squiggly heredoc . Usuwa ona wiodące białe znaki w ciągach znaków. Aby zapisać squiggly heredoc, zastąp łącznik ( -) tyldą ( ~):

Strings in Ruby 13

Krok 8 – Powielanie ciągów znaków

W niektórych sytuacjach może być konieczne kilkukrotne powtórzenie ciągu znaków. Ruby pozwala na powielanie ciągów znaków na różne sposoby.

Jedną z takich technik jest użycie * operatora. Zazwyczaj jest on używany jako operator mnożenia w przypadku liczb. Jednak w przypadku ciągów znaków staje się on operatorem powielania ciągów znaków, powtarzającym pojedynczy ciąg znaków tyle razy, ile to konieczne. Liczba powtórzeń musi być liczbą całkowitą.

W poniższym przykładzie tekst Boris zostanie powtórzony 5 razy:

Strings in Ruby 14

Korzystając z tej funkcji, możemy stworzyć fajną grafikę ASCII. Zobacz poniższy przykład:

Podsumowanie

Ciągi znaków w programowaniu są fundamentalne. Ten przewodnik pokazuje pracę z ciągami znaków w języku Ruby. Dowiedzieliśmy się, jak tworzyć ciągi znaków i wykonywać różne operacje, takie jak konkatenacja, obsługa nowych linii, cudzysłowów itp. Korzystając z interpolacji ciągów znaków, dowiedzieliśmy się również, jak lepiej integrować wartości zmiennych z ciągami znaków. Używając operatora powielania ciągów znaków, możemy również wielokrotnie powtarzać pojedynczy ciąg znaków.

Choć sam Ruby jest doskonałym językiem programowania, często łączy się go z frameworkiem Rails. Ruby on Rails to framework aplikacji internetowych o otwartym kodzie źródłowym. Dowiedz się więcej o instalacji Ruby on Rails na Ubuntu. Jednak Ruby może również współpracować z innymi aplikacjami, takimi jak MySQL i PostgreSQL.

Miłego programowania!

author

Preslav Dobrev

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.