Ruby — это интерпретируемый, динамический, рефлексивный, объектно-ориентированный язык программирования. Разработанный Юкихиро Мацумото, Ruby ориентирован на простоту и продуктивность. Элегантный синтаксис позволяет разработчикам легче читать и писать код.
В этом руководстве мы будем работать со строками в Ruby.
Предварительные требования
Для выполнения шагов, описанных в этом руководстве, вам понадобятся следующие компоненты:
- Правильно настроенная система Ubuntu. Узнайте больше о настройке собственного сервера Ubuntu на CloudSigma.
- Любой современный текстовый редактор, желательно с подсветкой синтаксиса, например, VS Code, Sublime Text, Atom, Brackets, Vim и т. д.
Строковый тип данных
В программировании строка — это распространенный тип данных, который поддерживается каждым современным языком программирования. Он характеризуется последовательностью символов. Вся последовательность символов рассматривается как единый элемент данных. Строка может содержать буквы, цифры и специальные символы/знаки.
Ruby, будучи чисто объектно-ориентированным языком программирования, относится к строкам как к объектам. В отличие от многих других языков, строки в Ruby являются изменяемыми. По сути, значение строки можно изменить на месте.
Шаг 1 – Создание и вывод строк
В Ruby строки заключаются либо в одинарные кавычки ( ') либо в двойные кавычки ( "). Ниже приведены две допустимые строки в Ruby:
|
1 2 |
'the quick brown fox' "jumps over the lazy dog" |
Для вывода любой информации на экран консоли в Ruby есть метод print:
|
1 2 |
print 'the quick brown fox' print "jumps over the lazy dog" |
Время применить это на практике. Создайте новый файл Ruby practice.rb и введите следующий код:
Запустите код:
|
1 |
ruby practice.rb |
Как и ожидалось, команда print выводит переданные строки. Если мы хотим вывести строки на отдельных строках, лучше использовать puts взамен. Обновите код:
|
1 2 |
puts 'the quick brown fox' puts "jumps over the lazy dog" |
Затем снова запустите код:
|
1 |
ruby practice.rb |
Шаг 2 – Строковые переменные
Переменные — это имена, указывающие на определенное место в памяти компьютера, где хранится значение. Мы можем сохранить нужное значение в переменной и использовать его позже.
В Ruby для объявления строковой переменной укажите имя переменной и присвойте ей строковое значение:
|
1 |
<variable_name> = <string> |
Запишите следующий код в 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 |
Запустите код:
|
1 |
ruby practice.rb |
Здесь:
- Мы определили две переменные first_half и second_half, каждой из которых присвоено строковое значение.
- Метод puts выводит значение переменных.
Шаг 3 – Конкатенация строк
Путем конкатенации мы можем взять несколько строк и объединить их вместе для создания новой строки. Конкатенация строк обозначается оператором конкатенации ( +). Обратите внимание, что этот символ также является оператором сложения при работе с арифметическими операциями.
Давайте попробуем выполнить конкатенацию строк, которые мы объявили к этому моменту:
|
1 |
puts "the quick brown fox" + "jumps over the lazy dog" |
Запустите код:
|
1 |
ruby practice.rb |
Как показывает вывод, конкатенация не добавляет никаких дополнительных символов между строками. Вот почему fox и jumps слились воедино. Мы можем исправить это, добавив пробел после fox:
|
1 |
puts "the quick brown fox " + "jumps over the lazy dog" |
Запустите код:
|
1 |
ruby practice.rb |
Теперь вывод выглядит лучше.
Конкатенация строк также работает с переменными. Посмотрите на следующий пример:
|
1 2 |
first_half = "быстрая бурая лиса " puts first_half + "перепрыгивает через ленивую собаку" |
Run the code:
|
1 |
ruby practice.rb |
The next example demonstrates a long chain of concatenation:
|
1 2 3 |
username = "cloudsigma" fav_color = "синий" puts "привет, " + username + "! ваш любимый цвет — " + fav_color + "." |
Run the code:
|
1 |
ruby practice.rb |
До сих пор мы имели дело только со строковыми переменными. Что если бы существовали другие типы переменных? Следующая программа тестирует этот сценарий:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts username + user_id |
При попытке запустить эту программу Ruby выдаст сообщение об ошибке:
|
1 |
ruby practice.rb |
Однако мы можем преобразовать целое число в строку, чтобы избежать этой проблемы:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts username + user_id.to_s |
Здесь:
-
Метод to_s преобразует значение переменной в строку.
Преобразование чисел в строки — обычное дело при работе с такими элементами, как почтовые индексы, валюта, номера телефонов и другие числовые данные.
Шаг 4 – Интерполяция строк
Хотя конкатенация строк — мощная функция, она может легко стать запутанной. Во многих ситуациях вы, вероятно, обнаружите, что пропустили оператор конкатенации ( +), что приведет к большой головной боли. Более того, при работе с различными типами данных их сначала необходимо преобразовать в строку. К счастью, Ruby предлагает другие способы внедрения значений переменных в строку с помощью функции интерполяция строк.
Вот как это выглядит. Например, вместо использования:
|
1 |
"привет, " + username + "!" |
Мы будем использовать:
|
1 |
"привет, #{username}!" |
Хотя синтаксис может показаться немного странным, он значительно упрощает код. Нет необходимости вручную вызывать метод to_s для преобразования значения переменной в строку.
Давайте воспользуемся этой новой техникой, чтобы обновить наш предыдущий код:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts "привет, #{username}! ваш ID пользователя — #{user_id}" |
Run the code:
|
1 |
ruby practice.rb |
Шаг 5 – Строковые литералы и строковые значения
Обратите внимание, что строки, объявленные в коде, всегда окружены кавычками. Однако при выводе результата на экран консоли символы кавычек отсутствуют. Между ними явно есть различие.
- Строковый литерал: это строка, записанная в исходном коде (включая кавычки).
- Строковое значение: это значение, которое выводится на экран (без кавычек).
Например, следующий вариант является строковым литералом:
|
1 |
"hello world" |
Его строковым значением будет привет мир.
Шаг 6 – Экранирование кавычек и апострофов
Как мы показали, кавычки и апострофы используются для обозначения строк в исходном коде. Это создает проблему: вы не можете использовать их непосредственно в строке. В противном случае это приведет к проблемам. Следующий код демонстрирует это:
|
1 |
puts 'it's what it is' |
Существуют различные тактики для обхода этой проблемы.
-
Использование альтернативного синтаксиса строк
Это самый простой способ обойти проблему. Если вашей строке требуются одинарные кавычки, используйте двойные кавычки в строковом литерале (и наоборот).
Давайте исправим предыдущий пример:
|
1 |
puts "it's what it is" |
Другим примером может быть:
|
1 |
puts 'he said, "hello world"' |
However, it’s not going to work in every situation. For example:
|
1 |
puts "Clousdigma says, "I'm a happy boi!"" |
-
Использование экранирующих символов
Символ обратного слэша ( \) часто называют экранирующим символом. Он не позволяет Ruby интерпретировать следующий символ буквально. Давайте исправим предыдущий пример. Используйте обратный слэш, чтобы Ruby не интерпретировал внутренние двойные кавычки как литералы:
|
1 |
puts "Cloudsigma говорит: \"Я счастливый малый!\"" |
-
Использование альтернативного синтаксиса
До сих пор мы работали только с одинарными и двойными кавычками для обозначения строкового литерала. Однако предыдущие примеры наглядно демонстрируют, как быстро все может выйти из-под контроля. Чтобы решить эту проблему, мы можем вообще отказаться от кавычек и использовать совершенно другой символ для обозначения начала и конца строки.
Посмотрите на следующий пример:
|
1 |
%$the quick brown fox said, "I jumped over the lazy dog"$ |
Здесь:
-
- Символ % определяет следующий символ ( $, в данном случае) как разделитель строки.
- Строковый литерал здесь — это $the quick brown fox said, "I jumped over the lazy dog"$.
Давайте применим это на практике:
|
1 |
puts %$the quick brown fox said, "I jumped over the lazy dog"$ |
Здесь строка фактически обрабатывается следующим образом:
|
1 |
"the quick brown fox said, \"I jumped over the lazy dog\"" |
Однако это снова приводит к проблеме экранирования разделителя, если он используется в строке. Один из способов избежать этого — использовать символы, которые обычно не встречаются в строках. Такие символы могут включать фигурные скобки, квадратные скобки и т. д.:
|
1 |
puts %{"hello, world!", he said} |
Это также отлично работает с интерполяцией строк:
|
1 2 3 |
username = "cloudsigma" user_id = 5 puts %{hello, #{username}.#{user_id}!} |
Также часто используются %Q{} и %q{} для определения строк в программах на Ruby. Здесь %Q{} действует как двойные кавычки, а %q{} действует как одинарные кавычки.
Шаг 7 – Переносы строк и длинные строки
При работе со строками могут возникнуть ситуации, когда вам понадобится добавить в строку символ новой строки или возврат каретки. Мы можем сделать это, введя управляющие символы \n (новая строка) и \r (возврат каретки).
Посмотрите на следующий пример:
|
1 2 |
hello_world = "the quick\nbrown fox\njumps over\nthe lazy dog" puts hello_world |
Строковый литерал выглядит запутанным, верно? Давайте перепишем его для лучшей читаемости:
|
1 2 3 4 5 6 7 |
hello_world = "the quick\n" + "brown fox\n" + "jumps over\n" + "the lazy dog" puts hello_world |
Вместо того чтобы вручную объявлять символы новой строки, мы также можем использовать следующую структуру:
|
1 2 3 4 5 6 |
hello_world = "the quick brown fox jumps over the lazy dog" puts hello_world |
При таком методе в строке сохраняются все пробелы. Однако это портит вывод. Удалите лишние пробелы, чтобы исправить это:
|
1 2 3 4 5 |
hello_world = "the quick brown fox jumps over the lazy dog" |
Хотя проблема с пробелами была решена, это снижает читаемость кода. Мы можем исправить эту проблему, внедрив heredoc, термин для многострочных строковых литералов. Обновленный код будет выглядеть следующим образом:
|
1 2 3 4 5 6 7 8 |
hello_world = <<-END the quick brown fox jumps over the lazy dog END puts hello_world |
Начиная с Ruby версии 2.3 и выше, доступна еще одна функция под названием squiggly heredoc синтаксис. Он удаляет начальные пробелы в строках. Чтобы выразить squiggly heredoc, замените дефис ( -) на тильду ( ~):
|
1 2 3 4 5 6 7 8 |
hello_world = <<~END эта быстрая бурая лиса прыгает через эту ленивую собаку END puts hello_world |
Шаг 8 – Дублирование строк
В некоторых ситуациях может возникнуть необходимость повторить строку несколько раз. Ruby позволяет дублировать строки различными способами.
Один из таких методов — использование оператора *. Обычно он используется как оператор умножения при работе с числами. Однако при работе со строками он становится оператором дублирования строк, повторяя одну строку столько раз, сколько необходимо. Количество повторений должно быть целым числом.
В следующем примере текст Boris будет повторен 5 раз:
|
1 |
print "Boris" * 5 + "\n" |
Используя эту функцию, мы можем создавать классные рисунки ASCII. Посмотрите следующий пример:
|
1 2 3 |
puts "=" * 15 puts "| hello world |" puts "=" * 15 |
Заключение
Строки в программировании имеют важнейшее значение. В этом руководстве показана работа со строками в Ruby. Мы узнали, как создавать строки и выполнять различные операции, такие как конкатенация, обработка символов новой строки, кавычек и т. д. С помощью интерполяции строк мы также узнали, как лучше integrarate значения переменных в строки. Используя оператор дублирования строк, мы также можем повторять одну строку несколько раз.
Хотя Ruby сам по себе является отличным языком программирования, его часто используют в сочетании с фреймворком Rails. Ruby on Rails — это веб-фреймворк с открытым исходным кодом. Узнайте больше об установке Ruby on Rails на Ubuntu. Тем не менее, Ruby также может работать с другими приложениями, такими как MySQL и PostgreSQL.
Приятного программирования!












































Комментарии
Комментариев пока нет. Будьте первым.