У Ruby метод puts завжди повертає nil після виведення рядка на екран. Це є стандартною поведінкою для puts, оскільки його головна мета — вивести текст, а не повернути якесь значення. Іншими словами, puts є методом, призначеним для виводу, і його побічний ефект (виведення тексту) є важливішим за повернене значення.
result = puts "Привіт, світ!"
Привіт, світ!
=> nil
Коли ви виконуєте код "puts 'Привіт, світ!'", irb виведе "Привіт, світ!" на екран і поверне nil. Таким чином, змінна result буде мати значення nil.
result
=> nil
Чому так відбувається?
Метод puts призначений для виводу даних в стандартний потік виводу (зазвичай, це консоль). Повернення значення не є його основною функцією. Тому для зручності та узгодженості puts завжди повертає nil. Це просто треба запам'ятати.
Багато методів в Ruby, які мають побічні ефекти (наприклад, вивід на екран або модифікація об'єкта), повертають nil або сам об'єкт, на якому вони викликаються. Це робить їх поведінку передбачуваною і дозволяє легко зрозуміти, що основна дія методу відбулася як побічний ефект, а не через повернене значення.
Приклад з методом:
def say_hello
puts "Hello!"
end
result = say_hello
result
=> nil
Те саме правило з умовними виразами. У Ruby кожен вираз повертає значення. Коли ви виконуєте код, що містить умовні оператори або методи, Ruby завжди повертає результат останнього виконаного виразу. В наступному прикладі ви отримуєте => nil, тому що останнім виразом у коді є умовний оператор if, який повертає значення останнього виконаного блоку.
value = false
if value
puts "Цей код не буде виконаний"
else
puts "Змінна value є false"
end
Результат:
Змінна value є false
=> nil
value = false
if value
puts "Цей код не буде виконаний"
else
puts "Змінна value є false"
end
В цьому коді змінна value має значення false. Оператор if перевіряє значення value. Оскільки value є false, Ruby виконує блок коду всередині else.
puts "Змінна value є false"
Метод puts виводить рядок "Змінна value є false" і повертає nil, тому що puts завжди повертає nil після виведення рядка на екран. Таким чином, результат виконання блоку else є nil.
В результаті, коли умовний оператор if завершує виконання, він повертає значення останнього виконаного виразу, яким є результат puts, тобто nil.
Тому ви бачите:
Змінна value є false
=> nil
Сподіваюсь з цим питанням розібрались ^_^