class OddNumberError < Exception
def initialize(num : Int)
super("The number #{num} isn't even")
end
end
def half(num : Int32)
if num.odd?
raise OddNumberError.new(num)
end
num // 2
end
В этом примере мы создали класс с именем OddNumberError
, который наследуется от Exception
. Таким образом, его объекты могут быть вызваны и сохранены. Затем мы переписываем метод half
, чтобы использовать этот более специфичный класс ошибок. Эти объекты могут иметь переменные экземпляра и методы, как обычно.
Теперь, когда мы определили класс ошибок, мы можем фиксировать ошибки только из одного конкретного класса, а не из всех возможных исключений. Рекомендуется обрабатывать только известный набор ошибок, с которыми вы можете справиться. Это можно сделать, указав ограничение типа для ключевого слова rescue
:
def half?(num)
half(num)
rescue error : OddNumberError
nil
end
Вы можете повторить несколько блоков rescue
, чтобы зафиксировать и обработать несколько различных типов исключений. Единственная ситуация, в которой вы не можете быть разборчивы, – это встроенное восстановление, поскольку оно всегда будет обрабатывать и заменять все исключения.
Резюме
В этой главе вы узнали, как создавать классы и структуры, разобравшись в их различиях. Стало ясно, что каждое отдельное значение является объектом - даже сами классы являются объектами: объекты содержат данные, и ими можно манипулировать с помощью методов. Вы узнали, как наследовать и расширять классы, а также как создавать повторно используемые модули для организации вашего кода. Наконец, вы узнали об исключениях и о том, как использовать классы для создания ошибок пользовательского типа. Поскольку язык в значительной степени объектно-ориентирован, вы будете взаимодействовать с объектами практически в каждой строке кода. Знание того, как определять свои собственные классы, является важным навыком для написания программ на Crystal.
В следующей главе мы перейдем к решению более практических задач с использованием языка Crystal, написав несколько инструментов для интерфейса командной строки (CLI).
Часть 2: Обучение на практике – CLI
В этой части будет представлен первый проект Learn by Doing, в котором будет рассказано обо всем, что необходимо для создания CLI-приложения. Это включает в себя различные функции Crystal, такие как операции ввода-вывода, волокна и привязки C. В этой части также будут рассмотрены основы создания нового проекта Crystal.
Эта часть содержит следующие главы:
4. Изучение Crystal с помощью написания интерфейса командной строки
Теперь, когда вы знакомы с основами Crystal, мы готовы применить эти навыки на практике. В этой части мы расскажем вам о создании интерфейса командной строки (CLI), в котором будут использованы концепции из
Эта глава станет введением в суть данной части книги, в которой основное внимание будет уделено настройке проекта и первому этапу реализации интерфейса командной строки. Идея заключается в том, что в этой главе описывается первоначальная реализация, а затем в последующих главах она расширяется и улучшается.
Цель CLI – создать программу, позволяющую использовать данные YAML с jq, популярным CLI-приложением, которое позволяет разделять, фильтровать, отображать и преобразовывать структурированные данные JSON с помощью фильтра для описания этого процесса. Эта глава послужит отправной точкой нашего проекта, в которой будут рассмотрены следующие темы:
• Введение в проект
• Построение структуры проекта
• Написание базовой реализации
К концу этой главы вы сможете создавать свои собственные проекты Crystal, в том числе понимать, для чего используется каждый файл и папка в проекте. Вы также познакомитесь с тем, как работать с проектами, состоящими из нескольких файлов и папок. Оба эти элемента являются важными составляющими любого приложения Crystal.
Технические требования
Для выполнения кода, описанного в этой главе, вам понадобится следующее программное обеспечение:
• Работающая установка Crystal
• Рабочая установка jq