Рядки - це довільної довжини набори символів, які укладені в одинарні або подвійні лапки.
Ви можете оголошувати рядки використовуючи спеціальний ідентифікатор рядка% q, наприклад:
Ви не можете використовувати тільки цифри і букви, всі інші символи доступні для укладення в них строкового літерала. Представлене в прикладі вище висновок рядка в довільні символи рівносильно висновку в одинарні лапки. Це важливо знати тому, що між рядком в одинарних лапках і в подвійних є велика різниця, але про це трішки нижче.
Ruby також дозволяє створювати рядкові літерали, які займають кілька фізичних рядків:
Запам'ятайте! Рядки укладені в подвійні лапки можуть містити виконувані фрагменти коду, а також спеціальні символи, наприклад той же символ нового рядка. Поміщений в рядок код буде виконаний і на його місце в рядку буде вставлено повернене їм значення. Код, який ви бажаєте помістити в рядок слід укласти в фігурні дужки перед якими повинен слідувати символ Шарп - #, приклади:
Якщо ви не бажаєте, щоб щось поміщене в #<> виконувалося як код і щоб спеціальні символи містяться в рядку ігнорувалися, вам слід або використовувати одинарні лапки для укладення в них рядки, або екранувати ті фрагменти рядки, укладеної в подвійні лапки, які можуть виконуватися. Екранування відбувається за допомогою символу зворотного слеша «\», приклади:
Зверніть увагу, що не залежно від того, в подвійні або одинарні лапки ми укладаємо рядок, змінної присвоюється рядок укладена в подвійні лапки. Це означає, що в рядку укладену в одинарні лапки автоматично відбувається екранування.
Не дивлячись на те, що в рядках укладених в поодинокі лапки екранування відбувається автоматично, все-таки існує один символ, який вам однозначно доведеться екранувати - це власне одинарні лапки, приклад:
Таке екранування в одинарних рядках необхідно для того, щоб інтерпретатор при читанні коду не плутався в тому, чи є які одинарні лапки частиною рядка, або вона завершує її. Саме для таких випадків і була додана можливість створення рядків за допомогою ідентифікатора рядка% q і довільних обрамляють символів, так як рядок створена в такий спосіб абсолютно ідентична рядку укладеної в одинарні лапки з тією лише різницею, що вам не потрібно екранувати наявні в рядку лапки, приклад:
На цьому зі створенням рядків ми покінчили, перейдемо до такого важливого заняття, як робота з рядками!
Ruby дуже витончений мову програмування, який має дуже зручний і зрозумілий синтаксис і надає дуже багато вбудованих методів для роботи з основними типами.
Об'єднання рядків (іншими словами конкатенація) досить використовувати оператор + (как не странно він же метод), приклад:
Погодьтеся, + тут виглядає куди логічніше, ніж. в PHP, так і код більш читабельний.
Ще один спосіб об'єднати рядки - це оператор *, який займається тим, що об'єднує рядок зі своїми копіями N-число раз, приклад:
Індексація рядків, елементи рядків
В Ruby рядки мають кілька подібностей з масивами з тієї причини, що кожен символ рядка має свій індекс - порядок в рядку по якому до нього можна звернутися. Якщо говорити ще точніше, то таких індексів цілих два: лівобічний і правобічний, приклади:
Лівосторонні індекси вказують позицію символу з лівого боку (з початку) рядки і починаються з нуля. Правобічні індекси вказують позицію символу з правого боку (з кінця рядка) і починаються з -1, при цьому всі справа наліво індекси мають в собі знак "-", який і відрізняє їх від лівосторонніх. Термінологія «ліва сторона рядка» і «права сторона рядка» більше коректна, оскільки, наприклад, в арабській мові лист йде справа на ліво.
Ruby дозволяє вам звертатися не тільки до окремого символу в рядку, але і до набору з проміжків таких символів, для цього в квадратних дужках необхідно вказувати, або індекс першого обраного символу і кількість обираних символів, або діапазон індексів обираних символів, приклади:
Ви не тільки можете отримувати фрагменти рядки, але і встановлювати для них значення:
Робота з рядками
В Ruby практично всі за рідкісним винятком є об'єктом і рядки не виняток. Строковий об'єкт носить тип String, тобто є екземпляром класу String. Це означає, що рядок, як і будь-який інший об'єкт має власні методи, деякі з яких ви вже бачили в прикладах вище. Щоб переконатися в тому, чи є щось об'єктом, досить спробувати викликати у цього «чогось» метод #class. Метод #class не повертає повідомлення «Ця штуковина - об'єкт», він повертає клас (тип), якому належить об'єкт. Якщо щось не є об'єктом, то і не має методів взагалі.
Далі ми поговоримо про методи рядків, насправді їх величезна кількість. Вашій увазі представлю найпопулярніші, їх не потрібно запам'ятовувати. Ви просто повинні знати, що є такий метод і що він робить. Щоб у разі необхідності не винаходити велосипед, а просто знайти його. Або на цьому сайті, або в rubydoc.
Рядки мають кілька методів дозволяють працювати капіталізації тексту:
#upcase - даний метод переводить всі символи рядка в верхній регістр (робить всі букви великими), приклад:
Зверніть увагу на те, що рядок не змінилася, метод #upcase просто повернув новий рядок. Для того, щоб змінити саму рядок для якої був викликаний метод потрібно використовувати BANG-методи.
BANG-методи, це такі методи, які змінюють сам об'єкт, для якого вони викликаються. У них немає нічого особливого, крім імені. Для BANG - методів бажано, але не обов'язково давати імена, який закінчуються на «!», В нашому випадку це метод #upcase !:
#downcase - цей метод протилежний методи #upcase, він переводить символи рядка в нижній регістр, приклад:
#capitalize - даний метод використовується для того, щоб зробити першу букву рядка заголовної:
#swapcase - даний метод перетворює регістр символів в протилежний, тобто, великі літери на малі, а малі в заголовні, приклад:
#lstrip і #rstrip - дані методи використовуються для видалення пробілів відповідно з лівого боку рядка і з правого боку рядка, приклад:
#strip - даний метод об'єднує в собі обидва #lstrip і #rstrip:
#reverse - даний метод змінює порядок символів в рядку на зворотний, приклад:
#size і #length - обидва ці методу виконують одне і те ж дію - вони повертають кількість символів в рядку:
#delete - даний метод видаляє фрагмент рядка, приклад:
#scan - метод приймає в якості аргументу регулярний вираз і повертає масив подстрок (фрагментів рядка), які відповідає регулярному виразу. Регулярними виразами буде присвячена окрема глава, а поки приклад:
#chomp - даний метод видаляє закінчення рядка. Використовуйте цей символ завжди коли отримуєте інформацію з консолі, тому що рядки закінчуються символом нового рядка.
Як приклад хочу привести маленький і дурний метод, який переводить множинну форму англійського слова в одиночну форму просто шляхом видалення закінчення:
#index і #rindex - дані методи приймають в якості аргументу рядок або шаблон регулярного виразу і повертають відповідно індекс символу рядка з якого починається відповідно перше або останнє відповідність шаблону, приклади:
#insert - даний метод приймає в якості аргументів рядок і позицію вставки (індекс) для вставки цього рядка в рядок для якої він був викликаний, при цьому символи знаходяться в тому місці, куди проводиться запису не перезаписувати а зсуваються вперед, приклад:
Метод #insert виробляє зміни безпосередньо в самому рядку.
#chars і #each_char - є методами ітераторами, які проходять по кожному символу рядка, передають його в блок коду, який виконує над кожним символом певним чином впливати.
Примітка! У версії 2.0 метод chars тепер повертає array
#empty? - даний метод повертає значення true якщо рядок порожня і false, якщо в рядку є хоча б один символ:
#include? - метод приймає фрагмент рядка і перевіряє рядок для якої був викликаний на те, чи існують в ній подстроки відповідні фрагменту, приклад: