Ruby/Переменные: различия между версиями

Содержимое удалено Содержимое добавлено
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 8:
Примеры переменных:
 
<sourcesyntaxhighlight lang="ruby">array
variable
another_variable
3element # неправильное имя. Начинается с цифры
_3element # а вот как можно
__ # немного странное, но допустимое имя переменной</sourcesyntaxhighlight>
 
Переменная может иметь имя не только латинское, но и русское. Для этого, правда, требуется, чтобы весь текст программы был написан в кодировке UTF-8, а интерпретатор запускался с параметром <code>-KU</code>.
Строка 19:
[[w:Присваивание (программирование)|Присваивание]] осуществляется знаком равенства (<code>=</code>), вот так:
 
<sourcesyntaxhighlight lang="ruby">array = [1, 2, 3, 4]
variable = array + [1, 2]
another_variable = variable - array</sourcesyntaxhighlight>
 
То, что справа от <code>=</code>, прежде чем стать значением переменной, обычно полностью вычисляется. Наша переменная <code>variable</code> будет содержать массив <code>[1, 2, 3, 4, 1, 2]</code>, потому что именно таков результат действия <code>array + [1, 2]</code>. Плюс (<code>+</code>) с массивами поступает именно так: прицепляет второй массив в хвост первого.
Строка 30:
Фокус-покус:
 
<sourcesyntaxhighlight lang="ruby">girlfriend = "Татьяна"
goes_on_a_visit = girlfriend
puts girlfriend #=> Татьяна
goes_on_a_visit[0] = "Б" # меняем первую (номер ноль) букву у переменной-строки
puts girlfriend #=> Батьяна
# На первый взгляд странно и неожиданно</sourcesyntaxhighlight>
 
Значение, возвращаемое первой переменной, изменилось потому, что в Ruby переменные содержат лишь ''ссылку'' на то, что вы им присваиваете.
Строка 43:
Чтобы <code>girlfriend</code> наша осталась <code>"Татьяна"</code>, надо в переменную занести её [[w:Клонирование (информатика)|клон]]:
 
<sourcesyntaxhighlight lang="ruby">girlfriend = "Татьяна"
goes_on_a_visit = girlfriend.clone
goes_on_a_visit[0] = "М" # Но изменили мы лишь клон. Дома в сохранности сидит настоящая:
puts girlfriend #=> Татьяна</sourcesyntaxhighlight>
 
Можно создавать копии объектов ещё методом <code>.dup</code>. Разница между ними будет понятна позже.
Строка 52:
Для безвредного присваивания новых значений переменным их редко приходится клонировать, ибо большинство методов делают это и так. Даже если вы просто присвоите переменной новое значение, Ruby создаст объект с новым значением и поместит в (уже существующую) переменную ссылку на тот объект:
 
<sourcesyntaxhighlight lang="ruby"># …
goes_on_a_visit = "Аристарх" # Создаётся новый объект, переменная переводится на него
p girlfriend #=> "Татьяна"</sourcesyntaxhighlight>
 
{{BookCat}}