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:
- Prawidłowo skonfigurowany system Ubuntu. Dowiedz się więcej o konfigurowaniu własnego serwera Ubuntu na CloudSigma.
- Dowolny nowoczesny edytor tekstu, najlepiej z podświetlaniem składni, na przykład VS Code, Sublime Text, Atom, Brackets, Vim, itp.
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:
|
1 2 |
'the quick brown fox' "jumps over the lazy dog" |
Aby wyświetlić dowolny wynik na ekranie konsoli, Ruby oferuje metodę print :
|
1 2 |
print 'the quick brown fox' print "jumps over the lazy dog" |
Czas wypróbować to w praktyce. Utwórz nowy plik Ruby practice.rb i wprowadź następujący kod:
Uruchom kod:
|
1 |
ruby practice.rb |
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:
|
1 2 |
puts 'the quick brown fox' puts "jumps over the lazy dog" |
Następnie uruchom kod ponownie:
|
1 |
ruby practice.rb |
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:
|
1 |
<variable_name> = <string> |
Zapisz następujący kod w 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 |
Uruchom kod:
|
1 |
ruby practice.rb |
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:
|
1 |
puts "the quick brown fox" + "jumps over the lazy dog" |
Uruchom kod:
|
1 |
ruby practice.rb |
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:
|
1 |
puts "the quick brown fox " + "jumps over the lazy dog" |
Uruchom kod:
|
1 |
ruby practice.rb |
Teraz wynik wygląda lepiej.
Konkatenacja ciągów znaków działa również ze zmiennymi. Spójrz na poniższy przykład:
|
1 2 |
first_half = "szybki brązowy lis " puts first_half + "skacze nad leniwym psem" |
Uruchom kod:
|
1 |
ruby practice.rb |
Kolejny przykład demonstruje długi łańcuch konkatenacji:
|
1 2 3 |
username = "cloudsigma" fav_color = "blue" puts "hello, " + username + "! your favorite color is " + fav_color + "." |
Uruchom kod:
|
1 |
ruby practice.rb |
Do tej pory zajmowaliśmy się tylko zmiennymi tekstowymi (string). Co jeśli istniałyby inne typy zmiennych? Poniższy program testuje ten scenariusz:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts username + user_id |
Przy próbie uruchomienia tego programu Ruby zgłosi błąd:
|
1 |
ruby practice.rb |
Możemy jednak przekonwertować liczbę całkowitą (integer) na ciąg znaków (string), aby uniknąć tego problemu:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts username + user_id.to_s |
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ć:
|
1 |
"hello, " + username + "!" |
Będziemy używać:
|
1 |
"hello, #{username}!" |
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:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts "hello, #{username}! your user ID is #{user_id}" |
Uruchom kod:
|
1 |
ruby practice.rb |
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:
|
1 |
"hello world" |
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:
|
1 |
puts 'it's what it is' |
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:
|
1 |
puts "it's what it is" |
Innym przykładem byłoby:
|
1 |
puts 'he said, "hello world"' |
Jednak nie sprawdzi się to w każdej sytuacji. Na przykład:
|
1 |
puts "Clousdigma says, "I'm a happy boi!"" |
-
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:
|
1 |
puts "Cloudsigma says, \"I'm a happy boi!\"" |
-
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:
|
1 |
%$the quick brown fox said, "I jumped over the lazy dog"$ |
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:
|
1 |
puts %$the quick brown fox said, "I jumped over the lazy dog"$ |
Tutaj ciąg znaków jest zasadniczo traktowany w następujący sposób:
|
1 |
"the quick brown fox said, \"I jumped over the lazy dog\"" |
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.:
|
1 |
puts %{"hello, world!", he said} |
Działa to również idealnie z interpolacją ciągów znaków:
|
1 2 3 |
username = "cloudsigma" user_id = 5 puts %{hello, #{username}.#{user_id}!} |
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:
|
1 2 |
hello_world = "the quick\nbrown fox\njumps over\nthe lazy dog" puts hello_world |
Literał znakowy wygląda myląco, prawda? Uporządkujmy go dla lepszej czytelności:
|
1 2 3 4 5 6 7 |
hello_world = "the quick\n" + "brown fox\n" + "jumps over\n" + "the lazy dog" puts hello_world |
Zamiast ręcznie deklarować znaki nowej linii, możemy również użyć następującej struktury:
|
1 2 3 4 5 6 |
hello_world = "the quick brown fox jumps over the lazy dog" puts hello_world |
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ć:
|
1 2 3 4 5 |
hello_world = "the quick brown fox jumps over the lazy dog" |
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:
|
1 2 3 4 5 6 7 8 |
hello_world = <<-END the quick brown fox jumps over the lazy dog END puts hello_world |
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ą ( ~):
|
1 2 3 4 5 6 7 8 |
hello_world = <<~END ten szybki brązowy lis skacze nad tym leniwym psem END puts hello_world |
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:
|
1 |
print "Boris" * 5 + "\n" |
Korzystając z tej funkcji, możemy stworzyć fajną grafikę ASCII. Zobacz poniższy przykład:
|
1 2 3 |
puts "=" * 15 puts "| hello world |" puts "=" * 15 |
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!












































Komentarze
Brak komentarzy. Bądź pierwszy.