ГоловнаВсі публікаціїКатегоріїПро проєкт

Чому Ruby код повертає nil після виконання puts?

Обкладинка нотатки: Чому Ruby код повертає nil після виконання puts?
У 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
Сподіваюсь з цим питанням розібрались ^_^
Що означає "Нативний"?
22.05.2024 07:01

Що означає "Нативний"?

meme code
meme code@memecode
Як працює 'rails console --sandbox'?
23.05.2024 19:39

Як працює 'rails console --sandbox'?

meme code
meme code@memecode
Для чого потрібна база даних CVE (Common Vulnerabilities and Exposures)?
29.05.2024 08:05

Для чого потрібна база даних CVE (Common Vulnerabilities and Exposures)?

meme code
meme code@memecode
29.05.2024 09:09

Які операційні системи підтримують Ruby?

meme code
meme code@memecode
Чи створює Ruby нову копію об’єкта при присвоєнні змінної змінній?
29.05.2024 09:30

Чи створює Ruby нову копію об’єкта при присвоєнні змінної змінній?

meme code
meme code@memecode
В чому різниця між immediate value та reference у Ruby?
29.05.2024 12:00

В чому різниця між immediate value та reference у Ruby?

meme code
meme code@memecode
Яка різниця між nil і false в Ruby?
29.05.2024 20:59

Яка різниця між nil і false в Ruby?

meme code
meme code@memecode
Чому порожній рядок (string) у Ruby не є false?
31.05.2024 14:39

Чому порожній рядок (string) у Ruby не є false?

meme code
meme code@memecode
Область видимості локальної змінної в Ruby
03.06.2024 16:46

Область видимості локальної змінної в Ruby

meme code
meme code@memecode
Чим відрізняється int та bigint в Ruby? Мінімальні та максимальні значення.
13.06.2024 06:37

Чим відрізняється int та bigint в Ruby? Мінімальні та максимальні значення.

meme code
meme code@memecode
Що означає помилка 'is out of range' в Ruby on Rails? Range Error - Integer with limit 4 bytes
13.06.2024 07:18

Що означає помилка 'is out of range' в Ruby on Rails? Range Error - Integer with limit 4 bytes

meme code
meme code@memecode
Що таке імутабільність та мутабільність?
19.06.2024 07:48

Що таке імутабільність та мутабільність?

meme code
meme code@memecode