Конкатенация строк в Ruby

Конкатенация строк в Ruby осуществляется с помощью оператора сложения "+". Можно довольно легко запомнить, что символ плюса соединяет/прикрепляет/cклеивает строки в Ruby.

Для наглядности рассмотрим примеры:

"Пё" + "Cя"
=> "ПёCя"

"Ки" + "Cя"
=> "КиCя"

Выше приведен пример прямого склеивания строк. В Ruby мы можем также конкатенировать переменные (класса String).

first = "Пё"
second = "Ки"
third = "Ся"

first + third
=> "ПёСя"

second + third
=> "КиСя"

Полученные строки "ПёСя" и "КиСя" отлично склеились, но хотелось бы сделать их более читабельными. При склеивании мы можем использовать различные методы, которые применимы к строкам.

Для иллюстрации рассмотрим один из них - "downcase":

second + third.downcase
=> "Кися"


"Пё" + "Ся".downcase
=> "Пёся"

В случаях, когда нам нужно конкатенировать к строке цифру - мы можем использоваться разные приемы (в зависимости от технических требований и вкуса программиста):

"У меня" + 6 + "кошек"

Этот код вызовет ошибку: TypeError (no implicit conversion of Integer into String)

Для устранения этой проблемы нам нужно превратить Integer (число) в String (строка):

"У меня" + 6.to_s + "кошек"
=> "У меня6кошек"

Полученная строка нуждается в пробелах. Это можно сделать добавив их в слева и справа стоящие от цифры (преобразованной в string) строки:

"У меня " + 6.to_s + " кошек"
=> "У меня 6 кошек"

Для упрощения записи можно количество кошек взять в двойные кавычки, тем самым превратив цифру в строку:

"У меня " + "6" + " кошек"
=> "У меня 6 кошек"

Количество кошек периодически меняется и мы можем использовать переменную. Ниже приведены несколько вариантов конкатенации строк и цифры.

# Тут мы получаем случайное число,
# которое преобразуем в строку во время конкатенации.

dynamic_cats_counter = rand(5..9)
"У меня " + dynamic_cats_counter.to_s + " кошек" 

# Тут мы получаем случайное число
# и сразу конвертируем в строку.

dynamic_cats_counter = rand(5..9).to_s
"У меня " + dynamic_cats_counter + " кошек" 

# Тут мы получаем случайное число
# и интерполируем его внутри строки
# используя привычный синтаксис Ruby.

dynamic_cats_counter = rand(5..9)
"У меня " + "#{dynamic_cats_counter}" + " кошек"

Если есть возможность лишний раз не использовать конкатенацию для построения простых строк - добавляйте переменные непосредственно внутрь.

Запись станет более читабельной и простой для восприятия. Обратите внимание, что интерполяция в строках конструкции "#{var}" возможна только при использовании двойных кавычек.

dynamic_cats_counter = rand(5..9)
"У меня #{dynamic_cats_counter} кошек"

Для склеивания строк в Ruby можно использовать оператор "<<", который передает одну строку в конец другой (тем самым изменяя/модифицируя ее).

Будьте аккуратны, используя этот оператор.

first = "Пё"
second = "Ся"

first << second
=> "ПёCя"

first => "ПёCя"

second
=> "Ся"

Отдельно стоит упомянуть о возможности умножения строк. Оператор умножения "*" прибавляет к концу строки ее саму столько раз, на сколько вы укажете:

"Мяу" * 10
=> "МяуМяуМяуМяуМяуМяуМяуМяуМяуМяу"

"Ня" * 3
=> "НяНяНя"