Программирование на языке Ruby.
- Предисловие. ⇢
- Предисловие ко второму изданию.
- Предисловие к первому изданию.
- Благодарности. ⇢
- Благодарности за второе издание.
- Благодарности за первое издание.
- Об авторе. ⇢
- Введение. ⇢
- О втором издании. ⇢
- Как организована эта книга. ⇢
- Об исходных текстах, приведенных в книге. ⇢
- «Путь Ruby». ⇢
- Глава 1. Обзор Ruby. ⇢
- 1.1. Введение в объектно-ориентированное программирование. ⇢
- 1.1.1. Что такое объект. ⇢
- 1.1.2. Наследование. ⇢
- 1.1.3. Полиморфизм. ⇢
- 1.1.4. Еще немного терминов. ⇢
- 1.2. Базовый синтаксис и семантика Ruby. ⇢
- 1.2.1. Ключевые слова и идентификаторы. ⇢
- 1.2.2. Комментарии и встроенная документация. ⇢
- 1.2.3. Константы, переменные и типы. ⇢
- 1.2.4. Операторы и приоритеты. ⇢
- 1.2.5. Пример программы. ⇢
- 1.2.6. Циклы и ветвление. ⇢
- 1.2.7. Исключения. ⇢
- 1.3. ООП в Ruby. ⇢
- 1.3.1. Объекты. ⇢
- 1.3.2. Встроенные классы. ⇢
- 1.3.3. Модули и классы-примеси. ⇢
- 1.3.4. Создание классов. ⇢
- 1.3.5. Методы и атрибуты. ⇢
- 1.4. Динамические аспекты Ruby. ⇢
- 1.4.1. Кодирование во время выполнения. ⇢
- 1.4.2. Отражение. ⇢
- 1.4.3. Отсутствующие методы. ⇢
- 1.4.4 Сборка мусора. ⇢
- 1.5. Потренируйте свою интуицию: что следует запомнить. ⇢
- 1.5.1. Синтаксис. ⇢
- 1.5.2. Перспективы программирования. ⇢
- 1.5.3. Предложение case в Ruby. ⇢
- 1.5.4. Рубизмы и идиомы. ⇢
- 1.5.5. Ориентация на выражения и прочие вопросы. ⇢
- 1.6. Жаргон Ruby. ⇢
- 1.7. Заключение. ⇢
- Глава 2. Строки. ⇢
- 2.1. Представление обычных строк. ⇢
- 2.2. Альтернативная нотация для представления строк. ⇢
- 2.3. Встроенные документы. ⇢
- 2.4. Получение длины строки. ⇢
- 2.5. Построчная обработка. ⇢
- 2.6. Побайтовая обработка. ⇢
- 2.7. Специализированное сравнение строк. ⇢
- Листинг 2.1. Специализированное сравнение строк.
- 2.8. Разбиение строки на лексемы. ⇢
- 2.9. Форматирование строк. ⇢
- 2.10. Строки в качестве объектов ввода/вывода. ⇢
- 2.11. Управление регистром. ⇢
- 2.12. Вычленение и замена подстрок. ⇢
- 2.13. Подстановка в строках. ⇢
- 2.14. Поиск в строке. ⇢
- 2.15. Преобразование символов в коды ASCII и обратно. ⇢
- 2.16. Явные и неявные преобразования. ⇢
- 2.17. Дописывание в конец строки. ⇢
- 2.18. Удаление хвостовых символов новой строки и прочих. ⇢
- 2.19. Удаление лишних пропусков. ⇢
- 2.20. Повтор строк. ⇢
- 2.21. Включение выражений в строку. ⇢
- 2.22. Отложенная интерполяция. ⇢
- 2.23. Разбор данных, разделенных запятыми. ⇢
- 2.24. Преобразование строки в число (десятичное или иное). ⇢
- 2.25. Кодирование и декодирование строк в кодировке rot13. ⇢
- 2.26. Шифрование строк. ⇢
- 2.27. Сжатие строк. ⇢
- 2.28. Подсчет числа символов в строке. ⇢
- 2.29. Обращение строки. ⇢
- 2.30. Удаление дубликатов. ⇢
- 2.31. Удаление заданных символов. ⇢
- 2.32. Печать специальных символов. ⇢
- 2.33. Генерирование последовательности строк. ⇢
- 2.34. Вычисление 32-разрядного CRC. ⇢
- 2.35. Вычисление МD5-свертки строки. ⇢
- 2.36. Вычисление расстояния Левенштейна между двумя строками. ⇢
- Листинг 2.2. Расстояние Левенштейна.
- 2.37. base64-кодирование и декодирование. ⇢
- 2.38. Кодирование и декодирование строк (uuencode/uudecode). ⇢
- 2.39. Замена символов табуляции пробелами и сворачивание пробелов в табуляторы. ⇢
- 2.40. Цитирование текста. ⇢
- 2.41. Заключение. ⇢
- Глава 3. Регулярные выражения. ⇢
- 3.1. Синтаксис регулярных выражений. ⇢
- 3.2. Компиляция регулярных выражений. ⇢
- 3.3. Экранирование специальных символов. ⇢
- 3.4. Якоря. ⇢
- 3.5. Кванторы. ⇢
- 3.6. Позитивное и негативное заглядывание вперед. ⇢
- 3.7. Обратные ссылки. ⇢
- 3.8. Классы символов. ⇢
- 3.9. Обобщенные регулярные выражения. ⇢
- 3.10. Сопоставление точки символу конца строки. ⇢
- 3.11. Внутренние модификаторы. ⇢
- 3.12. Внутренние подвыражения. ⇢
- 3.13. Ruby и Oniguruma. ⇢
- 3.13.1. Проверка наличия Oniguruma. ⇢
- 3.13.2. Сборка Oniguruma. ⇢
- 3.13.3. Некоторые новые возможности Oniguruma. ⇢
- 3.13.4 Позитивное и негативное оглядывание назад. ⇢
- 3.13.5. Еще о кванторах. ⇢
- 3.13.6. Именованные соответствия. ⇢
- 3.13.7. Рекурсия в регулярных выражениях. ⇢
- 3.14. Примеры регулярных выражений. ⇢
- 3.14.1. Сопоставление с IP-адресом. ⇢
- 3.14.2. Сопоставление с парой «ключ-значение». ⇢
- 3.14.3. Сопоставление с числами, записанными римскими цифрами. ⇢
- 3.14.4 Сопоставление с числовыми константами. ⇢
- 3.14.5 Сопоставление с датой и временем. ⇢
- 3.14.6. Обнаружение повторяющихся слов в тексте. ⇢
- 3.14.7. Поиск слов, целиком набранных прописными буквами. ⇢
- 3.14.8. Сопоставление с номером версии. ⇢
- 3.14.9. Еще несколько образцов. ⇢
- 3.15. Заключение. ⇢
- Глава 4. Интернационализация в Ruby. ⇢
- 4.1. Исторические сведения и терминология. ⇢
- 4.2. Кодировки в пост-ASCII мире. ⇢
- 4.2.1. Библиотека jcode и переменная $KCODE. ⇢
- 4.2.2. Возвращаясь к строкам и регулярным выражениям. ⇢
- 4.2.3. Распознавание кодировки. ⇢
- 4.2.4. Нормализация Unicode-строк. ⇢
- 4.2.5. Упорядочение строк. ⇢
- Листинг 4.1. Упорядочение строк в испанском языке.
- 4.2.6. Преобразование из одной кодировки в другую. ⇢
- Листинг 4.2. Перекодирование Web-страницы в кодировку UTF-8.
- 4.3. Справочники сообщений. ⇢
- 4.3.1 Исторические сведения и терминология. ⇢
- 4.3.2. Приступаем к работе со справочниками сообщений. ⇢
- 4.3.3. Локализация простого приложения. ⇢
- Листинг 4.3. Файл myapp.ро после редактирования.
- 4.3.4. Прочие замечания. ⇢
- 4.4. Заключение. ⇢
- Глава 5. Численные методы. ⇢
- 5.1. Представление чисел в языке Ruby. ⇢
- 5.2. Основные операции над числами. ⇢
- 5.3. Округление чисел с плавающей точкой. ⇢
- 5.4. Сравнение чисел с плавающей точкой. ⇢
- 5.5. Форматирование чисел для вывода. ⇢
- 5.6. Вставка разделителей при форматировании чисел. ⇢
- 5.7. Работа с очень большими числами. ⇢
- 5.8. Использование класса BigDecimal. ⇢
- 5.9. Работа с рациональными числами. ⇢
- 5.10. Перемножение матриц. ⇢
- 5.11. Комплексные числа. ⇢
- 5.12. Библиотека mathn. ⇢
- 5.13. Разложение на простые множители, вычисление НОД и НОК. ⇢
- 5.14. Простые числа. ⇢
- 5.15. Явные и неявные преобразования чисел. ⇢
- 5.16. Приведение числовых значений. ⇢
- 5.17. Поразрядные операции над числами. ⇢
- 5.18. Преобразование системы счисления. ⇢
- 5.19. Извлечение кубических корней, корней четвертой степени и т.д. ⇢
- 5.20. Определение порядка байтов. ⇢
- 5.21. Численное вычисление определенного интеграла. ⇢
- 5.22. Тригонометрия в градусах, радианах и градах. ⇢
- 5.23. Неэлементарная тригонометрия. ⇢
- 5.24. Вычисление логарифмов по произвольному основанию. ⇢
- 5.25. Вычисление среднего, медианы и моды набора данных. ⇢
- 5.26. Дисперсия и стандартное отклонение. ⇢
- 5.27. Вычисление коэффициента корреляции. ⇢
- 5.28. Генерирование случайных чисел. ⇢
- 5.29. Кэширование функций с помощью метода memoize. ⇢
- 5.30. Заключение. ⇢
- Глава 6. Символы и диапазоны. ⇢
- 6.1. Символы. ⇢
- 6.1.1. Символы как перечисления. ⇢
- 6.1.2. Символы как метазначения. ⇢
- 6.1.3. Символы, переменные и методы. ⇢
- 6.1.4. Преобразование строки в символ и обратно. ⇢
- 6.2. Диапазоны. ⇢
- 6.2.1. Открытые и замкнутые диапазоны. ⇢
- 6.2.2. Нахождение границ диапазона. ⇢
- 6.2.3. Обход диапазона. ⇢
- 6.2.4. Проверка принадлежности диапазону. ⇢
- 6.2.5. Преобразование в массив. ⇢
- 6.2.6. Обратные диапазоны. ⇢
- 6.2.7. Оператор переключения. ⇢
- Листинг 6.1. Класс Transition.
- 6.2.8. Нестандартные диапазоны. ⇢
- Листинг 6.2. Класс для работы с римскими числами.
- 6.3. Заключение. ⇢
- Глава 7. Дата и время. ⇢
- 7.1. Определение текущего момента времени. ⇢
- 7.2. Работа с конкретными датами (после точки отсчета). ⇢
- 7.3. Определение дня недели. ⇢
- 7.4. Определение даты Пасхи. ⇢
- 7.5. Вычисление n-ого дня недели в месяце. ⇢
- Листинг 7.1. Вычисление n-ого дня недели в месяце.
- 7.6. Преобразование из секунд в более крупные единицы. ⇢
- 7.7. Вычисление промежутка времени, прошедшего от точки отсчета. ⇢
- 7.8. Високосные секунды. ⇢
- 7.9. Определение порядкового номера дня в году. ⇢
- 7.10. Контроль даты и времени. ⇢
- 7.11. Определение недели в году. ⇢
- 7.12. Проверка года на високосность. ⇢
- 7.13. Определение часового пояса. ⇢
- 7.14. Манипулирование временем без даты. ⇢
- 7.15 Сравнение моментов времени. ⇢
- 7.16 Прибавление интервала к моменту времени. ⇢
- 7.17. Вычисление разности между двумя моментами времени. ⇢
- 7.18. Работа с конкретными датами (до точки отсчета). ⇢
- 7.19. Взаимные преобразования объектов Date, Time и DateTime. ⇢
- Листинг 7.2. Преобразования между классами, представляющими даты и время.
- 7.20. Извлечение даты и времени из строки. ⇢
- 7.21. Форматирование и печать даты и времени. ⇢
- 7.22. Преобразование часовых поясов. ⇢
- 7.23. Определение числа дней в месяце. ⇢
- 7.24. Разбиение месяца на недели. ⇢
- 7.25. Заключение. ⇢
- Глава 8. Массивы, хэши и другие перечисляемые структуры. ⇢
- 8.1. Массивы. ⇢
- 8.1.1. Создание и инициализация массива. ⇢
- 8.1.2. Доступ к элементам массива и присваивание им значений. ⇢
- 8.1.3. Определение размера массива. ⇢
- 8.1.4. Сравнение массивов. ⇢
- 8.1.5. Сортировка массива. ⇢
- 8.1.6. Выборка из массива по заданному критерию. ⇢
- 8.1.7. Специализированные функции индексирования. ⇢
- 8.1.8. Реализация разреженной матрицы. ⇢
- 8.1.9. Массивы как математические множества. ⇢
- 8.1.10. Рандомизация массива. ⇢
- 8.1.11. Многомерные массивы. ⇢
- 8.1.12. Нахождение элементов, принадлежащих одному массиву и не принадлежащих другому. ⇢
- 8.1.13. Преобразование или отображение массивов. ⇢
- 8.1.14. Удаление из массива элементов равных nil. ⇢
- 8.1.15. Удаление заданных элементов из массива. ⇢
- 8.1.16. Конкатенирование массивов и добавление в конец массива. ⇢
- 8.1.17. Использование массива в качестве стека или очереди. ⇢
- 8.1.18. Обход массива. ⇢
- 8.1.19. Преобразование массива в строку с разделителями. ⇢
- 8.1.20. Обращение массива. ⇢
- 8.1.21. Удаление дубликатов из массива. ⇢
- 8.1.22. Чередование массивов. ⇢
- 8.1.23. Вычисление частоты различных значений в массиве. ⇢
- 8.1.24. Инвертирование массива для получения хэша. ⇢
- 8.1.25. Синхронная сортировка нескольких массивов. ⇢
- 8.1.26. Указание значения по умолчанию для новых элементов массива. ⇢
- 8.2. Хэши. ⇢
- 8.2.1. Создание нового хэша. ⇢
- 8.2.2. Указание значения по умолчанию для хэша. ⇢
- 8.2.3. Доступ к парам ключ-значение и добавление новых пар. ⇢
- 8.2.4. Удаление пар ключ-значение. ⇢
- 8.2.5. Обход хэша. ⇢
- 8.2.6. Инвертирование хэша. ⇢
- 8.2.7. Поиск ключей и значений в хэше. ⇢
- 8.2.8. Копирование хэша в массив. ⇢
- 8.2.9. Выборка пар ключ-значение по заданному критерию. ⇢
- 8.2.10. Сортировка хэша. ⇢
- 8.2.11. Объединение двух хэшей. ⇢
- 8.2.12. Создание хэша из массива. ⇢
- 8.2.13. Вычисление разности и пересечения хэшей. ⇢
- 8.2.14. Хэш как разреженная матрица. ⇢
- 8.2.15. Реализация хэша с повторяющимися ключами. ⇢
- Листинг 8.1. Хэш с повторяющимися ключами.
- 8.3. Перечисляемые структуры в общем. ⇢
- 8.3.1. Метод inject. ⇢
- 8.3.2. Кванторы. ⇢
- 8.3.3. Метод partition. ⇢
- 8.3.4. Обход с группировкой. ⇢
- 8.3.5. Преобразование в массив или множество. ⇢
- 8.3.6. Энумераторы. ⇢
- 8.3.7. Объекты-генераторы. ⇢
- 8.4. Заключение. ⇢
- Глава 9. Более сложные структуры данных. ⇢
- 9.1. Множества. ⇢
- 9.1.1. Простые операции над множествами. ⇢
- 9.1.2. Более сложные операции над множествами. ⇢
- 9.2. Стеки и очереди. ⇢
- 9.2.1. Более строгая реализация стека. ⇢
- 9.2.2. Обнаружение несбалансированных скобок. ⇢
- 9.2.3. Стек и рекурсия. ⇢
- 9.2.4. Более строгая реализация очереди. ⇢
- 9.3. Деревья. ⇢
- 9.3.1. Реализация двоичного дерева. ⇢
- Листинг 9.1. Вставка и обход дерева в ширину.
- 9.3.2. Сортировка с помощью двоичного дерева. ⇢
- Листинг 9.2. Сортировка с помощью двоичного дерева.
- 9.3.3. Использование двоичного дерева как справочной таблицы. ⇢
- 9.3.4. Преобразование дерева в строку или массив. ⇢
- 9.4. Графы. ⇢
- 9.4.1. Реализация графа в виде матрицы смежности. ⇢
- Листинг 9.3. Матрица смежности.
- 9.4.2. Является ли граф связным? ⇢
- Листинг 9.4. Выяснение того, является ли граф связным.
- 9.4.3. Есть ли в графе эйлеров цикл? ⇢
- 9.4.4. Есть ли в графе эйлеров путь? ⇢
- 9.4.5. Инструменты для работы с графами в Ruby. ⇢
- 9.5. Заключение. ⇢
- Глава 10. Ввод/вывод и хранение данных. ⇢
- 10.1. Файлы и каталоги. ⇢
- 10.1.1. Открытие и закрытие файлов. ⇢
- 10.1.2. Обновление файла. ⇢
- 10.1.3. Дописывание в конец файла. ⇢
- 10.1.4. Прямой доступ к файлу. ⇢
- 10.1.5. Работа с двоичными файлами. ⇢
- 10.1.6. Блокировка файлов. ⇢
- 10.1.7. Простой ввод/вывод. ⇢
- 10.1.8. Буферизованный и небуферизованный ввод/вывод. ⇢
- 10.1.9. Манипулирование правами владения и разрешениями на доступ к файлу. ⇢
- 10.1.10. Получение и установка временных штампов. ⇢
- 10.1.11. Проверка существования и получение размера файла. ⇢
- 10.1.12. Опрос специальных свойств файла. ⇢
- 10.1.13. Каналы. ⇢
- 10.1.14. Специальные операции ввода/вывода. ⇢
- 10.1.15. Неблокирующий ввод/вывод. ⇢
- 10.1.16. Применение метода readpartial. ⇢
- 10.1.17. Манипулирование путевыми именами. ⇢
- 10.1.18. Класс Pathname. ⇢
- 10.1.19. Манипулирование файлами на уровне команд. ⇢
- 10.1.20. Ввод символов с клавиатуры. ⇢
- 10.1.21. Чтение всего файла в память. ⇢
- 10.1.22. Построчное чтение из файла. ⇢
- 10.1.23. Побайтное чтение из файла. ⇢
- 10.1.24. Работа со строкой как с файлом. ⇢
- 10.1.25. Чтение данных, встроенных в текст программы. ⇢
- 10.1.26. Чтение исходного текста программы. ⇢
- 10.1.27. Работа с временными файлами. ⇢
- 10.1.28. Получение и изменение текущего каталога. ⇢
- 10.1.29. Изменение текущего корня. ⇢
- 10.1.30. Обход каталога. ⇢
- 10.1.31. Получение содержимого каталога. ⇢
- 10.1.32. Создание цепочки каталогов. ⇢
- 10.1.33. Рекурсивное удаление каталога. ⇢
- 10.1.34. Поиск файлов и каталогов. ⇢
- 10.2. Доступ к данным более высокого уровня. ⇢
- 10.2.1. Простой маршалинг. ⇢
- 10.2.2. Более сложный маршалинг. ⇢
- 10.2.3. Ограниченное «глубокое копирование» в ходе маршалинга. ⇢
- 10.2.4. Обеспечение устойчивости объектов с помощью библиотеки PStore. ⇢
- 10.2.5. Работа с данными в формате CSV. ⇢
- 10.2.6. Маршалинг в формате YAML. ⇢
- 10.2.7. Преобладающие объекты и библиотека Madeleine. ⇢
- 10.2.8. Библиотека DBM. ⇢
- 10.3. Библиотека KirbyBase. ⇢
- 10.4. Подключение к внешним базам данных. ⇢
- 10.4.1. Интерфейс с SQLite. ⇢
- 10.4.2. Интерфейс с MySQL. ⇢
- 10.4.3. Интерфейс с PostgreSQL. ⇢
- 10.4.4. Интерфейс с LDAP. ⇢
- 10.4.5. Интерфейс с Oracle. ⇢
- 10.4.6. Обертка вокруг DBI. ⇢
- 10.4.7. Объектно-реляционные отображения (ORM). ⇢
- 10.5. Заключение. ⇢
- Глава 11. ООП и динамические механизмы в Ruby. ⇢
- 11.1. Рутинные объектно-ориентированные задачи. ⇢
- 11.1.1. Применение нескольких конструкторов. ⇢
- Листинг 11.1. Несколько конструкторов.
- 11.1.2. Создание атрибутов экземпляра. ⇢
- 11.1.3. Более сложные конструкторы. ⇢
- Листинг 11.2. «Хитрый» конструктор.
- 11.1.4. Создание атрибутов и методов уровня класса. ⇢
- Листинг 11.3. Переменные и методы класса.
- Листинг 11.4. Данные класса и экземпляра.
- 11.1.5. Наследование суперклассу. ⇢
- 11.1.6. Опрос класса объекта. ⇢
- 11.1.7. Проверка объектов на равенство. ⇢
- 11.1.8. Управление доступом к методам. ⇢
- Листинг 11.5. Закрытые методы.
- 11.1.9. Копирование объектов. ⇢
- 11.1.10. Метод initialize_copy. ⇢
- 11.1.11. Метод allocate. ⇢
- 11.1.12. Модули. ⇢
- Листинг 11.6. Включение модуля с переопределенным методом append_features.
- Листинг 11.7. Методы экземпляра модуля становятся методами класса.
- 11.1.13. Трансформация или преобразование объектов. ⇢
- 11.1.14. Классы, содержащие только данные (Struct). ⇢
- 11.1.15. Замораживание объектов. ⇢
- Листинг 11.8. Замораживание объекта.
- 11.2. Более сложные механизмы. ⇢
- 11.2.1. Отправка объекту явного сообщения. ⇢
- Листинг 11.9. Сортировка по любому ключу.
- 11.2.2. Специализация отдельного объекта. ⇢
- Листинг 11.10. Метод уровня класса accessor_string.
- Листинг 11.11. Использование метода extend.
- 11.2.3. Вложенные классы и модули. ⇢
- 11.2.4. Создание параметрических классов. ⇢
- Листинг 11.12. Параметрические классы: неправильное решение.
- Листинг 11.13. Параметрические классы: улучшенное решение.
- Листинг 11.14. Параметрические классы: самое лучшее решение.
- 11.2.5. Использование продолжений для реализации генератора. ⇢
- Листинг 11.15. Генератор чисел Фибоначчи.
- 11.2.6. Хранение кода в виде объекта. ⇢
- 11.2.7. Как работает включение модулей? ⇢
- 11.2.8. Опознание параметров, заданных по умолчанию. ⇢
- 11.2.9. Делегирование или перенаправление. ⇢
- 11.2.10. Автоматическое определение методов чтения и установки на уровне класса. ⇢
- 11.2.11. Поддержка различных стилей программирования. ⇢
- 11.3. Динамические механизмы. ⇢
- 11.3.1. Динамическая интерпретация кода. ⇢
- 11.3.2. Метод const_get. ⇢
- 11.3.3. Динамическое создание экземпляра класса, заданного своим именем. ⇢
- 11.3.4. Получение и установка переменных экземпляра. ⇢
- 11.3.5. Метод define_method. ⇢
- 11.3.6. Метод const_missing. ⇢
- 11.3.7. Удаление определений. ⇢
- Листинг 11.16. Методы remove_method и undef_method.
- 11.3.8. Получение списка определенных сущностей. ⇢
- Листинг 11.17. Отражение и переменные экземпляра.
- 11.3.9. Просмотр стека вызовов. ⇢
- 11.3.10. Мониторинг выполнения программы. ⇢
- 11.3.11. Обход пространства объектов. ⇢
- 11.3.12. Обработка вызовов несуществующих методов. ⇢
- 11.3.13. Отслеживание изменений в определении класса или объекта. ⇢
- Листинг 11.18. Трассирующий модуль.
- 11.3.14. Определение чистильщиков для объектов. ⇢
- 11.4. Заключение. ⇢
- Глава 12. Графические интерфейсы для Ruby. ⇢
- 12.1. Ruby/Tk. ⇢
- 12.1.1. Обзор. ⇢
- 12.1.2. Простое оконное приложение. ⇢
- 12.1.3. Кнопки. ⇢
- Листинг 12.1. Имитация термостата.
- 12.1.4. Текстовые поля. ⇢
- Листинг 12.2. Имитация telnet-клиента.
- 12.1.5. Прочие виджеты. ⇢
- Листинг 12.3. Флажки в Tk.
- Листинг 12.4. Переключатели в Tk.
- 12.1.6. Дополнительные замечания. ⇢
- 12.2. Ruby/GTK2. ⇢
- 12.2.1. Обзор. ⇢
- 12.2.2. Простое оконное приложение. ⇢
- 12.2.3. Кнопки. ⇢
- Листинг 12.5. Кнопки в GTK.
- 12.2.4. Текстовые поля. ⇢
- Листинг 12.6. Текстовый редактор в GTK.
- 12.2.5. Прочие виджеты. ⇢
- Листинг 12.7. Заказ билета на самолет.
- Листинг 12.8. Пример меню в GTK.
- 12.2.6. Дополнительные замечания. ⇢
- 12.3. FXRuby (FOX). ⇢
- 12.3.1. Обзор. ⇢
- 12.3.2. Простое оконное приложение. ⇢
- 12.3.3. Кнопки. ⇢
- Листинг 12.9. Обновление состояния интерфейса в FOX.
- 12.3.4. Текстовые поля. ⇢
- 12.3.5. Прочие виджеты. ⇢
- Листинг 12.10. Переключатели в FOX.
- Листинг 12.11. Переключатели в FOX и получатели данных.
- Листинг 12.12. Виджет FXList.
- Листинг 12.13. Модальные и немодальные диалоги.
- 12.3.6. Дополнительные замечания. ⇢
- 12.4. QtRuby. ⇢
- 12.4.1. Обзор. ⇢
- 12.4.2. Простое оконное приложение. ⇢
- 12.4.3. Кнопки. ⇢
- Листинг 12.14. Кнопки в QtRuby.
- 12.4.4. Текстовые поля. ⇢
- Листинг 12.15. Простой редактор в Qt.
- 12.4.5. Прочие виджеты. ⇢
- Листинг 12.16. Прочие виджеты в Qt.
- Листинг 12.17. Нестандартный виджет TimerClock.
- 12.4.6. Дополнительные замечания. ⇢
- 12.5. Другие библиотеки для создания графических интерфейсов. ⇢
- 12.5.1. Ruby и X. ⇢
- 12.5.2. Ruby и wxWidgets. ⇢
- 12.5.3. Apollo (Ruby и Delphi). ⇢
- 12.5.4. Ruby и Windows API. ⇢
- 12.6. Заключение. ⇢
- Глава 13. Потоки в Ruby. ⇢
- 13.1. Создание потоков и манипулирование ими. ⇢
- 13.1.1. Создание потоков. ⇢
- 13.1.2. Доступ к локальным переменным потока. ⇢
- 13.1.3. Опрос и изменение состояния потока. ⇢
- 13.1.4. Назначение рандеву (и получение возвращенного значения). ⇢
- 13.1.5. Обработка исключений. ⇢
- 13.1.6. Группы потоков. ⇢
- 13.2. Синхронизация потоков. ⇢
- 13.2.1. Синхронизация с помощью критических секций. ⇢
- 13.2.2. Синхронизация доступа к ресурсам (mutex.rb). ⇢
- Листинг 13.1. Программа индексирования с ошибками (гонка).
- Листинг 13.2. Программа индексирования с мьютексом.
- 13.2.3. Предопределенные классы синхронизированных очередей. ⇢
- Листинг 13.3. Задача о производителе и потребителе.
- 13.2.4. Условные переменные. ⇢
- Листинг 13.4. Три скрипача.
- 13.2.5. Другие способы синхронизации. ⇢
- Листинг 13.5. Реализация класса Queue с помощью монитора.
- 13.2.6. Тайм-аут при выполнении операций. ⇢
- Листинг 13.6. Пример тайм-аута.
- 13.2.7. Ожидание события. ⇢
- 13.2.8. Продолжение обработки во время ввода/вывода. ⇢
- 13.2.9. Реализация параллельных итераторов. ⇢
- Листинг 13.7. Параллельные итераторы.
- 13.2.10. Параллельное рекурсивное удаление. ⇢
- 13.3. Заключение. ⇢
- Глава 14. Сценарии и системное администрирование. ⇢
- 14.1. Запуск внешних программ. ⇢
- 14.1.1. Методы system и exec. ⇢
- 14.1.2. Перехват вывода программы. ⇢
- 14.1.3. Манипулирование процессами. ⇢
- 14.1.4. Стандартный ввод и вывод. ⇢
- 14.2. Флаги и аргументы в командной строке. ⇢
- 14.2.1. Разбор флагов в командной строке. ⇢
- Листинг 14.1. Получение флагов из командной строки.
- 14.2.2. Константа ARGF. ⇢
- 14.2.3. Константа ARGV. ⇢
- 14.3. Библиотека Shell. ⇢
- 14.3.1. Использование библиотеки Shell для перенаправления ввода/вывода. ⇢
- 14.3.2. Дополнительные замечания по поводу библиотеки shell.rb. ⇢
- 14.4. Переменные окружения. ⇢
- 14.4.1. Чтение и установка переменных окружения. ⇢
- 14.4.2. Хранение переменных окружения в виде массива или хэша. ⇢
- 14.4.3. Импорт переменных окружения как глобальных переменных. ⇢
- 14.5. Сценарии на платформе Microsoft Windows. ⇢
- 14.5.1. Расширение Win32API. ⇢
- 14.5.2. Расширение Win32OLE. ⇢
- Листинг 14.2. Открытие диалога для ввода текста в браузере.
- Листинг 14.3. Для вывода в окно браузера требуется win32ole.
- 14.5.3. Использование ActiveScriptRuby. ⇢
- Листинг 14.4. Код на Ruby, встроенный в HTML-страницу.
- 14.6. Моментальный инсталлятор для Windows. ⇢
- 14.7. Библиотеки, о которых полезно знать. ⇢
- 14.8. Работа с файлами, каталогами и деревьями. ⇢
- 14.8.1. Несколько слов о текстовых фильтрах. ⇢
- 14.8.2. Копирование дерева каталогов (с символическими ссылками). ⇢
- Листинг 14.5. Копирование дерева каталогов.
- 14.8.3. Удаление файлов по времени модификации и другим критериям. ⇢
- 14.8.4. Вычисление свободного места на диске. ⇢
- 14.9. Различные сценарии. ⇢
- 14.9.1. Ruby в виде одного файла. ⇢
- 14.9.2. Подача входных данных Ruby по конвейеру. ⇢
- Листинг 14.6. bash-сценарий, вызывающий Ruby.
- 14.9.3. Получение и установка кодов завершения. ⇢
- 14.9.4. Работает ли Ruby в интерактивном режиме? ⇢
- 14.9.5. Определение текущей платформы или операционной системы. ⇢
- 14.9.6. Модуль Etc. ⇢
- 14.10. Заключение. ⇢
- Глава 15. Ruby и форматы данных. ⇢
- 15.1. Разбор XML и REXML. ⇢
- Листинг 15.1. Файл books.xml.
- 15.1.1. Древовидное представление. ⇢
- Листинг 15.2. Разбор документа с применением DOM.
- 15.1.2. Потоковый разбор. ⇢
- Листинг 15.3. SAX-разбор.
- Листинг 15.4. Результат работы программы потокового разбора.
- 15.1.3. XPath и другие интерфейсы. ⇢
- 15.2. RSS и Atom. ⇢
- 15.2.1. Стандартная библиотека rss. ⇢
- Листинг 15.5. Создание RSS-канала.
- 15.2.2. Библиотека feedtools. ⇢
- 15.3. Обработка изображений при помощи RMagick. ⇢
- 15.3.1. Типичные графические задачи. ⇢
- Листинг 15.6. Получение информации об изображении.
- Листинг 15.7. Четыре способа масштабирования изображения.
- 15.3.2. Специальные эффекты и трансформации. ⇢
- Листинг 15.8. Двенадцать специальных эффектов и трансформаций.
- 15.3.3. API рисования. ⇢
- Листинг 15.9. Простая программа рисования.
- 15.4. Создание документов в формате PDF с помощью библиотеки PDF::Writer. ⇢
- 15.4.1. Основные концепции и приемы. ⇢
- Листинг 15.10. Метод quadrant.
- 15.4.2. Пример документа. ⇢
- Листинг 15.11. Создание демонстрационного документа.
- 15.5. Заключение. ⇢
- Глава 16. Тестирование и отладка. ⇢
- 16.1. Библиотека Test::Unit. ⇢
- Листинг 16.1. Подготовка и разрушение среды исполнения.
- 16.2. Комплект инструментов ZenTest. ⇢
- Листинг 16.2. Класс, подлежащий тестированию.
- Листинг 16.3. Результат работы ZenTest.
- 16.3. Работа с отладчиком Ruby. ⇢
- Листинг 16.4. Простая программа для демонстрации работы отладчика.
- Листинг 16.5. Сеанс отладки простой программы.
- 16.4. Использование irb в качестве отладчика. ⇢
- 16.5. Измерение покрытия кода. ⇢
- 16.6. Измерение производительности. ⇢
- Листинг 16.6. Поиск анаграмм в словаре.
- 16.7. Объекты печати. ⇢
- 16.8. Заключение. ⇢
- Глава 17. Создание пакетов и распространение программ. ⇢
- 17.1. Программа RDoc. ⇢
- Листинг 17.1. Простой исходный файл.
- 17.1.1. Простая разметка. ⇢
- Листинг 17.2. Пример разметки для RDoc.
- 17.1.2. Более сложное форматирование. ⇢
- 17.2. Установка и подготовка пакета. ⇢
- 17.2.1. Библиотека setup.rb. ⇢
- 17.2.2. Система RubyGems. ⇢
- 17.3. RubyForge и RAA. ⇢
- 17.4. Заключение. ⇢
- Глава 18. Сетевое программирование. ⇢
- 18.1. Сетевые серверы. ⇢
- 18.1.1. Простой сервер: время дня. ⇢
- 18.1.2. Реализация многопоточного сервера. ⇢
- 18.1.3. Пример: сервер для игры в шахматы по сети. ⇢
- Листинг 18.1. Шахматный сервер.
- Листинг 18.2. Шахматный клиент.
- Листинг 18.3. Протокол сеанса шахматной игры.
- 18.2. Сетевые клиенты. ⇢
- 18.2.1. Получение истинно случайных чисел из Web. ⇢
- Листинг 18.4. Случайное бросание костей.
- Листинг 18.5. Генератор случайных чисел с буферизацией.
- 18.2.2. Запрос к официальному серверу времени. ⇢
- 18.2.3. Взаимодействие с РОР-сервером. ⇢
- 18.2.4. Отправка почты по протоколу SMTP. ⇢
- 18.2.5. Взаимодействие с IMAP-сервером. ⇢
- 18.2.6. Кодирование и декодирование вложений. ⇢
- 18.2.7. Пример: шлюз между почтой и конференциями. ⇢
- Листинг 18.6. Перенаправление почты в конференцию.
- Листинг 18.7. Перенаправление конференции в почту.
- 18.2.8. Получение Web-страницы с известным URL. ⇢
- 18.2.9. Библиотека Open-URI. ⇢
- 18.3. Заключение. ⇢
- Глава 19. Ruby и Web-приложения. ⇢
- 19.1. Программирование CGI на Ruby. ⇢
- 19.1.1. Введение в библиотеку cgi.rb. ⇢
- 19.1.2. Вывод и обработка форм. ⇢
- 19.1.3. Куки. ⇢
- 19.1.4. Сеансы пользователей. ⇢
- 19.2. FastCGI. ⇢
- Листинг 19.1. Пример FastCGI.
- 19.3. Ruby on Rails. ⇢
- 19.3.1. Принципы и техника. ⇢
- 19.3.2. Тестирование и отладка приложений Rails. ⇢
- 19.3.3. Базовые расширения. ⇢
- 19.3.4. Дополнительные инструменты и библиотеки. ⇢
- 19.4. Разработка Web-приложений с помощью Nitro. ⇢
- 19.4.1. Создание простого приложения Nitro. ⇢
- 19.4.2. Nitro и паттерн MVC. ⇢
- 19.4.3. Nitro и Og. ⇢
- 19.4.4. Решение типичных для Web-приложений задач в Nitro. ⇢
- 19.4.5. Прочие детали. ⇢
- 19.5. Введение в Wee. ⇢
- 19.5.1. Простой пример. ⇢
- 19.5.2. Ассоциирование состояния с URL. ⇢
- 19.6. Разработка Web-приложений с помощью IOWA. ⇢
- 19.6.1. Основные идеи IOWA. ⇢
- 19.6.2. Шаблоны в IOWA. ⇢
- 19.6.3. Передача управления компоненту. ⇢
- 19.7. Ruby и Web-сервер. ⇢
- 19.7.1. Модуль mod_ruby. ⇢
- 19.7.2. Использование erb. ⇢
- 19.7.3. Сервер WEBrick. ⇢
- 19.7.4. Сервер Mongrel. ⇢
- 19.8. Заключение. ⇢
- Глава 20. Распределенный Ruby. ⇢
- 20.1. Обзор: библиотека drb. ⇢
- 20.2. Пример: эмуляция биржевой ленты. ⇢
- Листинг 20.1. Модуль DrbObservable.
- Листинг 20.2. Канал биржевых котировок (drb-сервер).
- Листинг 20.3. Наблюдатель биржевых котировок (drb-клиент).
- 20.3. Rinda: пространство кортежей в Ruby. ⇢
- Листинг 20.4. Уведомление в системе Rinda.
- Листинг 20.5. Задача о производителе и потребителе.
- 20.4. Обнаружение сервисов в распределенном Ruby. ⇢
- 20.5. Заключение. ⇢
- Глава 21. Инструменты разработки для Ruby. ⇢
- 21.1. Система RubyGems. ⇢
- 21.2. Программа Rake. ⇢
- 21.3. Оболочка irb. ⇢
- 21.4. Утилита ri. ⇢
- 21.5. Поддержка со стороны редакторов. ⇢
- 21.6. Интегрированные среды разработки. ⇢
- 21.7. Заключение. ⇢
- Глава 22. Сообщество пользователей Ruby. ⇢
- 22.1. Ресурсы в Web. ⇢
- 22.2. Новостные группы и списки рассылки. ⇢
- 22.3. Блоги и онлайновые журналы. ⇢
- 22.4. Запросы на изменение Ruby. ⇢
- 22.5. Каналы IRC. ⇢
- 22.6. Конференции по Ruby. ⇢
- 22.7. Локальные группы пользователей Ruby. ⇢
- 22.8. Заключение. ⇢
- Примечания. ⇢
Хэл Фултон.