ebook img

Путь Ruby. 3-е издание PDF

660 Pages·2015·51.269 MB·Russian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Путь Ruby. 3-е издание

Содержание Предисловие ......................................................... 22 Благодарности ....................................................... 26 Об авторах ............................................................ 29 Введение .............................................................. 30 Глава 1. Обзор Ruby ................................................ 39 1.1. Введение в объектно-ориентированное программирование ..............................................................40 1.1.1. Что такое объект ............................................................40 1.1.2. Наследование................................................................41 1.1.3. Полиморфизм ...............................................................43 1.1.4. Еще немного терминов ..................................................44 1.2. Базовый синтаксис и семантика Ruby ..................................45 1.2.1. Ключевые слова и идентификаторы ...............................46 1.2.2. Комментарии и встроенная документация .....................47 1.2.3. Константы, переменные и типы .....................................47 1.2.4. Операторы и приоритеты ...............................................49 1.2.5. Пример программы .......................................................50 1.2.6. Циклы и ветвление.........................................................52 1.2.7. Исключения ...................................................................57 1.3. ООП в Ruby ..........................................................................59 1.3.1. Объекты ........................................................................59 1.3.2. Встроенные классы .......................................................60 1.3.3. Модули и классы-примеси .............................................61 1.3.4. Создание классов ..........................................................62 1.3.5. Методы и атрибуты ........................................................66 1.4. Динамические аспекты Ruby ................................................68 1.4.1. Кодирование во время выполнения ...............................68 1.4.2. Отражение .....................................................................70 1.4.3. Отсутствующие методы .................................................71 1.4.4. Сборка мусора...............................................................71 1.5. Потренируйте свою интуицию: что следует запомнить .........72 1.5.1. Синтаксис ......................................................................72 1.5.2. Отличия от других языков ..............................................74 1.5.3. Предложение case в Ruby ..............................................77 1.5.4. Рубизмы и идиомы ........................................................79 1.5.5. Ориентация на выражения и прочие вопросы ................84 1.6. Жаргон Ruby ........................................................................86 1.7. Заключение .........................................................................89 Глава 2. Строки ...................................................... 90 2.1. Представление обычных строк .............................................90 2.2. Альтернативная нотация для представления строк ...............91 2.3. Встроенные документы ........................................................92 2.4. Получение длины строки ......................................................93 2.5. Построчная обработка ..........................................................93 2.6. Побайтовая обработка ..........................................................94 2.7. Специализированное сравнение строк .................................94 2.8. Разбиение строки на лексемы ..............................................96 2.9. Форматирование строк ........................................................97 2.10. Строки в качестве объектов ввода-вывода ..........................98 2.11. Управление регистром .......................................................98 2.12. Вычленение и замена подстрок ..........................................99 2.13. Подстановка в строках ......................................................101 2.14. Поиск в строке ..................................................................102 2.15. Преобразование символов в коды ASCII и обратно ...........103 2.16. Явные и неявные преобразования ....................................103 2.17. Дописывание в конец строки ............................................105 2.18. Удаление хвостовых символов новой строки и прочих ......105 2.19. Убирание лишних пропусков .............................................106 2.20. Повтор строк ....................................................................106 2.21. Включение выражений в строку ........................................107 2.22. Отложенная интерполяция ................................................107 2.23. Разбор данных, разделенных запятыми ............................108 2.24. Преобразование строки в число (десятичное или иное) ....108 2.25. Кодирование и декодирование строк в кодировке rot13 ....110 2.26. Шифрование строк ...........................................................110 2.27. Сжатие строк ....................................................................111 2.28. Подсчет числа символов в строке .....................................112 2.29. Обращение строки ............................................................112 2.30. Удаление дубликатов ........................................................112 2.31. Удаление заданных символов ...........................................113 2.32. Печать специальных символов ..........................................113 Содержание 2.33. Генерирование последовательности строк .......................113 2.34. Вычисление 32-разрядного CRC .......................................114 2.35. Вычисление SHA-256-свертки строки ...............................114 2.36. Вычисление расстояния Левенштейна между двумя строками ..........................................................................115 2.37. base64-кодирование и декодирование строк ....................117 2.38. Замена символов табуляции пробелами и сворачивание пробелов в табуляторы ............................117 2.39. Перенос строк по словам ..................................................118 2.40. Заключение ......................................................................119 Глава 3. Регулярные выражения ...............................120 3.1. Синтаксис регулярных выражений ......................................120 3.2. Компиляция регулярных выражений ...................................122 3.3. Экранирование специальных символов ..............................123 3.4. Якоря ..................................................................................123 3.5. Кванторы ............................................................................124 3.6. Позитивное и негативное заглядывание вперед .................126 3.7. Позитивное и негативное оглядывание назад .....................127 3.8. Обратные ссылки ................................................................128 3.9. Именованные соответствия ................................................130 3.10. Классы символов ..............................................................132 3.11. Обобщенные регулярные выражения ................................133 3.12. Сопоставление точки символу конца строки .....................134 3.13. Внутренние модификаторы ..............................................134 3.14. Внутренние подвыражения ...............................................135 3.14.1. Рекурсия в регулярных выражениях ...........................135 3.15. Примеры регулярных выражений ......................................136 3.15.1. Сопоставление с IP-адресом .....................................136 3.15.2. Сопоставление с парой «ключ-значение» ...................137 3.15.3. Сопоставление с числами, записанными римскими цифрами ...............................................................................138 3.15.4. Сопоставление с числовыми константами .................138 3.15.5. Сопоставление с датой и временем ...........................139 3.15.6. Обнаружение удвоенных слов в тексте ......................140 3.15.7. Поиск слов, записанных одними заглавными буквами ................................................................................140 3.15.8. Сопоставление с номером версии .............................140 3.15.9. Еще несколько образцов............................................140 3.16. Заключение ......................................................................141 Глава 4. Интернационализация в Ruby .......................142 4.1. Исторические сведения и терминология ............................143 4.2. Работа с кодировками ........................................................147 4.2.1. Нормализация .............................................................148 4.2.2. Преобразование из одной кодировки в другую ............151 4.2.3. Транслитерация ...........................................................152 4.2.4. Упорядочение строк ....................................................152 4.3. Перевод .............................................................................155 4.3.1. Значения по умолчанию ...............................................157 4.3.2. Пространства имен ......................................................158 4.3.3. Интерполяция ..............................................................158 4.3.4. Формы множественного числа ....................................159 4.4. Локализованное форматирование ......................................160 4.4.1. Дата и время ...............................................................161 4.4.2. Числа ...........................................................................161 4.4.3. Денежные величины ....................................................162 4.5. Заключение ........................................................................162 Глава 5. Численные методы .....................................163 5.1. Представление чисел в языке Ruby .....................................163 5.2. Основные операции над числами .......................................164 5.3. Округление чисел с плавающей точкой ...............................165 5.4. Сравнение чисел с плавающей точкой ................................167 5.5. Форматирование чисел для вывода ....................................168 5.6. Вставка разделителей при форматировании чисел ............169 5.7. Работа с очень большими числами .....................................169 5.8. Использование класса BigDecimal ......................................169 5.9. Работа с рациональными числами ......................................171 5.10. Перемножение матриц .....................................................172 5.11. Комплексные числа ..........................................................176 5.12. Библиотека mathn .............................................................176 5.13. Разложение на простые множители, вычисление НОД и НОК .........................................................................177 5.14. Простые числа ..................................................................178 5.15. Явные и неявные преобразования чисел ...........................179 5.16. Приведение числовых значений........................................180 5.17. Поразрядные операции над числами ................................181 5.18. Преобразование системы счисления ................................182 5.19. Извлечение кубических корней, корней четвертой степени и т.д. ....................................................................183 Содержание 5.20. Определение порядка байтов ...........................................183 5.21. Численное вычисление определенного интеграла ............184 5.22. Тригонометрия в градусах, радианах и градах ..................185 5.23. Вычисление логарифмов по произвольному основанию ...186 5.24. Вычисление среднего, медианы и моды набора данных ...187 5.25. Дисперсия и стандартное отклонение ..............................188 5.26. Вычисление коэффициента корреляции ...........................189 5.27. Генерирование случайных чисел .......................................190 5.28. Кэширование функций с помощью метода memoize .........191 5.29. Заключение ......................................................................192 Глава 6. Символы и диапазоны ................................193 6.1. Символы .............................................................................193 6.1.1. Символы как перечисления .........................................195 6.1.2. Символы как метазначения..........................................195 6.1.3. Символы, переменные и методы .................................196 6.1.4. Преобразование строки в символ и обратно ................196 6.2. Диапазоны ..........................................................................197 6.2.1. Открытые и замкнутые диапазоны ...............................198 6.2.2. Нахождение границ диапазона ....................................198 6.2.3. Обход диапазона .........................................................198 6.2.4. Проверка принадлежности диапазону .........................199 6.2.5. Преобразование в массив ...........................................200 6.2.6. Обратные диапазоны ...................................................200 6.2.7. Оператор переключения ..............................................200 6.2.8. Нестандартные диапазоны ..........................................203 6.3. Заключение ........................................................................205 Глава 7. Дата и время .............................................207 7.1. Определение текущего момента времени .........................208 7.2. Работа с конкретными датами (после точки отсчета) .........208 7.3. Определение дня недели ...................................................209 7.4. Определение даты Пасхи ...................................................209 7.5. Вычисление n-ого дня недели в месяце .............................210 7.6. Преобразование из секунд в более крупные единицы ........211 7.7. Вычисление промежутка времени, прошедшего от точки отсчета ..............................................................................212 7.8. Високосные секунды .........................................................212 7.9. Определение порядкового номера дня в году ....................213 7.10. Контроль даты и времени .................................................213 7.11. Определение недели в году ..............................................214 7.12. Проверка года на високосность ........................................214 7.13. Определение часового пояса ............................................215 7.14. Манипулирование временем без даты ..............................215 7.15. Сравнение моментов времени ..........................................216 7.16. Прибавление интервала к моменту времени .....................216 7.17. Вычисление разности между двумя моментами времени ............................................................................217 7.18. Работа с конкретными датами (до точки отсчета) ..............217 7.19. Взаимные преобразования объектов Date, Time и DateTime ........................................................................217 7.20. Извлечение даты и времени из строки ..............................218 7.21. Форматирование и печать даты и времени .......................219 7.22. Преобразование часовых поясов ......................................219 7.23. Определение числа дней в месяце ...................................220 7.24. Разбиение месяца на недели ............................................220 7.25. Заключение ......................................................................221 Глава 8. Массивы, хэши и другие перечисляемые структуры .........................................................223 8.1. Массивы .............................................................................223 8.1.1. Создание и инициализация массива............................224 8.1.2. Доступ к элементам массива и присваивание им значений ..........................................................................224 8.1.3. Определение размера массива ...................................226 8.1.4. Сравнение массивов ...................................................226 8.1.5. Сортировка массива ....................................................228 8.1.6. Выборка из массива по заданному критерию ..............230 8.1.7. Специализированные функции индексирования..........231 8.1.8. Реализация разреженной матрицы ..............................233 8.1.9. Массивы как математические множества ....................233 8.1.10. Рандомизация массива .............................................237 8.1.11. Многомерные массивы ..............................................237 8.1.12. Нахождение элементов, принадлежащих одному массиву и не принадлежащих другому ..................................238 8.1.13. Преобразование или отображение массивов .............238 8.1.14. Удаление элементов, равных nil, из массива ..............239 8.1.15. Удаление заданных элементов из массива ................239 8.1.16. Конкатенирование массивов и добавление в конец массива ....................................................................240 8.1.17. Использование массива в качестве стека или очереди ..........................................................................241 Содержание 8.1.18. Обход массива ..........................................................241 8.1.19. Преобразование массива в строку с разделителями ...................................................................242 8.1.20. Обращение массива ..................................................242 8.1.21. Удаление дубликатов из массива ...............................242 8.1.22. Чередование массивов ..............................................243 8.1.23. Вычисление частоты различных значений в массиве ..............................................................................243 8.1.24. Инвертирование массива для получения хэша ...........243 8.1.25. Синхронная сортировка нескольких массивов ...........244 8.1.26. Задание значения по умолчанию для новых элементов массива ...............................................................245 8.2. Хэши ...................................................................................245 8.2.1. Создание нового хэша .................................................246 8.2.2. Задание значения по умолчанию для хэша ..................247 8.2.3. Доступ к парам ключ-значение и добавление новых пар ..............................................................................247 8.2.4. Удаление пар ключ-значение .......................................248 8.2.5. Обход хэша ..................................................................249 8.2.6. Инвертирование хэша .................................................249 8.2.7. Поиск ключей и значений в хэше ..................................250 8.2.8. Копирование хэша в массив ........................................250 8.2.9. Выборка пар ключ-значение по заданному критерию ....250 8.2.10. Сортировка хэша .......................................................251 8.2.11. Объединение двух хэшей ...........................................251 8.2.12. Создание хэша из массива ........................................252 8.2.13. Вычисление разности и пересечения хэшей ..............252 8.2.14. Хэш как разреженная матрица ...................................252 8.2.15. Реализация хэша с повторяющимися ключами ..........253 8.2.16. Другие операции с хэшем ..........................................256 8.3. Перечисляемые структуры в общем....................................256 8.3.1. Метод inject .................................................................257 8.3.2. Кванторы .....................................................................258 8.3.3. Метод partition .............................................................258 8.3.4. Обход с группировкой .................................................259 8.3.5. Преобразование в массив или множество ...................260 8.3.6. Перечислители ............................................................260 8.4. Дополнительные сведения о перечисляемых объектах .......262 8.4.1. Поиск и выборка ..........................................................262 8.4.2. Подсчет и сравнение ...................................................263 8.4.3. Итерирование .............................................................263 8.4.4. Извлечение и преобразование ....................................264 8.4.5. Ленивые перечислители ..............................................265 8.5. Заключение ........................................................................265 Глава 9. Более сложные структуры данных ................266 9.1. Множества .........................................................................266 9.1.1. Простые операции над множествами ..........................267 9.1.2. Более сложные операции над множествами ................268 9.2. Стеки и очереди .................................................................269 9.2.1. Более строгая реализация стека .................................271 9.2.2. Обнаружение несбалансированных скобок ..................271 9.2.3. Стек и рекурсия ...........................................................272 9.2.4. Более строгая реализация очереди .............................274 9.3. Деревья ..............................................................................275 9.3.1. Реализация двоичного дерева .....................................275 9.3.2. Сортировка с помощью двоичного дерева ...................277 9.3.3. Использование двоичного дерева как справочной таблицы ................................................................................279 9.3.4. Преобразование дерева в строку или массив ..............279 9.4. Графы .................................................................................280 9.4.1. Реализация графа в виде матрицы смежности ............281 9.4.2. Является ли граф связным? .........................................283 9.4.3. Есть ли в графе эйлеров цикл? .....................................284 9.4.4. Есть ли в графе эйлеров путь? .....................................285 9.4.5. Инструменты для работы с графами в Ruby .................286 9.5. Заключение ........................................................................286 Глава 10. Ввод-вывод и хранение данных ..................287 10.1. Файлы и каталоги .............................................................288 10.1.1. Открытие и закрытие файлов .....................................288 10.1.2. Обновление файла ....................................................289 10.1.3. Дописывание в конец файла ......................................290 10.1.4. Прямой доступ к файлу ..............................................290 10.1.5. Работа с двоичными файлами ....................................291 10.1.6. Блокировка файлов ...................................................292 10.1.7. Простой ввод-вывод ..................................................293 10.1.8. Буферизованный и небуферизованный ввод-вывод.....294 10.1.9. Манипулирование правами владения и разрешениями на доступ к файлу .......................................295 10.1.10. Получение и установка временных меток .................296 10.1.11. Проверка существования и получение размера файла ...................................................................................297 10.1.12. Опрос специальных свойств файла ..........................298 10.1.13. Каналы .....................................................................300 10.1.14. Специальные операции ввода-вывода .....................301 10.1.15. Неблокирующий ввод-вывод ...................................302 10.1.16. Применение метода readpartial ................................302 10.1.17. Манипулирование путевыми именами .....................303 10.1.18. Класс Pathname .......................................................304 10.1.19. Манипулирование файлами на уровне команд .........305 10.1.20. Ввод символов с клавиатуры ...................................306 10.1.21. Чтение всего файла в память ...................................306 10.1.22. Построчное чтение из файла ....................................307 10.1.23. Побайтное и посимвольное чтение из файла ...........307 10.1.24. Работа со строкой как с файлом...............................308 10.1.25. Копирование потока ................................................308 10.1.26. Работа с кодировками ..............................................308 10.1.27. Чтение данных, встроенных в текст программы .......309 10.1.28. Чтение исходного текста программы .......................309 10.1.29. Работа с временными файлами ...............................309 10.1.30. Получение и изменение текущего каталога ..............310 10.1.31. Изменение текущего корня ......................................310 10.1.32. Обход каталога ........................................................311 10.1.33. Получение содержимого каталога ............................311 10.1.34. Создание цепочки каталогов ....................................311 10.1.35. Рекурсивное удаление каталога ...............................311 10.1.36. Поиск файлов и каталогов ........................................311 10.2. Доступ к данным более высокого уровня ..........................312 10.2.1. Простой маршалинг ...................................................313 10.2.2. «Глубокое копирование» с помощью метода Marshal..................................................................................313 10.2.3. Более сложный маршалинг ........................................314 10.2.4. Маршалинг в формате YAML ......................................315 10.2.5. Сохранение данных с помощью библиотеки JSON .....316 10.2.6. Работа с данными в формате CSV ..............................317 10.2.7. SQLite3 как SQL-хранилище данных ...........................319 10.3. Подключение к внешним базам данных .............................320 10.3.1. Подключение к базе данных MySQL ...........................320 10.3.2. Подключение к базе данных PostreSQL ......................322 10.3.3. Объектно-реляционные отображения (ORM) .............323

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.