Изучаем Ruby
Учебник Ruby.
Джей Макгаврен «Hеаd Fіrst. Изучаем Ruby» Питер, 2016 год, 528 стр. (544 стр. с приложением), O’Reilly; (48,9 мб. pdf)
Многим читателям связанным с IT технологиями и изучающим программирование известны книги серии «Hеаd Fіrst» и их оригинальный способ подачи материала. Теперь в этой серии вы можете познакомиться с книгой «Изучаем Ruby». Язык программирования Ruby входит в десятку самых изучаемых и востребованных языков программирования в мире. Это интерпретируемый, строго типизированный, динамический, объектно-ориентированный язык, используемый для разработки различных приложений, в том числе мобильных и веб-разработки. Он испытал влияние Perl, Smalltalk, Python (сравните языки программирования).
В книге представлен учебный курс рассчитанный на читателя имеющего хотя бы базовые знания программирования, еще лучше если это у вас не первый язык. Все книги серии «Hеаd Fіrst» имеют собственную специфику, т.е. вам будет не только рассказано но и во многих случаях особым образом показано, как работают те или иные языковые конструкции, также в книге есть упражнения выполнение которых обязательно (если поставлена цель практического изучения, а не просто чтения). Если это ваша первая книга из серии «Hеаd Fіrst». то настоятельно рекомендуется полностью прочесть введение к книге. При желании можете ознакомиться с оглавлением, представленным ниже. Книга рекомендуется всем кто изучает язык Ruby. ISBN: 978-5-496-02278-1
Оглавление.
1. Программируйте так, как вам угодно.
Философия Ruby 32
Интерактивное использование Ruby 35
Ваши первые выражения Ruby 36
Математические операторы и сравнения 36
Строки 36
Переменные 37
Вызов метода для объекта 38
Ввод, сохранение и вывод 42
Запуск сценариев 43
Комментарии 44
Аргументы методов 45
Интерполяция строк 46
Анализ объектов методами «inspect» и «р» 48
Служебные последовательности в строках 49
Вызов «chomp» для объекта строки 50
Генерирование случайного числа 52
Преобразование числа в строку 53
Преобразование строк в числа 55
Условные команды 56
«unless» как противоположность «if» 59
Циклы 60
Попробуем запустить игру! 63
Ваш инструментарий Ruby 64
2. Наводим порядок (Методы и классы)
Определение методов 66
Вызов методов 67
Имена методов 68
Параметры 68
Возвращаемые значения 72
Раннее возвращение из метода 73
Беспорядок в методах 74
Слишком много аргументов 75
Слишком много команд «if» 75
Проектирование класса 76
Чем класс отличается от объекта 77
Первый класс 78
Создание новых экземпляров (объектов) 78
Разбиение больших методов на классы 79
Создание экземпляров новых классов животных 80
Диаграмма классов с методами экземпляра 81
Локальные переменные существуют до завершения метода 85
Инкапсуляция 88
Методы доступа 89
Использование методов доступа 91
Методы чтения и записи атрибутов 92
Ошибки и «аварийная остановка» 100
Использование «raise» в методах записи атрибутов 101
Ваш инструментарий Ruby 103
3. С родительской помощью (Наследование)
Копировать, вставлять… Столько проблем! 106
Код Майка для приложения виртуального тест-драйва 107
На помощь приходит наследование! 108
Определение суперкласса (в общем-то ничего особенного!) 110
Определение субкласса (совсем просто) 111
Добавление методов в субклассы 112
Субклассы содержат как новые, так и унаследованные методы 113
Переменные экземпляра принадлежат объекту, а не классу! 114
Переопределение методов 116
Включение наследования в иерархию классов животных 121
Проектирование иерархий классов животных 122
Код класса Animal и его субклассов 123
Переопределение метода в субклассах Animal 124
Как добраться до переопределяемого метода? 125
Ключевое слово «super» 126
Субкласс обретает суперсилу 128
Трудности с выводом Dog 131
Класс Object 132
Почему все классы наследуют от Object 133
Переопределение унаследованного метода 134
Ваш инструментарий Ruby 135
4. Хороший старт — половина дела (Инициализация экземпляров)
Зарплата в Chargemore 138
Класс Employee 139
Создание новых экземпляров Employee 140
Деление с использованием класса Ruby Fixnum 142
Деление с классом Ruby Float 143
Исправление ошибки округления в Employee 144
Форматирование чисел для вывода 145
Форматные последовательности 146
Применение метода «format» для исправления вывода 149
Если атрибуты объекта не заданы 150
«nil» означает «ничто» 151
«/» — это метод 152
Метод «initialize» 153
Безопасность использования Employee и «initialize» 154
Аргументы «initialize» 155
Необязательные параметры и «initialize» 156
«initialize» и проверка данных 160
«self» и вызов других методов для того же экземпляра 161
Когда ключевое слово «self» не обязательно 165
Реализация почасовой оплаты на основе наследования 167
Восстановление методов «initialize» 170
Наследование и метод «initialize» 171
«super» и «initialize» 172
Методы класса 179
Полный исходный код класса 182
Ваш инструментарий Ruby 184
5. Лучше, чем цикл (Массивы и блоки)
Массивы 186
Работа с массивами 187
Перебор элементов массива 191
Устранение дубликатов — НЕПРАВИЛЬНЫЙ способ 195
Блоки 197
Определение метода, получающего блок 198
Ваш первый блок 199
Передача управления между методом и блоком 200
Вызов одного метода с разными блоками 201
Многократный вызов блока 202
Параметры блоков 203
Ключевое слово «yield» 204
Форматы блоков 205
Метод «each» 209
Устранение повторений из кода при помощи «each» и блоков 211
Блоки и область видимости переменных 214
Использование «each» с методом «refund» 216
Использование «each» в последнем методе 217
Полный код методов 218
Ваш инструментарий Ruby 222
6. Как будем обрабатывать? (Возвращаем значения блоков)
Поиск в больших коллекциях слов 224
Открытие файла 226
Безопасное закрытие файла 226
Безопасное закрытие файла в блоке 227
Не забывайте про область видимости! 228
Поиск элементов в блоке 231
Долгий способ поиска с использованием «each» 232
А теперь короткий способ… 233
Блоки тоже возвращают значение 234
Как метод использует возвращаемое значение блока 239
Все вместе 240
Возвращаемые значения блоков: присмотримся повнимательнее 241
Исключение лишних элементов с использованием блока 242
Возвращаемые значения для «reject» 243
Преобразование строки в массив слов 244
Определение индекса элемента массива 245
Создание массива на базе другого массива (сложный способ) 246
Создание массива на базе другого массива с использованием «тар» 247
Дополнительная логика в теле блока «тар» 249
Работа закончена 250
Ваш инструментарий Ruby 253
7. Пометка данных (Хеши)
Подсчет голосов 256
Массив массивов — не идеальное решение 257
Хеши 258
Хеши — тоже объекты 260
Хеши возвращают «nil» по умолчанию 263
Значение nil (и только nil) интерпретируется как ложное 264
Возвращение по умолчанию другого значения вместо «nil» 266
Нормализация ключей хеша 268
Хеши и «each» 270
Путаница с аргументами 272
Передача хешей в параметрах методов 273
Параметр-хеш в классе Candidate 274
Фигурные скобки не нужны! 275
И стрелки не нужны! 275
Сам хеш тоже может быть необязательным 276
Опасные опечатки в аргументах-хешах 278
Ключевые слова в аргументах 279
Использование ключевых слов в аргументах в классе Candidate 280
Обязательные ключевые слова в аргументах 281
Ваш инструментарий Ruby 285
8. Путаница с сообщениями (Ссылки)
Загадочные ошибки 288
Куча 289
Ссылки 290
Путаница со ссылками Наложение имен 291
Исправление ошибки в программе астронома 292
Быстрая идентификация объектов методом «inspect» 294
Проблемы с объектом по умолчанию для хеша 296
Объект по умолчанию для хеша: близкое знакомство 297
Возвращаемся к хешу с планетами и спутниками 300
Чего мы хотим от объектов по умолчанию для хеша 301
Блоки по умолчанию для хешей 302
Блоки по умолчанию для хеша: присваивание 303
Блоки по умолчанию для хеша: возвращаемое значение блока 304
Блоки по умолчанию для хешей: сокращенная запись 305
Хеш астронома: окончательная версия кода 306
Безопасное использование объектов по умолчанию 309
Объекты по умолчанию для хешей: простое правило 310
Ваш инструментарий Ruby 313
9. Аккуратный выбор (Примеси)
Мультимедийное приложение 316
Приложение с наследованием 317
Один из этих классов не похож на другие 318
Вариант 1: Определение Photo как субкласса Clip 318
Вариант 2: Копирование нужных методов в класс Photo 319
Не вариант: Множественное наследование 320
Модули как примеси 321
Примеси: как это работает 323
Создание примеси 327
Использование примеси 328
Об изменениях в методе «comments» 329
Почему не следует добавлять «initialize» в примесь 330
Примеси и переопределение методов 332
Старайтесь не использовать методы «initialize» в модулях 333
Логический оператор «или» при присваивании 335
Оператор условного присваивания 336
Полный код 339
Ваш инструментарий Ruby 340
10. Готовые примеси (Comparable и Enumerable)
Встроенные примеси в Ruby 342
Знакомство с примесью Comparable 343
Выбор стека 344
Реализация метода «больше» в классе Steak 345
Константы 346
Работа только начинается… 347
Примесь Comparable 348
Оператор <=> 349
Реализация оператора <=> в классе Steak 350
Включение Comparable в Steak 351
Как работают методы Comparable 352
Следующая примесь 355
Модуль Enumerable 356
Класс для включения Enumerable 357
Включение Enumerable в класс 358
Внутри модуля Enumerable 359
Ваш инструментарий Ruby 362
11. Читайте документацию (Документация)
Как узнать больше? 364
Базовые классы и модули Ruby 365
Документация 365
Документация в формате HTML 366
Список доступных классов и модулей 367
Поиск информации о методах экземпляра 368
Методы экземпляра обозначены в документации символом # 369
Документация по методам экземпляров 370
Аргументы в сигнатурах вызова 371
Блоки в сигнатурах вызова 372
Описания методов класса 376
Документация методов класса 378
Документация несуществующих классов?! 379
Стандартная библиотека Ruby 380
Поиск классов и модулей стандартной библиотеки 382
Откуда берется документация Ruby: rdoc 383
Какую информацию может вывести rdoc 385
Добавление комментариев для создания документации 386
Ваш инструментарий Ruby 388
12. Непредвиденное препятствие (Исключения)
Не используйте возвращаемые значения методов для передачи информации об ошибках 390
Использование «raise» для передачи информации об ошибках 392
Использование «raise» создает новые проблемы 393
Исключения: когда происходит что-то не то 394
Условия rescue: пытаемся исправить проблему 395
Как Ruby ищет условие rescue 396
Использование условия rescue с классом SmallOven 398
Описание проблемы от источника 399
Сообщения об исключениях 400
Разная логика rescue для разных исключений 405
Классы исключений 407
Назначение класса исключения для условия rescue 409
Несколько условий rescue в одном блоке begin/end 410
Переход на пользовательские классы исключений в классе SmallOven 411
Перезапуск после исключения 412
Обновление кода с «retry» 413
Код, который должен выполняться в любом случае 415
Условие ensure 416
Гарантированное выключение духовки 417
Ваш инструментарий Ruby 418
13. Контроль качества кода (Модульное тестирование)
Автоматизированные тесты помогают найти ошибки до того, как их найдут другие 420
Программа, для которой необходимы автоматизированные тесты 421
Типы автоматизированных тестов 423
MiniTest: стандартная библиотека модульного тестирования Ruby 424
Выполнение теста 425
Тестирование класса 426
Подробнее о тестовом коде 428
Красный, зеленый, рефакторинг 430
Тесты для класса ListWithCommas 431
Исправление ошибки 434
Еще одна ошибка 436
Сообщения об ошибках 437
Другой способ проверки равенства двух значений 438
Другие методы проверки условий 440
Устранение дублирования кода из тестов 443
Метод «setup» 444
Метод «teardown» 445
Обновление кода для использования метода «setup» 446
Ваш инструментарий Ruby 449
14. На раздаче HTML (Веб-приложения)
Написание веб-приложений на Ruby 452
Список задач 453
Структура каталогов проекта 454
Браузеры, запросы, серверы и ответы 455
Загрузка и установка библиотек с использованием RubyGems 456
Установка библиотеки Sinatra 457
Простое приложение Sinatra 458
Ваш компьютер разговаривает сам с собой 459
Тип запроса 460
Маршруты Sinatra 462
Создание списка фильмов в формате HTML 465
Обращение к разметке HTML из Sinatra 466
Класс для хранения данных фильмов 468
Создание объекта Movie в приложении Sinatra 469
Теги внедрения в ERB 470
Тег внедрения вывода в ERB 471
Внедрение названия фильма в разметку HTML 472
Нормальный тег внедрения 475
Перебор названий фильмов в разметке HTML 476
Ввод данных на форме HTML 479
Получение формы HTML для добавления фильма 480
Таблицы HTML 481
Размещение компонентов формы в таблице HTML 482
Ваш инструментарий Ruby 484
15. Сбережения пользователя (Сохранение и загрузка данных)
Сохранение и загрузка данных формы 486
Настройка формы HTML для отправки запроса POST 490
Создание маршрута Sinatra для запроса POST 491
Преобразование объектов в строки и YAML 495
YAML::Store и сохранение объектов в файле 496
YAML::Store и сохранение описаний фильмов в файле 497
Поиск объектов Movie в YAML::Store 501
Числовые идентификаторы 502
Класс для управления YAML::Store 505
Использование класса MovieStore в приложении Sinatra 506
Тестирование MovieStore 507
Загрузка всех фильмов из MovieStore 508
Загрузка всех фильмов в приложении Sinatra 510
Построение ссылок HTML на фильмы 511
Именованные параметры в маршрутах Sinatra 514
Поиск объекта Movie в YAML: :Store 519
Шаблон ERB для отдельного фильма 520
Полный код приложения 523
Ваш инструментарий Ruby 527
Приложения.
Десять основных тем не рассмотренных в книге (Оставшиеся темы)
1. Другие полезные библиотеки 530
2. Компактные версии if и unless 532
3. Приватные методы 533
4. Аргументы командной строки 535
5. Регулярные выражения 536
6. Синглетные методы 538
7. Вызов любых (даже неопределенных) методов 539
8. Rake и автоматизация задач 541
9. Bundler 542
10. Техническая литература 543
Добавить комментарий