Skip to content

Latest commit

 

History

History
57 lines (36 loc) · 3.08 KB

ruby-chem-abort-otlichaetsya-ot-exit.md

File metadata and controls

57 lines (36 loc) · 3.08 KB

Ruby: Чем abort отличается от exit?

Обратите внимание, что в ruby:

abort "Ура, вы выиграли!"

выйдет из программы с нужным сообщением, а

exit "Ура, вы выиграли!"

выдаст ошибку:

in `exit': no implicit conversion of String into Integer (TypeError)

Вкратце:

  • abort — завершение программы, которое лучше использовать в случае какой-то ошибки. Этот метод принимает в качестве параметра сообщение об ошибке.
  • exit — завершение программы (в т.ч. и обычное, по сценарию). Этот метод в качестве параметра принимает число, код возврата.

Подробно:

Каждая программа после своей работы возвращает какое-то число. Попробуйте написать так (для mac/linux):

ls
echo $?

Увидите 0, т.к. ls отработала нормально.

А попробуйте так

ls file_that_do_not_exist.txt
echo $?

Будет 2 (если, конечно файла file_that_do_not_exist.txt действительно нет в текущей папке) — именно такой «код возврата» возвращает команда ls, когда файл не найден.

В ruby exit 2 как раз сделает так, что Ваша программа закончит работу с кодом возврата 2.

В примере из вопроса руби увидел exit, увидел его аргумент, попытался привести строку к числу и потерпел неудачу. О чем и написал ;)

Если вызвать exit без аргумента, то он выйдет из программы с кодом 0: Все хорошо. Так и надо его вызывать, если программу нужно просто прекратить.

p.s. Почитайте про код ответа на досуге.

Как часто применяют abort/exit?

В простых скриптах на руби, пока ваши программы простые — это ок.

Как только вы начнете писать програмы, которые состоят больше, чем из одного файла. И уж тем более, когда начнете разработку на ruby on rails — про abort и про exit придется забыть. Там они не используются, т.к. сервер в ответ на любой запрос должен что-то ответить. То есть любая ошибка (500 или 404) — это штатная работа веб-сервера.