Программирование на языке Ruby
Шрифт:
Часто мы хотим каким-то образом восстановиться после ошибки. В этом поможет ключевое слово
Наконец, иногда необходим код, который «подчищает» что-то после выполнения блока
Код, помещенный внутрь части
Исключения можно перехватывать еще двумя способами. Во-первых, существует форма
Кроме того, тело определения метода представляет собой неявный блок
На этом мы завершаем как обсуждение обработки исключений, так и рассмотрение основ синтаксиса и семантики в целом.
У Ruby есть многочисленные аспекты, которых мы не коснулись. Оставшаяся часть главы посвящена более развитым возможностям языка, в том числе рассмотрению ряда практических приемов, которые помогут программисту среднего уровня научиться «думать на Ruby».
1.3. ООП в Ruby
В языке Ruby есть все элементы, которые принято ассоциировать с объектно-ориентированными языками: объекты с инкапсуляцией и сокрытием данных, методы с полиморфизмом и переопределением, классы с иерархией и наследованием. Но Ruby идет дальше, добавляя ограниченные возможности создания метаклассов, синглетные методы, модули и классы-примеси.
Похожие идеи, только под иными именами, встречаются и в других объектно-ориентированных языках, но одно и то же название может скрывать тонкие различия. В этом разделе мы уточним, что в Ruby понимается под каждым из элементов ООП.
1.3.1. Объекты
В Ruby все числа, строки, массивы, регулярные выражения и многие другие сущности фактически являются объектами. Работа программы состоит в вызове методов разных объектов:
В Ruby каждый объект представляет собой экземпляр какого-то класса. Класс содержит реализацию методов:
Помимо инкапсуляции собственных атрибутов и операций объект в Ruby имеет уникальный идентификатор:
Этот идентификатор объекта обычно не представляет интереса для программиста.
1.3.2. Встроенные классы
Свыше 30 классов уже встроено в Ruby. Как и во многих других объектно-ориентированных языках, в нем не допускается множественное наследование, но это еще не означает, что язык стал менее выразительным. Современные языки часто построены согласно модели одиночного наследования. Ruby поддерживает модули и классы-примеси, которые мы обсудим в следующей главе. Также реализованы идентификаторы объектов, что позволяет строить устойчивые, распределенные и перемещаемые объекты.
Для создания объекта существующего класса обычно используется метод
Однако не всегда его обязательно вызывать явно. В частности, при создании объекта String можно и не упоминать этот метод:
Ссылки на объекты хранятся в переменных. Выше уже отмечалось, что сами переменные не имеют типа и не являются объектами — они лишь ссылаются на объекты.
Из этого правила есть исключение: небольшие неизменяемые объекты некоторых встроенных классов, например
При присваивании переменных ссылки на объекты обобществляются.
После выполнения присваивания
Если объект изменяемый, то модификация, примененная к одной переменной, отражается и на другой:
Однако новое присваивание любой из этих переменных не влияет на другую:
Охотник на демонов
2. Живой лёд
Фантастика:
боевая фантастика
рейтинг книги
Товарищ "Чума"
1. Товарищ "Чума"
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Локки 8. Потомок бога
8. Локки
Фантастика:
фэнтези
боевая фантастика
героическая фантастика
попаданцы
рейтинг книги
Последний реанорец. Том XII – Часть I
11. Высшая Речь
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Наследие Маозари 9
9. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
сказочная фантастика
рейтинг книги
Братва
Братва
Детективы:
криминальные детективы
рейтинг книги
Виконт. Книга 4. Колонист
Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Ганнибал у ворот
Великие полководцы
Документальная литература:
биографии и мемуары
рейтинг книги
Газлайтер. Том 31
31. История Телепата
Фантастика:
боевая фантастика
попаданцы
альтернативная история
фэнтези
рейтинг книги
Камень
1. Камень
Фантастика:
боевая фантастика
рейтинг книги
Философия
Научно-образовательная:
философия
учебники
рейтинг книги
Апокалипсис
Антология
Фантастика:
социально-философская фантастика
героическая фантастика
боевая фантастика
киберпанк
рейтинг книги
Жизнь, которой не было
1. Жизнь, которой не было
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
рейтинг книги
Кромвель
611. Жизнь замечательных людей
Проза:
историческая проза
рейтинг книги