Программирование на языке Ruby
Шрифт:
Наверное, это самая трудная тема для программиста, приступающего к изучению Ruby. В данном разделе мы вкратце рассмотрим некоторые следствия, вытекающие из динамической природы языка.
1.4.1. Кодирование во время выполнения
Мы уже упоминали директивы
Код можно строить и интерпретировать по частям. В качестве несколько искусственного примера рассмотрим приведенный ниже метод
Вот та же идея, доведенная чуть ли не до абсурда: программа запрашивает у пользователя имя метода и одну строку кода. Затем этот метод определяется и вызывается:
Зачастую необходимо написать программу, которая могла бы работать на разных платформах или при разных условиях, но при этом сохранить общий набор исходных текстов. Для этого в языке С применяются директивы
Конечно, за такое кодирование приходится расплачиваться некоторым снижением производительности, поскольку иногда условие вычисляется много раз. Но рассмотрим следующий пример, который делает практически то же самое, однако весь платформенно-зависимый код помещен в один метод, имя которого от платформы не зависит:
Таким способом мы достигаем желаемого результата, но условие вычисляется только один раз. Когда программа вызовет метод
1.4.2. Отражение
В языках Smalltalk, LISP и Java реализована (с разной степенью полноты) идея рефлексивного программирования — активная среда может опрашивать структуру объектов и расширять либо модифицировать их во время выполнения.
В языке Ruby имеется развитая поддержка отражения, но все же он не заходит так далеко, как Smalltalk, где даже управляющие конструкции являются объектами. В Ruby управляющие конструкции и блоки не представляют собой объекты. (Объект
Для определения того, используется ли идентификатор с данным именем, служит ключевое слово
Аналогично метод
В Ruby запрос информации о типе во время выполнения поддерживается очень полно. Тип или класс объекта можно определить, воспользовавшись методом
Можно получить полный список всех методов, которые можно вызвать для данного объекта. Для этого предназначен метод
Прапорщик. Назад в СССР. Книга 7
7. Второй шанс
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Вечный. Книга VII
7. Вечный
Фантастика:
боевая фантастика
рпг
попаданцы
рейтинг книги
Тринадцатый IV
4. Видящий смерть
Фантастика:
боевая фантастика
попаданцы
рейтинг книги
Мечник Вернувшийся 1000 лет спустя. Том 2
2. Вернувшийся мечник
Фантастика:
аниме
фэнтези
попаданцы
рейтинг книги
Хозяин Теней 2
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Антимаг его величества. Том VI
6. Модификант
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Эволюционер из трущоб. Том 9
9. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
рейтинг книги
Индульгенция 2. Без права на жизнь
2. Темный сказ
Фантастика:
аниме
фэнтези
попаданцы
гаремник
рейтинг книги
Убивать, чтобы жить
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
рейтинг книги
Неудержимый. Книга XXXVII
37. Неудержимый
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
рейтинг книги
Тайны затерянных звезд. Том 1
1. Тайны затерянных звезд
Фантастика:
боевая фантастика
космическая фантастика
фэнтези
рейтинг книги
Лекарь Империи 3
3. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
рейтинг книги
Тринадцатый XIII
13. Видящий смерть
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
рейтинг книги
Возлюби болезнь свою
Научно-образовательная:
психология
рейтинг книги