All original content is created in Ukrainian. Not all content has been translated yet. Some posts may only be available in Ukrainian.Learn more

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

Post cover: Чому Ruby код повертає nil після виконання puts?
This content has not been translated yet.We're showing the original Ukrainian content below.
У 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
Сподіваюсь з цим питанням розібрались ^_^

This post doesn't have any additions from the author yet.

What does "Native" mean?
22 May 07:01

What does "Native" mean?

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

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

meme code
meme code@memecode
What is the CVE (Common Vulnerabilities and Exposures) database for?
29 May 08:05

What is the CVE (Common Vulnerabilities and Exposures) database for?

meme code
meme code@memecode
29 May 09:09

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

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

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

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

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

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

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

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

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

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

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

meme code
meme code@memecode
Чим відрізняється int та bigint в Ruby? Мінімальні та максимальні значення.
13 Jun 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 Jun 07:18

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

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

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

meme code
meme code@memecode