Ruby для романтиков: Самая простая книга по языку Ruby с заданиями
Покупка
Новинка
Тематика:
Программирование и алгоритмизация
Издательство:
ДМК Пресс
Автор:
Пушкин Роман
Год издания: 2023
Кол-во страниц: 307
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное образование взрослых
ISBN: 978-5-93700-182-5
Артикул: 855976.01.99
Перед вами книга для самостоятельного знакомства с основами языка Ruby для начинающих разработчиков любого возраста. Последовательное изложение материала позволит не только освоить тонкости языка в удобной игровой форме, но и заложить твердый фундамент для дальнейшего обучения. В издании вы также найдете несколько десятков интересных упражнений и заданий. Тонкости, советы, хитрости и приемы основаны на более чем двадцатилетнем опыте работы автора в российских и зарубежных компаниях — для многих учеников эта книга стала первым шагом на пути смены карьеры.
Если вы давно хотели стать программистом, но не знали с чего начать, то эта книга для вас!
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Роман Пушкин Ruby для романтиков Самая простая книга по языку Ruby с заданиями
УДК 004.04Ruby ББК 32.372 П91 Роман Пушкин П91 Ruby для романтиков: Самая простая книга по языку Ruby с заданиями. – М.: ДМК Пресс, 2023. – 306 с.: ил. ISBN 978-5-93700-182-5 Перед вами книга для самостоятельного знакомства с основами языка Ruby для начинающих разработчиков любого возраста. Последовательное изложение материала позволит не только освоить тонкости языка в удобной игровой форме, но и заложить твердый фундамент для дальнейшего обучения. В издании вы также найдете несколько десятков интересных упражнений и заданий. Тонкости, советы, хитрости и приемы основаны на более чем двадцатилетнем опыте работы автора в российских и зарубежных компаниях – для многих учеников эта книга стала первым шагом на пути смены карьеры. Если вы давно хотели стать программистом, но не знали с чего начать, то эта книга для вас! УДК 004.04Ruby ББК 32.372 Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. © Пушкин Р., 2023 © Оформление, издание, ДМК Пресс, 2023 ISBN 978-5-93700-182-5
Оглавление Введение................................................................................................7 Вместо предисловия............................................................................................7 Руби против ибур.................................................................................................8 Для фана.............................................................................................................10 Что мы будем изучать.......................................................................................10 Веб-программирование или что-то другое?...................................................11 Сколько зарабатывают программисты?..........................................................12 Ваше преимущество..........................................................................................13 Часть 1. Первые шаги........................................................................ 15 Среда исполнения.............................................................................................15 Настройка Windows для запуска первой программы.....................................16 Здравствуйте, я ваш REPL.................................................................................19 Запуск программы из файла.............................................................................20 Я ваш файловый менеджер...............................................................................21 Основы работы с файловой системой..............................................................24 Навигация..........................................................................................................25 Создание файла.................................................................................................27 Консольный ниндзя...........................................................................................28 Текстовые редакторы........................................................................................33 Первая программа.............................................................................................35 Переменные в языке Ruby................................................................................38 Сложение и умножение строк...........................................................................40 Часть 2. Основы.................................................................................. 42 Типы данных......................................................................................................42 Докажем, что все в Ruby – объект.....................................................................44 Приведение типов (англ. converting types или type casting)...........................45 Дробные числа...................................................................................................48 Интерполяция строк..........................................................................................49 Bang!...................................................................................................................52 Блоки..................................................................................................................55 Блоки и параметры............................................................................................58 Любопытные методы класса Integer................................................................60 Сравнение переменных и ветвление...............................................................63 Комбинирование условий.................................................................................67 Некоторые полезные функции языка Ruby.....................................................69 Генерация случайных чисел..............................................................................71 Угадай число......................................................................................................74
Часть 3. Время веселья..................................................................... 77 Тернарный оператор.........................................................................................77 Индикатор загрузки..........................................................................................79 Методы...............................................................................................................80 Эмулятор Судного дня.......................................................................................82 Переменные экземпляра и локальные переменные......................................88 Однорукий бандит (слот-машина)...................................................................90 Массивы.............................................................................................................94 Немного про each..............................................................................................96 Инициализация массива...................................................................................98 Обращение к массиву........................................................................................99 Битва роботов..................................................................................................100 Массивы массивов (двумерные массивы).....................................................106 Установка gem’ов.............................................................................................113 Обращение к массиву массивов.....................................................................117 Многомерные массивы...................................................................................121 Наиболее часто встречающиеся методы класса Array..................................122 Метод empty?...................................................................................................122 Методы length, size, count...............................................................................124 Метод include?.................................................................................................125 Добавление элементов....................................................................................125 Выбор элементов по критерию (select)..........................................................126 Отсечение элементов по критерию (reject)...................................................126 Метод take........................................................................................................127 Есть ли хотя бы одно совпадение (any?)........................................................127 Все элементы должны удовлетворять критерию (all?).................................127 Несколько слов о популярных методах класса Array....................................127 Размышления о массивах в Ruby....................................................................128 Символы...........................................................................................................130 Структура данных «Хеш» (Hash).....................................................................132 Другие объекты в качестве значений............................................................136 Пример JSON-структуры, описывающей приложение.................................138 Англо-русский словарь....................................................................................142 Наиболее часто используемые методы класса Hash.....................................145 Установка значения по умолчанию................................................................146 Передача опций в методы...............................................................................148 Набор ключей (HashSet)..................................................................................154 Итерация по хешу............................................................................................157 Метод dig..........................................................................................................158 Проверка наличия ключа................................................................................161 Часть 4. Введение в ООП................................................................163 Классы и объекты............................................................................................163 Состояние.........................................................................................................165 Состояние, пример программы......................................................................176 Полиморфизм и duck typing...........................................................................181 4 Оглавление
Наследование...................................................................................................191 Модули..............................................................................................................197 Subtyping (субтипирование) против наследования......................................199 Статические методы........................................................................................204 Вся правда про ООП........................................................................................208 Отладка программ...........................................................................................209 Отладка с использованием вывода информации в консоль........................209 Отладка с использованием консольного отладчика.....................................212 Отладка с использованием графического отладчика...................................218 Практическое занятие: подбор пароля и спасение мира.............................221 Немного про виртуализацию, Docker, основные команды Docker..............234 Ruby Version Manager (RVM)............................................................................237 Тестирование...................................................................................................250 RSpec.................................................................................................................252 Заключение.......................................................................................265 Решения задач..................................................................................266 Оглавление 5
Тысячи людей уже занимаются по этой книге! Вступай и общайся в нашем ruby-сообществе в Telegram: https://t.me/rubyschool
Введение Вместо предисловия В XXI веке программирование стало одной из важнейших наук в любой экономике. Процессы, которые происходили раньше без помощи компьютеров, были полностью или частично оптимизированы. Бизнес и простые люди увидели пользу электронных машин, и началась эпоха расцвета IT-индустрии. Во всем многообразии технологий образовались отдельные направления. Определились наиболее удобные инструменты для выполнения той или иной задачи. Языки программирования претерпели существенные изменения. Разобраться во всех языках и технологиях обычному читателю не так просто, как это может показаться на первый взгляд. В какой-то момент стало очевидно, что программист – одна из профессий XXI века. Но как стать программистом? В каком направлении приложить усилия? Что нужно изучать, а что не нужно? Как наиболее эффективно использовать время, чтобы освоить какую-либо технологию? Прежде чем дать ответ на эти вопросы, нужно ответить на самый главный вопрос: а зачем нужно становиться программистом? Какой в этом смысл? Кто-то захочет стать программистом, чтобы разрабатывать микропрограммы для межконтинентальных баллистических ракет и космической индустрии. Кто-то хочет стать программистом для того, чтобы создавать свои собственные игры. Кто-то хочет освоить программирование в электронных таблицах, чтобы эффективнее считать налоги. Но задача именно этой книги более бытовая. Автор подразумевает, что читатель на вопрос «зачем нужно становиться программистом?» даст ответ «чтобы быть программистом и зарабатывать деньги». Обычно такой ответ дают люди, которые уже попробовали себя в какой-либо профессии и хотят более эффективно использовать свое время и получать за это деньги. Также это могут быть молодые люди, которые вынуждены идти в ногу со временем и осваивать технологии как можно быстрее, и как можно быстрее получать результат от своих знаний. Причем результат не только в виде самих знаний – как написать ту или иную программу, а результат в денежном эквиваленте. Знание какого-либо направления в программировании подразумевает знакомство с основами языка, с элементарной теорией (которая отличается для каждого направления), с основными понятиями и определениями, а также знакомство с неосновными инструментами (такими как операционная система, утилиты и дополнительные программы). Направлений существует огромное множество. Это и разработка игр, и научные исследования, и обработка и анализ данных, и веб-программирование, и программирование для мобильных устройств, и т.д. Быть специалистом по всем направлениям сразу невозможно.
Поэтому человек, начинающий или желающий изучать программирование, стоит перед выбором: куда податься? что учить? Если вы являетесь научным сотрудником НИИ, то выбор, скорее всего, падет на язык Python или C++, так как для этих языков накоплено большое количество библиотек для анализа и обработки данных. Если вы, например, работаете сторожем и полностью довольны своей работой, то можно изучить какой-нибудь экзотический, маловостребованный на рынке язык программирования просто для того, чтобы не было скучно. Если вы живете в обществе, где каждый месяц нужно оплачивать счета, которые становятся все больше и больше, где нужно думать не только про сегодня, но и про завтра, выбор уже будет другим. Нужно будет изучить что-нибудь быстро, очень востребованное, чтобы скорее найти работу. Язык Руби (Ruby – англ.) и веб-программирование – это нечто среднее между «поскорее найти работу», «выучить что-нибудь несложное и интересное» и «чтобы также пригодилось в будущем». Ruby не только позволяет составлять скучные программы, работая на кого-то в офисе, но также может быть полезен дома, в быту (одна из моих последних программ – обучение игре на гитаре). Также философия самого языка подразумевает, что обучение и использование не будет скучным. К примеру, один из принципов языка – принцип наименьшего сюрприза (principle of a least surprise), который говорит буквально следующее: «что бы вы ни делали – скорее всего, у вас получится». Согласитесь, что это уже вдохновляет! Существуют также и другие языки программирования. Автор ни в коем случае не утверждает, что они плохие. Каждый язык хорош для определенной задачи. Но вспомним про нашу задачу и сравним с некоторыми другими языками. Руби против ибур Язык «Ибур» – это «Руби» наоборот. Это экзотический язык программирования, который, кроме меня, никто не знает. Я его сам только что придумал, и я сам не знаю, что он делает. Давайте сравним Ибур с Руби по трем параметрам, которые я описал выше. Поскорее найти работу Руби – очень популярный язык, легко найти работу. Ибур – никто о нем не знает, работу найти невозможно. Остальные параметры можно не сравнивать. Другими словами, если вам важно не только программирование в себе (что тоже неплохо), но и возможность заработать в обозримом будущем, то Руби – неплохой выбор. Язык довольно популярен. Конечно, существуют и другие популярные языки программирования. Скажем, JavaScript, возможно, более популярен, но давайте сравним JavaScript и Руби. Выучить что-нибудь несложное и интересное Ruby – principle of a least surprise, что уже довольно неплохо. JavaScript – изначально не создавался с идеей «принципа наименьшего сюрприза». Сложнее, чем Ruby, так как является полностью асинхронным (пока поверьте мне на слово). 8 Введение
Докажем, что JavaScript не такой уж и простой, как может показаться на первый взгляд. Рассмотрим программу на Ruby, которая сортирует числа: Пример: простая программа для сортировки четырех чисел в Ruby [11, 3, 2, 1].sort() Программа выше должна отсортировать числа 11, 3, 2, 1 в возрастающем порядке (пока не важно, если этот синтаксис вам непонятен, мы еще будем проходить эту тему). Результат работы программы на Ruby: 1, 2, 3, 11. Без сюрпризов! Но напишем ту же самую программу на JavaScript: Пример: неправильная программа для сортировки четырех чисел в JavaScript [11, 3, 2, 1].sort(); Синтаксис в этом случае очень похож и отличается лишь точкой с запятой (semicolon) в конце. Но каков будет результат? Не всегда JavaScript-программисты с опытом могут дать правильный ответ, ведь результат работы программы довольно неожиданный: 1, 11, 2, 3. Почему это так – это вопрос уже к истории. Но чтобы отсортировать числа в JavaScript, надо написать: Пример: правильная программа для сортировки четырех чисел в JavaScript [11, 3, 2, 1].sort((a, b) => a - b); Если разобраться, то это несложно. Но вопрос в другом. Нужно ли вам на начальном этапе тратить время на такие тонкости? JavaScript вполне востребован, и каждый ruby-программист должен знать его на минимальном уровне. Но, признаться, быть full-time JavaScript-разработчиком я бы хотел только за очень большие деньги. Может пригодиться в будущем К тому же «чтобы также пригодилось в будущем» не очень подходит в случае с JavaScript. Язык очень динамично развивается. Знания, полученные 10 лет назад, уже не актуальны (в данном случае я говорю про популярные фреймворки – наборы инструментов). В случае с Ruby фреймворк Rails существует уже более 10 лет. Знания, полученные 10 лет назад, до сих пор применимы. К слову, про применимость знаний стоит сделать отдельное замечание. Знания языков shell-скриптинга до сих пор применимы, через более чем 30 лет мало что изменилось. Знаниe основ Computer Science до сих пор применимо, на интервью и не только, эти знания практически не устаревают. Про применимость какого-либо языка в будущем никто не может дать точных прогнозов. Однако можно посмотреть на статистику последних лет. На момент написания этой книги компания Microsoft купила за 7.5 миллиарда долларов GitHub, который был написан как раз на языке Ruby. Другими словами, язык на сегодняшний день находится в прекрасной форме. Выпускаются обновления, улучшаются скорость и синтаксис. А количество доступных библиотек позволяет быстро решить практически любую задачу (в рамках направления, которое называется веб-программирование). Введение 9
Для фана На наш взгляд, язык программирования должен не только решать какие-то бизнес-задачи, но и быть приятным в использовании настолько, чтобы им хотелось пользоваться каждый день. К примеру, язык Java является отличным инструментом для решения бизнес-задач. Но требует к себе уважения – язык является статически типизированным (мы еще коснемся этой темы), необходимо указывать точный тип данных, с которыми производятся различные операции. Это требует времени и полностью оправдано в бизнес-среде, где лучше потратить в несколько раз больше времени на разработку, чем платить потом за ошибки. В случае с Ruby можно написать программу быстро, «на коленке». Нет очень большой надежности (что тоже является проблемой), но многие компании, особенно стартапы, пришли к выводу, что надежность является «достаточной», а относительно невысокая скорость выполнения не является проблемой. Все это с лихвой компенсируется скоростью разработки. Ведь в современном мире часто требуется сделать что-то быстро, чтобы быстро получить инвестиции, привлечь первых пользователей, пока другие долго думают. С личной точки зрения автора, Ruby является хорошим инструментом для того, чтобы сделать что-то свое. Какой-то свой проект, программу, которой можно поделиться с окружающими, привлечь к себе внимание или заработать денег. Другими словами, Ruby – это эффективный, нескучный язык не только для работы, но и для себя лично – язык для романтиков. Что мы будем изучать Как уже было замечено ранее, существует множество направлений программирования. Каждое направление уникально и требует своих собственных навыков. На взгляд авторов, на данный момент существует два (возможно, и больше) «проверенных» направления в программировании, которые дают максимальный результат за минимальный срок. Под результатом тут понимается как денежная компенсация, так и само умение что-то сделать своими руками. Первое направление – это мобильная разработка: программы для мобильных телефонов (Android, iPhone), планшетов (iPad) и других устройств. Второе направление – веб-программирование. Если выбирать между мобильной разработкой и веб-программированием, то «быстрота освоения» любой из этих двух технологий по количеству вложенных усилий примерно одинакова. Однако мобильная разработка обладает своими минусами. Например, Java – язык для составления программ для Android – был уже упомянут выше. Нельзя сказать, что он является «достаточно простым» для новичка. Если честно, то с этим можно жить. В Java нет ничего такого, что является непостижимым или очень сложным. Однако сама мобильная разработка часто подразумевает оптимизацию кода под мобильные устройства любыми средствами. Языки программирования и SDK (software development kit – набор разработчика для определенной платформы) очень часто навязывают определенный стиль разработки. И этот стиль сильно отличается от классического, объектно-ориентированного программи10 Введение