Одна из самых важных вещей, которую может сделать начинающий программист, но часто не предпринимаемая, — это научиться читать сообщения об ошибках.

Ruby, как язык, очень добр к нам. В отличие от других языков (*кхм* javascript), когда в ruby ​​что-то пойдет не так, ruby ​​попытается и в меру своих возможностей сообщит вам, что идет не так. И Ruby делает это с помощью класса Exceptions.

Исключения — это класс ошибок, специально предназначенный для обмена данными между методами «вызывать» и «спасать» ядра. Например, если у вас есть код, который очищает веб-сайт, который внезапно выходит из строя, вы можете использовать методы подъема-спасения, чтобы сообщить своей программе, как продолжать работать, когда она не может связаться с веб-сайтом. Но на данный момент все, что нам нужно знать, это то, что эти сообщения об ошибках имеют определенную цель, а не просто существуют для того, чтобы мы могли их прочитать.

Сообщение об ошибке состоит из трех основных частей: расположение, описание и тип сообщения об ошибке. Расположение самого сообщения об ошибке также можно разбить на три части:

Файл:

Строка ошибки:

И масштаб ошибки:

Область ошибки работает аналогично области видимости в целом. Если ошибка существует в верхней части файла, область будет отображаться как «главная». Если он существует в методе, он будет отображать имя метода: «имя_метода». Все это, сложенное вместе, должно упростить определение точного положения, в котором находится ошибка.

После того, как местоположение указано, ruby ​​сделает все возможное, чтобы точно объяснить, что пошло не так с кодом, который ему дали. В этом конкретном примере ruby ​​вернул фразу «неопределенная локальная переменная или метод «hello_world»», что в основном говорит нам, что этот блок текста, который ему был передан, «hello_world» не существует в его словаре как переменная, эквивалентная чему-либо или метод, который просит его выполнить задачу.

Описание ошибки обычно очень тесно связано с конкретным типом ошибки, которую вернет ruby.

В классе исключений ruby ​​существуют десятки типов ошибок, многие из которых относятся к методам, которые на данный момент более продвинуты, чем те, с которыми мы имеем дело. Итак, чтобы этот пост был коротким и приятным, мы рассмотрим пару типов ошибок, с которыми обычно сталкиваются.

Пример, который мы использовали для разделения определенных частей сообщения об ошибке, называется NameError, который возникает, когда заданное конкретное «имя» или переменная не определены. Внутри этого класса ошибок есть подкласс NameErrors, называемый NoMethodError.

NoMethodError возникает, когда вызываемый метод не существует в вашем коде. Как и в приведенном выше примере, код в lib/owner.rb вызывает несуществующий метод класса Owner.all.

При работе с объектами в ruby ​​вы столкнетесь с другой распространенной ошибкой — ArgumentError. ArgumentErrors появляются, когда вызываемому методу передается неправильное количество аргументов. В этом примере мы попытались инициализировать новый объект из класса с именем Owner, не передавая ему аргумент, когда он запрашивал его передачу.

Сейчас самое время заметить, что иногда сообщения об ошибках содержат дополнительные строки текста под ними. Эти строки текста обозначают уровень стека. Вы заметите, что область этой ошибки находится в методе под названием «инициализация», эти строки под ошибкой следуют пути, по которому программа добралась до места ошибки, вроде следа хлебных крошек.

Говоря об уровнях стека, другой распространенный тип ошибки называется SystemStackError. SystemStackErrors возникает в случае переполнения стека (Эй! Нравится сайт!). Когда метод вызывает сам себя в бесконечном цикле, уровень стека становится слишком глубоким.

И, наконец, самая распространенная ошибка, с которой вы столкнетесь в ruby, — это SyntaxError, которая существует потому, что никто не может ошибаться. Синтаксическая ошибка будет появляться, когда ruby ​​​​обнаружит опечатку.

Люди, разрабатывавшие язык ruby, прекрасно понимали, что люди делают ошибки и делают это очень часто. Они встроили туда языковые методы, которые максимально помогают разработчику отлаживать собственное программное обеспечение. Я знаю, когда я начал учиться программировать сам, меня очень пугали куски текста, которые появлялись на моем терминале. Но после недолгого чтения ошибок я к этому привык. Теперь я полностью понимаю, что получение ошибки в ruby, вероятно, является одной из самых полезных вещей, которые могут случиться, помимо того, что ваш код работает идеально с первого раза. Настоящий кошмар, когда вы вообще не получаете ошибку!