Об авторе
Джонатан Джиллетт (Jonathan Gillette), более известный под своим ником в twitter «_why», а также под псевдонимом Why The Lucky Stiff. Писатель, мультипликатор, художник и программист, ставший знаменитым благодаря своей работе по популяризации языка Ruby. Наравне с Юкихиро Матсумото (автором языка) и Давидом Хейнемейер Ханссоном (создателем фреймворка Ruby on Rails) был одной из ключевых фигур в сообществе Ruby.
В 2004 году _why выложил в бесплатный доступ одну из первых книг на английском по Ruby — «Почемучкин (трогательный) Гайд по Ruby» (why’s (Poignant) Guide to Ruby). Книга стала известной благодаря необычному авторскому стилю и множеству иллюстраций. В 2009 году Джонатан Джиллетт исчез из публичного пространства, удалив все свои аккаунты в социальных сетях и закрыв личный сайт.
Буду с вами честен. Я хочу, чтобы вы заплакали. Зарыдали. Тихонько захныкали. Моя книга — трогательный гайд по Ruby. Это значит, что код на Ruby столь красив, что достоин ваших слез. Это значит, что вас ждут истории о благородстве и мрачные истины. Они заставят вас проснутся завтра утром в объятьях этой книги. Вы будете ходить с ней в обнимку весь день. Если понадобится, можно соорудить для «Почемучкиного (трогательного) гайда по Ruby» специальную поясную сумку — тогда у вас всегда будет с собой нежный друг в её лице.
Мы начали книгу с того, что хорошенько подружились в Предисловии. Эта «совместность», эта синергия проведёт нас через всю книгу — в ней я ваш гид. Утвердительно кивните мне или похихикайте, чтобы я понял, что вы уже дочитали до этого места.
Итак, Я Питер Пэн, держащий вашу руку. Вперёд, Венди! От второй звезды направо и до самого утра.
Три причины полюбить и изучить Ruby
Прежде мне следует как-то вас смотивировать. Так что я назову вам три главные, по моему мнению, причины изучать Ruby. На этом и закроем тему.
1. Здоровье мозгов
Витамин R. попадает прямо в голову. Ruby научит вас выражать свои идеи через компьютер. Вы будете писать истории для машины. Мы тут о креативных навыках говорим, народ. Делать умозаключения и рассуждать. Или кивать с умным видом. Язык станет для вас инструментом, который соединит ваш разум с миром. Я давно заметил, что многие опытные программисты на Ruby обладают ясным умом и объективностью. (В противовес людям, полным предрассудков, и грубиянам.)
2. Один человек с одного острова
Ruby родился в Японии. Что странно уже само по себе. Япония никогда не славилась программным обеспечением. А поскольку языки программирования написаны по большей части на английском, кто вообще мог подумать, что новый язык придёт из Японии? И всё же — вот он Ruby. Вопреки всему, 24 февраля 1993 года Юкихиро Матсумото создал Ruby. В течение последних 10 лет1 он неуклонно вёл Ruby к всемирной аудитории. Это триумф одного человека, благородства и всего такого. Поддерживайте многообразие. Помогите нам хоть чуть-чуть наклонить Землю.
3. Использование Ruby ничего не стоит
Код Ruby открыт всему миру — вдыхайте его и выдыхайте. Чёрт возьми, даже эта книга бесплатная. Всё это — часть одного большого розыгрыша, где все выигрывают. Большого розыгрыша, который просто обязан иметь большущий подвох. Вы можете подумать, что мы хотим заставить вас купить пылесос, ипотеку или подделку Моне. Можете подумать, что сейчас будет презентация на 90 минут, в конце которой выйдет владелец компании и выбьет из вас сделку. Нет. Всё бесплатно.
Быстрое (и надеюсь безболезненное) путешествие по Ruby (вместе с мультяшными лисами)
Да, с этими двумя. У меня начинается приступ астмы, поэтому мне надо срочно сделать вдох медикаментозного воздуха. Вернусь через секунду.
Мне говорили, что эту главу лучше всего читать с тряпочкой. Чем-то подходящим для того, чтобы стирать пот с лица, которым вы будете обливаться. Да, так и есть — мы пронесёмся галопом по всему языку. Прямо как, когда вы сжигаете все спички из коробка на скорость.
1. Язык, и Я ИМЕЮ В ВИДУ Язык
Совесть не позволяет мне назвать Ruby компьютерным языком. Это бы означало, что язык работает главным образом по принципам компьютера. Что язык был создан для удобства компьютера. Те есть мы, кодеры, всего лишь иностранцы, просящие вид на жительство на территории компьютерного государства. Это язык компьютера, а мы его переводчики для всего мира.
Но разве это может быть язык компьютера, когда твой мозг начинает на нём думать? Когда ты начинаешь использовать родные слова этого языка и разговорные фразы, чтобы выразиться самому. Скажите, ведь компьютер так не может. Как это может быть язык компьютера? Он наш, мы говорим на нём как на родном!
Мы больше не можем называть его компьютерным языком (computer language). Это живая речь кодера (coderspeak). Это язык, на котором мы думаем.
Прочтите вслух фразу ниже:
В английских предложениях знаки пунктуации (точки, восклицательные знаки, скобки) не произносятся. Пунктуация добавляет смысл словам, даёт нам подсказки относительного того, что хотел сказать автор. Так что давайте прочтём фразу наверху как: Пять раз напечатай “Odelay!”2
Именно это и делает данная маленькая программа на Ruby. Возглас Beck на мутировавшем испанском будет 5 раз напечатан на экране компьютера.
Прочтите вслух фразу ниже:
Здесь мы проводим базовую проверку реальности. Наша программа завершит работу, если слово ресторан не содержит (или не включает в себя) слово аура. Ещё раз по-английски: Завершай работу за исключением случаев, когда слово “ресторан” содержит слово “аура”.
Видели когда-нибудь, чтобы язык программирования так эффективно использовал вопросительные знаки? Ruby применяет некоторые знаки пунктуации, например, восклицательные и вопросительные знаки, чтобы улучшить читаемость кода. Мы же задаем вопрос в строчке выше, так почему бы так и не написать?
Прочтите вслух фразу ниже:
Хотя этот кусочек кода читается не так легко и меньше похож на законченное предложение, чем предыдущие примеры, я всё равно призываю вас прочесть его вслух. Ruby можно читать как английский, но иногда он считывается как укороченная версия английского. При полном переводе фразу выше можно прочесть как «Из слов “тост”, “сыр” и “вино” возьми все, что является едой, и напечатай с большой буквы».
И компьютер любезно ответил: Тост, Сыр и Вино.
Вероятно, к этому моменту вы уже задумались, как эти слова вообще соотносятся. Задаётесь вопросом, что значат эти точки и скобки. Далее я буду говорить о разных частях речи.
Всё, что вам нужно сейчас знать, так это то, что Ruby по сути строится из предложений. Они не совсем похожи на предложения в английском. Это короткие наборы слов и знаков препинания, в которых заключена единая мысль. Из этих предложений можно составить книгу. Целые страницы текста, из которых можно сшивать романы. Романы, которые могут читать люди. И компьютеры.
2. Части речи
Точно так же, как скунса можно узнать по белой полосе на спине, а невесту по тянущемуся за ней белому шлейфу, большинство частей речи в Ruby имеют визуальные подсказки, помогающие их определить. Пунктуация и написание с большой буквы помогут вашему мозгу выделять куски кода и мгновенно их узнавать. Ваш разум будет то и дело кричать “Эй! Я знаю этого парня!” Плюс, будет чем похвастаться при разговоре с другими рубистами.
Пока попытайтесь сконцентрироваться на внешнем виде каждой части речи. Их особенностям посвящена вся оставшаяся книга. Я кратко объясню все части речи, но вам необязательно понимать моё объяснение. К концу этой главы по идее вы сможете узнать любую часть программы на Ruby.
Переменные (variables)
Любое обычное слово, написанное с маленькой буквы, — переменная в Ruby. Переменные могут включать буквы, цифры и нижнее подчеркивание.
Переменные — это что-то типа никнеймов. Помните, как все называли вас Вонючкой Питом? Кто-то говорил: “Иди сюда, Вонючка Пит!” И все, словно по волшебству, знали, что речь о вас.
С помощью переменных вы раздаёте ники вещам, которые часто используете. Например, представим, что вы заправляете детским приютом. Это плохой приют. И каждый раз, когда Дэдди Ворбакс приходит купить новых детей, мы настаиваем, что он должен заплатить сто двадцать один доллар и восемь центов за медвежонка ребёнка, к которому тот привязался за кошмарное время, проведённое в приюте.
Позднее, когда вы пробиваете его на кассе (на своей прокачанной донельзя кассе, которая работает на Ruby!), вам необходимо объединить все позиции в одну сумму (total).
Ники переменных определённо в этом помогают. А в таком сомнительном и подпольном деле, как торговля детьми, пригодиться любая помощь.
Числа
Базовый тип чисел — целые числа (integer), то есть серия цифр, начинающаяся со знака плюс или минус.
Точки использовать для чисел нельзя, но нижние подчеркивания можно. Так что, если вы захотите разбить число на разряды, чтобы сделать их читаемыми, используйте нижнее подчёркивание.
Десятичные числа называются в Ruby числами с плавающей запятой (floats). Такие числа состоят из цифр с десятичным знаком или экспоненциальной записи числа.
Строки (strings)
Строки — это любая закавыченная последовательность знаков (букв, цифр, знаков пунктуации). Для написания строк используют и одинарные, и двойные кавычки.
Когда вы закрываете знаки внутри кавычек, они записываются вместе как одна строка. Представьте, что вы репортёр, который записывает все бессвязные звуки, выходящие изо рта знаменитости. «Теперь я гораздо мудрее», — говорит Аврил Лавин. «Сейчас я знаю, что такое бизнес — что нужно делать и как надо работать».
Точно так же, как мы сохранили число в переменную teddy_bear_fee, теперь мы записали набор знаков (строку) в переменную avril_quote. Репортёр пересылает эту переменную в типографию, которая использует станок, по счастливой случайности работающий на Ruby.
Символы
Символы — это слова, которые выглядят как переменные. Опять же, они могут состоять из букв, цифр и нижних подчеркиваний. Но начинаются они с двоеточия.
Символы — облегчённая версия строк. Обычно их используют, когда вам нужна строка, но печатать её на экране вы не будете.
Можно сказать, что символ упрощает компьютеру работу, жалеет его. Он как антацид, пищевая сода. Двоеточие символизирует пузырьки, всплывающие вверх желудка вашего компьютера, когда он переваривает символ. Ах, сладкое, сладкое облегчение.
Константы
Константы — такие же слова, как переменные, но пишутся с большой буквы. Если переменные — имена существительные в Ruby, то константы можно считать именами собственным.
В английском имена собственные предполагают написание с большой буквы. Эмпайр-стейт-билдинг (The Empire State Building). Вы не можете взять и передвинуть Эмпайр-стейт-билдинг. Не можете постановить, что отныне “Эмпайр-стейт-билдинг” — это что-то другое. Такие уж они, имена собственные — относятся к чему-то очень конкретному и обычно не меняют свое значение во времени. Точно так же константы не могут быть изменены после того, как их задали.
Если мы попытаемся изменить константы, Ruby начнёт ругаться. В приличном обществе такие вещи не одобряют.
Методы
Если переменные и константы — существительные, то методы — глаголы. Обычно они прикрепляются к переменным и константам при помощи точки. Вы уже видели, как работают методы.
В примере выше «открой» (open) — это метод. Это действие, глагол. Иногда вы будете видеть несколько действий, сцепленных вместе.
Мы приказали компьютеру открыть входную дверь (front door) и тут же её закрыть.
То, что выше, тоже выражает действие. Мы приказываем компьютеру проверить, открыта дверь или нет. Метод можно было бы назвать «Дверь.проверь_открыта_ли_она» (Door.test_to_see_if_its_open), но название «открыта?» (is_open?) лаконичнее, а означает то же самое. В названии методов можно использовать и восклицательные, и вопросительные знаки.
Аргументы методов
Для того, чтобы выполнить действие, методу может понадобиться дополнительная информация. Например, если мы хотим, чтобы компьютер покрасил дверь, цвет тоже надо указать. Аргументы метода присоединяются за ним. Обычно аргументы заключаются в скобки и отделяются запятыми.
Фраза выше красит входную дверь красным цветом в три слоя.
Воспринимайте аргументы как полную дополнительных инструкций ватрушку для катания на воде, которую тащит за собой метод. Скобки создают мокрые скругленные края ватрушки. Запятые — ноги каждого аргумента, свисающие через край в воду. А последний просто убрал их под себя, поэтому их и не видно.
Как к катеру можно прикрепить несколько ватрушек, так и к методу.
Выражение выше красит входную дверь тремя слоями красной краски, даёт просохнуть 30 минут, а затем её закрывает. И хотя в последнем методе нет аргументов, вы все равно можете поставить там скобки, если захотите. Но смысла тащить пустую ватрушку нет, поэтому скобки обычно опускают.
Некоторые методы (например, «напечатай» (print)) являются базовыми (kernel methods). Они используются в Ruby повсеместно. Поскольку их часто употребляют, точку в конце ставить вам не надо.
Методы классов
Как и методы, описанные выше (иногда их ещё называют методы экземпляра (instance methods)), методы классов обычно присоединяются после переменных и констант. Вместо точки же используется двойное двоеточие.
Самым частым методом для создания новых вещей, как показано выше, является метод нового класса (new class method). В этом примере мы просим Ruby создать для нас новую дубовую дверь. Конечно, Ruby должен иметь представление о том, как делать двери. Ну и, конечно, армию дровосеков с кучей древесины и теми самыми длиннющими, ребристыми двуручными пилами.
Глобальные переменные
Переменные, начинающиеся со знака $, — глобальные.
Большинство переменных носят скорее временный характер. Так, куски вашей программы напоминают небольшие домики. Вы заходите внутрь — в каждом переменные свои. В одном домике «папа» (dad) у вас означает Арчи, коммивояжёра и по совместительству коллекционера скелетов. В другом домике «папа» (dad) относится к Питеру, укротителю львов и любителю фланели. У каждого дома значение для «папы» (dad) своё.
Глобальные переменные дают гарантию, что переменные будут одинаковыми во всех домиках. Значок доллара ($) подходит как нельзя лучше. Во всех американских домах к доллару относятся с почтением. Мы сходим по нему с ума. Постучитесь в любую дверь в Америке и попробуйте дать налички. Ручаюсь, если вы постучите в ту же самую дверь и предъявите Питера, укротителя львов и любителя фланели, реакция будет совсем иной.
Глобальные переменные можно использовать в любом месте программы. Они всегда остаются на виду.
Переменные экземпляра
Переменные экземпляра пишутся с «собачки».
Переменные этого типа часто используются для определения свойств чего-либо. Например, вы можете назначить Ruby ширину «входной_двери» (front_door), указав переменную @ширина (@width) внутри «входной_двери». Переменные экземпляра в Ruby используются для описания единичного объекта. «Собачку» (at | @) можете считать сокращением от attribute (свойство).
Переменные класса
Переменные с двойной «собачкой» в начале — переменные класса.
Переменные класса тоже применяются для определения свойств. Но если переменные экземпляра описывают в Ruby единичный объект, то классовые назначают свойство множеству связанных объектов. Так, переменная экземпляра устанавливала свойства для одной конкретной «входной_двери» (front_door), а классовая назначит свойство всему, что есть «Дверь» (Door).
Приставку из двойной собачки можно представить как сокращение от «назначить всем» (attribute all). Вы также можете представлять её как стайку AT-AT3 из Звёздных войн — все под командованием Ruby. Вы меняете переменную класса, и меняется не один объект, а все.
Блоки
Блок — это любая часть кода, заключенная в фигурные скобки.
С помощью блоков вы можете сгруппировать набор инструкций, чтобы потом раскидывать его по программе. Фигурные рамки, словно клешни краба, схватили код и держат его вместе. Увидели две клешни — вспомнили, что весь код внутри был передан единым блоком.
Блоки — это нечто типа маленьких наборов Hello Kitty, которые продают в гипермаркетах. Малюсенькие карандаши и микроскопическая бумага, впихнутые в прозрачный кейс, переливающийся блёстками. Размер как раз, чтобы спрятать в руке, если придётся выйти на секретную операцию. Правда для работы с блоками щуриться придётся поменьше.
Фигурные рамки также можно заменить на слова «делай» (do) и «закончи» (end). Это удобно, если ваш блок состоит больше, чем из одной строки.
Аргументы блоков
Аргументы блоков — это набор переменных, заключённых в пайпы (|) и разделённых запятыми.
Аргументы блока указываются в начале.
В примере выше «|х, y|» — аргументы. За аргументами идёт кусок кода. Выражение «х+y» складывает аргументы вместе.
Мне нравится представлять, что пайпы — это туннель. Они похожи на жёлоб, по которому переменные спускаются вниз (X скатывается распластавшись, а Y — аккуратно скрестив ноги). Этот жёлоб или туннель играет роль коридора между блоками и миром вокруг, через него переменные и попадают в блок.
Интервалы
Интервал — это два значения в скобках, разделённые недомолвкой (а именно двумя или тремя точками).
Представьте аккордеон, который сложили для удобства переноски. (Конечно, можно для повышения чувства собственного достоинства расхаживать с разобранным аккордеоном, но порой человеку хочется насладиться неуверенностью в себе и по-тихому спрятать куда-то свою гармонь.) Скобки — ручки с обеих сторон небольшого аккордеона. Точки — цепочка, держащая его меха крепко закрытыми.
Обычно используют только две точки. Если поставить третью, последнее значение будет исключено из интервала.
Увидев третью точку, представьте, как аккордеон тихонько раскрывается. Совсем чуть-чуть, чтобы издать из своих недр одну ноту. Эта нота — конечное значение интервала. Пусть её съест небо.
Массивы
Массив — это список, заключённый в квадратные скобки и разделённый запятыми.
Он похож на гусеницу, которую прикрепили степлером к коду. Две квадратные скобки — скобы, которые не дают гусенице двигаться. Так вы можете сообразить, где её голова, а где хвост. Запятые же — ножки гусеницы, шевелящиеся между частями её тельца.
Когда-то жила была гусеница, у которой вместо ног были запятые. А значит, ей приходилось делать литературную паузу после каждого шага. Другие гусеницы зауважали её за это, и со временем она обрела вид прирождённого командира. Ну и куда же без благотворительности! Гусеница печально прославилась тем, что раздавала свежие листочки наименее благополучным собратьям.
Да, массив — это просто набор вещей, но он хранит их в определённом порядке.
Хеши
Хеш — это словарь в фигурных скобках. Словари обычно соотносят слова с их значениями. Ruby делает так же при помощи стрелок из знака равенства с последующим знаком «больше чем».
Здесь фигурные скобки — это значки книги. Видите, как они похожи на маленькие раскрытые книги с изогнутыми корешками посередине? Они показывают, что словарь открыли, а потом закрыли.
Представьте, что на каждой странице нашего словаря есть определение. Тогда запятые — уголки страниц, которые мы переворачиваем, чтобы прочесть следующее определение. В итоге на каждой странице есть слово со стрелкой, указывающей на его значение.
Я сравниваю хеши со словарями не потому, что в них можно хранить только определения — в примере выше я записал личные данные Питера, укротителя львов и любителя фланели. Хеши похожи на словари, потому что в них очень легко искать данные.
В отличие от массивов, объекты в хешах хранятся вне какой-либо последовательности.
Регулярные выражения
Регулярные выражения (или регексы) — это набор знаков, заключённых в слеши.
Регулярные выражения используются, чтобы найти слова или закономерности в тексте. Слеши с обеих сторон выражений — контакты. Представьте, что у вас есть небольшое слово с контактами по обе стороны. Вы держите его над книгой. Водите этим словом по страницам. Когда оно находит совпадение, то начинает мигать. Вы подсоединяете своё регулярное выражение к книге прямо поверх этого совпадающего слова, и оно начинает сиять своими буквами.
А когда вы втыкаете контакты в книгу, бумага отзывается громким чихом «регекс!»
Использовать регулярные выражения гораздо быстрее, чем водить самому рукой по страницам книги. Ruby может задействовать регулярные выражения, чтобы быстро прошерстить целые многотомники.
Операторы
Вы будете использовать список операторов ниже, чтобы производить в Ruby математические действия и сравнивать вещи. Просмотрите список, узнайте кое-что. Ну знаете, сложение там (+), вычитание (-) и так далее.
Ключевые слова
В Ruby есть определённое число встроенных слов, наделённых значением. Эти слова нельзя использовать как переменные или изменить под свои задачи. Некоторые из них мы уже обсудили. Ключевые слова в домике, который хорошо охраняется, друг мой. Попытаетесь их тронуть — получите формальную синтаксическую ошибку.
Пока неплохо. Итак, это были прославленные представители языка Ruby. На протяжении следующих трёх глав нас ждёт увеселительная поездка, в которой мы будем склеивать эти части речи в хитросплетённые фрагменты (трогательного) кода.
Я рекомендую вам ещё раз пройтись по всем частям речи. Позвольте себе взглянуть на них широким взглядом. В следующей части этой главы я буду проверять ваш навык низкоуровневого программирования.
3. На случай, если я недостаточно обращался с вами как с ребёнком
Я горжусь вами. Любой скажет, что я хвастаюсь вами на каждом углу. Скажет, что я вечно завожу свою волынку о великом анониме, который где-то там листает и читает, читает и листает. «Эти ребята», — говорю я. «Боже, у них большое сердце. Я и не думал…» Я не могу закончить предложение, так как начинаю рыдать.
И моё сердце сияет ярко-красным светом под моей тонкой, почти прозрачной кожей. Чтобы вывести меня из этого состояния, придётся вколоть 10 кубиков JavaScript. (Я хорошо реагирую на токсины в крови.) Да, эта дурь быстро прочистит вам мозги!
Возвращаясь к нашей теме — вы отлично успевали до этого момента. Но теперь я должен стать жестоким учителем. Мне нужны хорошие оценки от вас. До этого момента вы только и делали, что двигали глазами. Ну ладно, ранее вы изумительно читали вслух. А теперь понадобится проявить навыки в понимании прочитанного.
Прочтите вслух каждую часть речи, использованную ниже.
Возможно, вы захотите закрыть этот абзац, пока читаете — глаза могут захотеть подсмотреть ответ. У нас есть число 5, после которого стоит метод .times. Затем первые клешни краба блока. Базовый метод print не имеет точки, за ним идёт строка “Odelay!”. Клешни закрывают блок.
Прочтите вслух каждую часть речи, использованную ниже.
Также, как и print, exit — базовый метод. Если вы были достаточно внимательны на списке ключевых слов, то знаете, что unless — ключевое слово. К строке “restaurant” прикреплён метод include?. И наконец строка “aura”.
Прочтите вслух каждую часть речи, использованную ниже.
Эта гусеница явно отведала изысканные блюда. Пример начинается с массива, в котором три строки “toast”, “cheese”, “wine”. За массивом хвостом тянется метод .each.
Внутри блока его аргумент — food, путешествует по водостоку в блок. Затем метод .capitalize делает первую букву аргумента блока большой, а аргумент тем временем стал переменной food. Затем эта строка уже с большой буквы передаётся базовому методу print.
Посмотрите ещё раз на эти примеры. Удостоверьтесь, что узнаёте использованные части речи. Каждая обладает яркой индивидуальностью, не так ли? Сделайте глубокий вздох, помассируйте виски. А теперь проведём вскрытие куска кода.
4. Пример на вырост
Прочтите вслух каждую часть речи, использованную ниже.
Первая строчка — метод призыва. Здесь используется метод require, которому передаётся строка, содержащая “net/http”. Читайте первую строку как предложение. Мы сказали Ruby загрузить вспомогательный код — библиотеку Net : : HTTP.
Следующие три строки идут вместе. Константа Net : : HTTP относится к библиотеке, которую мы загрузили выше. Мы используем метод start, который в неё входит. Этому методу мы отдаём строку “www.ruby-lang.org” и число 80.
Слово do открывает блок. В этом блоке одна переменная — http. Внутри мы используем метод print. Что же печатается?
Из переменной http мы вызываем метод get, в который передаём строку, содержащую путь “/en/LICENSE.txt”. Теперь обратите внимание, что к методу get прикреплён ещё один — body. Затем блок закрывается при помощи end.
Вы там как? Просто ради интереса, можете угадать, что делает этот код? Надеюсь, вы видите кое-какие модельные структуры в Ruby. Если нет, трясите головой, держа в уме все примеры. Код должен разбиться на понятные куски.
Например, эта модель используется в коде несколько раз:
Видите её внутри этого блока:
Мы используем Ruby, чтобы открыть веб-страницу. Вы скорее всего уже использовали HTTP в своём браузере. HTTP — это протокол передачи гипертекста (Hypertext Transfer Protocol). Он используется для передачи веб-страниц по сети. Концептуализируйте: у вас есть водитель автобуса, который ездит по интернету и развозит для нас веб-страницы. На его фуражке вышиты буквы HTTP.
Переменная HTTP — как раз водитель автобуса. Метод — сообщение для водителя. Иди и достань веб-страницу с названием /en/LICENSE.txt.
Дальше мы видим цепочку методов:
Так как мы получим веб-страницу от водителя http, можете прочесть это в голове как web page. body.
Ну и этот кусочек кода:
Код достаёт нам веб-страницу. Мы посылаем сообщение body веб-странице, которая возвращает нам весь HTML в виде строки. Затем мы печатаем эту строку. Видите, как работает в цепочке модель точка-метод. Следующая глава будет посвящена изучению всех видов структурных моделей Ruby. Будет весело.
Так что же в итоге делает этот код? Выводит HTML главной страницы Ruby на экран, используя водителя автобуса с подключением к сети.
5. И так наше быстрое путешествие завершилось мягкой посадкой
А теперь у нас проблема. Мне кажется, вы слишком много радуетесь. А ведь ещё не дошли до главы, где я использую песенки, которые дети напевают, когда прыгают через скакалочку, чтобы научить вас парсировать XML!
Если вы уже получаете удовольствие от процесса, то всё идёт совсем плохо. Через две главы вы будете писать собственные программы на Ruby. Вообще-то где-то там я заставлю вас начать писать собственную ролевую игру, собственную систему обмена данными (что-то типа BitTorrent), а также программу, которая будет вытаскивать из сети по-настоящему случайные числа.
И знаете (должны знать!), это превратится в одержимость. Сначала вы забудете выгулять собаку. Она так и будет сидеть у входной двери, ворочая головой, пока ваши глаза поглощают код, пока ваши пальцы, скользя по клавиатуре, вводят послания для компьютера.
Из-за вашего невнимания начнут ломаться вещи. Холмы распечатанных страниц кода закроют вентиляцию. Вытяжка задохнётся. Начнёт копиться мусор: коробки из-под еды, заказанной наспех, макулатура и рекламные письма, которые вам было лень выкинуть. Потолок покроется мхом, закупорятся трубы, непонятные животные будут заходить как к себе домой, а деревья начнут расти прямо через фундамент.
Но ваш компьютер не будет ни в чём нуждаться. Вы напитаете его своими знаниями. За вечность, которую вы проведёте со своей машиной, ваш мозг станет центральным процессором, а компьютер — обретёт плоть. Ваши руки сразу подключатся через его порты. Ваши глаза будут распознавать сигнал прямо из разъёма DVI. Ваши лёгкие расположатся сверху процессора, охлаждая его.
И как только комната вокруг вас начнёт рушиться, как только заросли поглотят вас вместе с вашей машиной, вы закончите свой скрипт. Вы и ваша машина запустите этот новый скрипт на Ruby — результат этой одержимости. И он стартанёт бензопилы, чтобы подстричь деревья, и отопление, чтобы согреть дом. Наниты-строители вырвутся из вашего кода, восстанавливая ваше жилище, перекладывая плитку, делая ремонт, покрывая трубопровод хромом, полируя и дезинфицируя всё вокруг. Могучие андроиды силой придадут вашему разваливающемуся дому крепкую, устойчивую архитектуру. Вознесутся вверх колонны с точёными статуями. Вы же будете суверенно править этой роскошной крепостью со всеми окружающими его горами и островами.
Так что думаю, всё у вас будет хорошо.
Что скажете? Вперёд к вашему скрипту?
P.S. Если у вас внезапно возникло желание прочесть эту книгу в оригинале целиком, то ловите ссылку. Дальше ещё интереснее.
1. Книга была выложена в сеть в 2004 году.
2. Odelay — пятый студийный альбом Бека Хэнсена, выпущенный в июне 1996 года на лейбле DGC Records.
3. AT-AT — вымышленная боевая машина из вселенной «Звёздных Войн». Был значительной составляющей армии Галактической Империи, являясь одним из самых тяжелобронированных шагоходов.
Комментарии