Obiekty typu String przechowują uporządkowane sekwencje bajtów, zazwyczaj znaków, zwykle w celu utworzenia fragmentów tekstu czytelnego dla człowieka. Są one bardzo powszechnym typem obiektów we wszystkich językach programowania, a Ruby posiada kilka wysokopoziomowych i kilka niskopoziomowych sposobów tworzenia, dostępu i manipulowania obiektami String.
Łańcuchy są najczęściej tworzone za pomocą literału String. Literał jest specjalną składnią języka Ruby, która tworzy obiekt określonego typu. Na przykład 23 jest literałem, który tworzy obiekt Fixnum. Jeśli chodzi o literały String, istnieje kilka form.
Łańcuchy w pojedynczych i podwójnych cudzysłowach
Większość języków ma literał String podobny do tego, więc może to być znajome. Rodzaje cudzysłowów, ' (pojedynczy cytat, apostrof lub twardy cytat) i " (podwójny cytat lub miękki cytat) są używane do zamykania literałów łańcuchowych, wszystko między nimi zostanie przekształcone w obiekty String. Demonstruje to następujący przykład.
Istnieją jednak pewne różnice pomiędzy pojedynczymi i podwójnymi cudzysłowami. Podwójne cudzysłowy lub miękkie cudzysłowy umożliwiają pewną magię, która dzieje się za kulisami. Najbardziej użyteczna jest interpolacja wewnątrz łańcuchów, przydatna do wstawiania wartości zmiennej w środek łańcucha. Osiąga się to poprzez użycie sekwencji #{ ... }. Poniższy przykład zapyta użytkownika o jego imię i przywita go, używając interpolacji do wstawienia jego imienia do wypisanego literału łańcuchowego.
Zauważ, że wewnątrz nawiasów klamrowych może znaleźć się dowolny kod, nie tylko nazwy zmiennych. Ruby oceni ten kod i cokolwiek zostanie zwrócone, spróbuje wstawić to do łańcucha. Możesz więc równie dobrze powiedzieć "Hello, #{gets.chomp}" i zapomnieć o zmiennej name. Jednak dobrą praktyką jest nie umieszczanie długich wyrażeń wewnątrz nawiasów klamrowych.
Pojedyncze cudzysłowy, apostrofy lub twarde cudzysłowy są znacznie bardziej restrykcyjne. Wewnątrz pojedynczych cudzysłowów Ruby nie wykona żadnej interpolacji ani sekwencji ucieczek poza ucieczką od znaku pojedynczego cudzysłowu i samego odwrotnego ukośnika (odpowiednio " i "). Jeśli nie zamierzasz używać interpolacji, zalecane jest używanie pojedynczych cudzysłowów częściej niż innych.
Poniższy przykład będzie próbował interpolować zmienną wewnątrz pojedynczych cudzysłowów.
Jeśli to uruchomisz, nie otrzymasz żadnego błędu, ale co zostanie wydrukowane?
Sekwencja interpolacji została przekazana bez interpretacji.
Kiedy należy używać pojedynczych i podwójnych cudzysłowów
Jest to kwestia stylu. Niektórzy wolą używać podwójnych cudzysłowów przez cały czas, chyba że staną się niewygodne. Inni wolą używać pojedynczych cudzysłowów, chyba że zachowanie interpolacji jest zamierzone. Nie ma nic z natury niebezpiecznego w używaniu podwójnych cudzysłowów przez cały czas, ale sprawia, że niektóre kody są łatwiejsze do odczytania. Nie musisz czytać ciągu podczas czytania przez kod, jeśli wiesz, że nie ma w nim interpolacji, ponieważ wiesz, że sam ciąg nie będzie miał żadnych skutków ubocznych. Tak więc, która forma literalna ciągu, której używasz, zależy od ciebie, nie ma tutaj prawdziwego dobrego i złego sposobu.
sekwencje ucieczki
Co jeśli w literale ciągu chcesz zawrzeć znak cytatu? Na przykład ciąg "Steve powiedział "Moo!"" nie będzie działał. Nie zadziała też "Can't touch this!". Oba te ciągi zawierają znak cytatu wewnątrz ciągu, skutecznie kończąc literał ciągu i powodując błąd składni. Mógłbyś zamienić znaki cytatu, jak 'Steve powiedział "Moo!"', ale to naprawdę nie rozwiązuje problemu. Zamiast tego możesz uciec od dowolnego znaku cytatu wewnątrz ciągu, a straci on swoje specjalne znaczenie (w tym przypadku specjalne znaczenie to zamknięcie ciągu).
Aby uciec od znaku, należy poprzedzić go znakiem backslash. Znak odwrotnego ukośnika mówi Rubiemu, aby zignorował specjalne znaczenie, jakie może mieć następny znak. Jeśli jest to pasujący znak cytatu, nie kończ łańcucha. Jeśli jest to znak haszujący, nie rozpoczynaj bloku interpolacji. Poniższy przykład demonstruje użycie backslasha do ucieczki od znaków specjalnych.
Znaku odwrotnego ukośnika można użyć do usunięcia wszelkich specjalnych znaczeń z następującego po nim znaku, ale, co jest mylące, można go również użyć do oznaczenia specjalnego zachowania w łańcuchach podwójnie cytowanych. Większość z tych specjalnych zachowań ma związek z wstawianiem znaków i sekwencji bajtów, które nie mogą być wpisane lub reprezentowane wizualnie. Nie wszystkie łańcuchy są łańcuchami znaków lub mogą zawierać sekwencje sterujące przeznaczone dla terminala, a nie dla użytkownika. Ruby daje możliwość wstawiania tego typu łańcuchów przy użyciu znaku ucieczki backslash.
- n - Znak nowej linii. Metoda puts robi to automatycznie, ale jeśli chcesz wstawić znak nowej linii w środku łańcucha lub łańcuch jest przeznaczony do czegoś innego niż metoda puts, możesz użyć tego do wstawienia nowej linii w łańcuchu.
- Tab - Znak tabulacji. Znak tabulacji przesuwa kursor (na większości terminali) na wielokrotność liczby 8, więc jest to bardzo przydatne do wyświetlania danych tabelarycznych. Istnieją jednak lepsze sposoby na zrobienie tego, a używanie znaku tabulacji jest uważane za nieco archaiczne lub hackerskie.
- ą - odwrotny ukośnik, po którym następują 3 cyfry, oznacza znak ASCII reprezentowany przez 3 cyfry ósemkowe. Dlaczego oktalna? Głównie z powodów historycznych.
- xnn - Odwrotny ukośnik, x i 2 cyfry hex. To samo co wersja ósemkowa, tylko z cyframi heksadecymalnymi.
Prawdopodobnie nigdy nie użyjesz większości z nich, ale wiedz, że istnieją. A także pamiętaj, że działają one tylko w podwójnie cytowanych ciągach.
Następna strona omawia łańcuchy wieloliniowe i alternatywną składnię literałów łańcuchowych.
Ciągi wieloliniowe
Większość języków nie pozwala na używanie wieloliniowych literałów, ale Ruby to robi. Nie ma potrzeby kończyć łańcuchów i dołączać więcej łańcuchów do następnej linii, Ruby radzi sobie z wieloliniowymi literałami łańcuchowymi bardzo dobrze dzięki domyślnej składni.
Alternatywna składnia
Tak jak w przypadku większości innych literałów, Ruby zapewnia alternatywną składnię dla literałów łańcuchowych. Jeśli na przykład używasz dużo znaków cudzysłowu wewnątrz literałów, możesz chcieć użyć tej składni. Użycie tej składni jest kwestią stylu, zazwyczaj nie są one potrzebne dla łańcuchów.
Aby użyć alternatywnej składni, użyj następującej sekwencji dla pojedynczo cytowanych łańcuchów %q{ ... }. Podobnie, użyj następującej składni dla łańcuchów podwójnie cytowanych %Q{ ... }. Ta alternatywna składnia przestrzega wszystkich tych samych reguł, co ich "normalni" kuzyni. Zauważ również, że zamiast nawiasów klamrowych możesz użyć dowolnych znaków. Jeśli użyjesz nawiasów, nawiasów kwadratowych, nawiasów kątowych lub nawiasów, to pasujący znak zakończy literał. Jeśli nie chcesz używać pasujących znaków, możesz użyć dowolnego innego symbolu (cokolwiek, co nie jest literą lub liczbą). Literał zostanie zamknięty innym takim samym symbolem. Poniższy przykład pokazuje kilka sposobów użycia tej składni.
Składnia alternatywna działa również jako łańcuch wieloliniowy.
Zacytuj ten artykuł Format mla apa chicago Twój cytat Morin, Michael. "String Literals." ThoughtCo, Aug. 28, 2020, thoughtco.com/string-literals-2908302. Morin, Michael. (2020, August 28). String Literals. Retrieved from https://www.thoughtco.com/string-literals-2908302 Morin, Michael. "String Literals." ThoughtCo. https://www.thoughtco.com/string-literals-2908302 (accessed November 3, 2022). kopia cytatu