Символ

Символы в Ruby представляют собой объекты, которые представляют собой неизменяемые строки и используются для определения уникальных идентификаторов. В этом уроке мы рассмотрим основы символов в Ruby и посмотрим, как их можно использовать в вашем коде.

Создание символов

Символы в Ruby представлены символом двоеточия : перед строковым литералом. Например, вот так можно создать символ:

hello_world_sym = :hello_world

Символы могут также создаваться с помощью метода строки .to_sym() и .intern(). Оба метода преобразуют строку в символ. Вот к примеру мы создаем тот же самый символ :hello_world, но с помощью метода строки .to_sym():

hello = "hello_world".to_sym

Использование символов

Символы обычно используются как ключи хэша. Посмотрим на пример:

person = {
  :name => "John",
  :age => 30,
  :city => "New York"
}

Важно: когда вы записываете хэш в формате двоеточия ({'hello':'world'}), то ruby автоматически превращает ваш строковый ключ в символ

Главное отличие симвоал от строки: иммутабельность. Иммутабельность - это состояние объекта быть неизменяемым. В будущих главах мы будет обсуждать устройство хэш таблицы изнутри, где вы поймете почему иммутабльность это очень важно для ключа в хэш структуре, сейчас главное запомнить эту особенность.

А разве строки не иммутабельны ? На самом деле нет. Да, многие методы, которые позволяют изменять строку возвращают новое значение, а исходная строка остается неизменной, но в тоже время многие из этих методов имеют 'двойников' с таким же названием, но с добавлением ! в конце, которые делают тоже самое, но при этом изменяют и исходную строку тоже. Пример:

source_str = "hello world"
new_str = source_str.gsub(/l/, "L")
puts "source string: #{source_str}"
puts "new string: #{new_str}"

new_str = source_str.gsub!(/l/, "L")
puts "source string: #{source_str}"
puts "new string: #{new_str}"

Совет: чтобы писать чистый код и получать предсказуемое поведение программы, пользуйтесь только методами, которые не изменяют исходную строку. Пусть это не так дешево по расходу оперативной памяти, зато ошибок будет меньше

Задание symbol_string

  • Напишите два метода: convert_string_symbol(str) и convert_symbol_string(sym). Первый должен принимать в аргументах строку и возвращать его представление в виде символа, второй метод принимает символ в аргументах и должен возвращать его строковое представление.

  • Протестируйте методы, переведя ее вашим методом в символ, а после полученный символ обратно в строку

Last updated