Ну что, приступим?

Этот темный прямоугольник - Учебник Хакети-Хак. Нажми Дальше, и начнем!

Управление Учебником

Пока мы не начали, взгляни на кнопки сверху.

Назад. !icon-tutor-back.png! вернет тебя на страницу назад.
Стоп. !icon-tutor-stop.png! запомнит, до какого места ты дошел, и закроет учебник.
Вперед. !icon-tutor-fwd.png! как и ссылка Дальше, переходит к следующей странице.

Как вернуться в учебник

Нажатие на кнопку !icon-tutor-stop.png! "Стоп" приостановит обучение. Чтобы вернуться в учебник, просто нажми на лампочку наверху Хакети-Хак. Ты сразу вернешься в урок, на котором остановился. Попробуй прямо сейчас.

Ладно, хватит. Давай хакать...

Урок Один: Спроси и Сохрани

Начнем с очень простой программы.

  • Нажми ссылку Начать новую программу (внизу, в главной белой части Ха-Ха.)

Урок 1A: Спроси

Перепиши вот эту программу в большое белое поле:

# Спрашиваем и говорим
name = ask("Как тебя зовут?")
puts(name)

Нажми Запуск, как только закончишь.

Урок 1A: Ну, что произошло?

Код, который ты написал - это программа на языке Ruby, родном языке Хакети-Хака.

Взгляни-ка на программу. Понятно, как она работает? Как думаешь, что делает команда ask? А для чего нужно слово name?

Урок 1А: Остановимся на этом

Теперь программу нужно Сохранить. Назовем ее Вопрос.

Теперь нажми на логотип Хакети-Хак, чтобы вернуться в главное меню (или на иконку домика на панели вверху).

Урок 1А: Программы, которые ты сохранил

Обрати внимание, что твоя программа теперь есть в списке Сохраненные программы. Там должно быть написано ее название - Вопрос, а под ним - описание: Спрашиваем и говорим. Отлично!

Урок 1А: Замечание о сохранении

В первой строке программы написан короткий комментарий. Комментарии начинаются со знака решетки. Ruby не обращает внимания на комментарии.

Зато Хакети-Хак проверяет начало программы, и если там есть комментарий, он будет считаться описанием. Спасибо, Хакети-Хак'''

Урок 1А: Как работает "Вопрос"

Команда ask, которую мы используем в части А, показывает окошко, в которое пользователь программы может что-нибудь ввести. То что он введет, передается обратно в программу. В части А, ты записал введенный текст в переменную name.

А как Ruby догадался, что ask - это команда, а name - переменная? Он понял это по их положению в "предложениях" твоего кода. Например, переменные создаются при помощи знака "равно". Поскольку после name стоит "равно", значит это переменная.

name = ask("Как тебя зовут?")

Программирование - это, по большей части, просто придумывание правильного порядка вещей.

МЕЖДУ ПРОЧИМ: попробуй заменить вопрос на что-то более неприятное. Пусть твоя программа станет сердитой.

Урок 1Б: Говорим

Нажми на имя своей программы - Вопрос - чтобы вернуться к редактированию. Попробуем сделать с именем еще кое-что.

А вот и новая программа (первые 2 строчки - те же самые):

# Спрашиваем и говорим
name = ask("Как тебя зовут?")
say("В твоем имени #{name.length} букв")
sleep(name.length())

Аккуратно перепиши ее. Обрати внимание, что в кавычах есть знак решетки и фигурные скобки. (Фигурные скобки находятся на тех же клавишах, что и квадратные.)

Урок 1Б: Переписал?

Нажми Сохранить, чтобы сохранить все это. А теперь - Запуск.

Посмотри на вращающуюся полоску внизу. Заметил, что надпись над ней изменилась? Команда say изменяет надпись прямо над полоской!

== Урок 1Б: А зачем это?

Команда say очень полезна - ведь можно сообщить что-нибудь пользователю программы, пока он ждет. Можно сказать посылаем почту или загружаем mp3 или просто тратим время... - смотря что твоя программа делает. Это просто, но это же всего первый урок!

Урок 1Б: Сонное царство

Теперь обрати внимание на команду sleep. Крутящаяся полоска исчезнет, когда программа закончит работу, поэтому команда sleep делает паузу на несколько секунд, чтобы ты успел увидеть полоску и буквы.

Не станем пока объяснять все остальное, но ты можешь запустить программу еще пару раз и попробовать разобраться:

  • Что делает name.length?
  • Зачем оно окружено такой штукой? #{....}

Урок 1В: Считаем

А теперь опять оставь первые две строчки программы, а после них напиши вот это:

# Спрашиваем и говорим
name = ask("Как тебя зовут?")
1.upto(name.length) do |x|
  say "В твоем имени #{x} букв"
  sleep 1
end
sleep 10

Обрати внимание на вертикальные черточки в этой программе. В конце третьей строки написано |x|. Две палочки вокруг x - словно горка, по которой соскальзывает x. Вертикальная черточка - как раз над Enter'ом. Нужно нажать Shift и эту клавишу, чтобы набрать черточку. (Русскоязычные пользователи, не забудьте переключиться в английскую раскладку!)

Урок 1В: upto

upto - обычная команда, такая точно как ask и say. Но зачем перед ней точка? Почему она приклеена к цифре 1?

У каждой команды есть перед и зад. Перед команды может быть приклеен к чему-нибудь с помощью точки. Зад команды может быть приклеен к чему-нибудь с помощью скобок.

1.upto(6) do |x|
 say("Покажи #{x} пальцев.")
 sleep 1
end

Команда upto - это часть любого числа. В нашем случае, она часть числа 1. Представь, что это злая собака, которую хозяин держит за поводок. Точка - это и есть поводок.

Урок 1В: Собака Upto

1.upto(6) do |x|

Вернемся к нашей собаке! Скобки - это рот собаки, которая съела число шесть. Что нужно запомнить: команды принадлежат тем, кто слева от точки. И съедают все, что в скобках. Это дает команде силы, чтобы делать ее работу!! Как Педигри Пал.

"Чего?".upto(6)

Смотри, это не сработает. Потому что у строки в кавычках просто нет собаки по имени upto. upto - только для счета!!

Мы хотим посчитать от 1 до 6 (по английски это будет "1 up to 6"). Очень просто прочесть (для тех, кто знает английский).

Первый урок окончен!

Сейчас у тебя, наверное, куча вопросов, и тебе кажется, что осталась куча всего непонятного. Конечно, осталась! Нельзя же узнать все сразу. Зато кое-что ты узнал:

  • Команды делают всякие штуки - как собаки делают всякие штуки.
  • Переменные сохраняют штуки.
  • Переменную можно создать с помощью знака равно. Так Ruby поймет, что это переменная!
  • Команды принадлежат тем, кто слева от точки.
  • Команды съедают все, что в скобках, как печенье.
  • С командами ask, say, sleep и upto мы немножко разобрались.

Это уже очень хорошо. Отдохни, похвали себя, и пусть все что ты узнал, хорошенько усвоится.

МЕЖДУ ПРОЧИМ: Если хочешь стать еще немножко умнее, попробуй написать такую программу, чтобы текст мигал. Для этого можно использовать команды say и sleep!

Урок Два: Выходим погулять

В Уроке Один мы кое-что спросили и кое-что сказали. Неплохо, неплохо. Но не очень-то полезно, да? Может, заставим компьютер что-нибудь сделать?

Например: давай-ка выглянем на улицу и напишем программу, которая может работать с Интернетом.

Урок 2А: Загрузка

Начни новую программу. (Нажми на иконку с листком на панели инструментов. Она вторая слева.)

# Простой загрузчик файлов.
url = ask("Введите Веб-адрес:")
save_as = ask("Сохранить в файл с именем:")
Web.download(url, save_as)

Сохрани программу как Загрузчик.

Урок 2А: Запуск программы

Эта программа задает два вопроса. В первом окошке с вопросом, нужно набрать какой-нибудь адрес файла в Интернете. Как насчет песенки "Pinball Number Count" Дэда Хенсона?

  http://www.deadhensons.com/media/pinball_clip.mp3

Во втором окошке нужно ввести имя для загруженного файла. Например:

  pinball.mp3

Что делает эта программа? Можешь сказать это, глядя на код?

Урок 2А: Куда девается файл?

Ты видел, как файл загрузился, так? Теперь надо бы найти, куда. Хакети-Хак хранит загруженные файлы в одной папке, рядом с сохраненными тобой программами. Поищем ее!

 %HACKETY_USER%

Перейди в эту папку с помощью Проводника Windows. Можно просто скопировать путь и вставить его в поле пути в Проводнике. Или начать с "Моего Компьютера" и дойти до этой папки.

Урок 2А: Папка с твоими хаками

Теперь ты должен видеть несколько файлов с именами, заканчивающимися на ".rb", и папку под названием Downloads. Вот! Каждый ".rb"-файл - одна из твоих программ. Это настоящие Ruby-программы, которыми ты можешь обмениваться с другими Хакети-хакерами. А если кто-нибудь пришлет тебе свою программу, ты можешь положить ее в эту папку и она появится в Хакети-Хаке!

А теперь загляни в папку Downloads. Отлично! Так держать.

Урок 2А: Библиотека "Web"

Чтобы загрузить MP3, мы использовали команду Web.download. Это обычная команда, такая же как ask и say, только она - часть библиотеки команд "Web" в Хакети-Хаке. (В Ruby, команды еще называются методами. Это так, к слову.)

Для пущей аккуратности, некоторые команды хранятся в библиотеках. Штуки вроде Web.fetch, Web.page и Web.download вроде как относятся к Интернету, поэтому и хранятся в библиотеке Web.

Урок 2А: Насчет твоей собственной библиотеки

В следующих уроках я покажу, как делать свои собственные библиотеки, и как использовать библиотеки других хакеров. Таким образом, в Хакети-Хаке могут использоваться новые команды, которых в нем изначально не было

МЕЖДУ ПРОЧИМ: В Хакети-Хаке есть команда ask_save_file() - это особая разновидность ask. Попробуй-ка изменить третью строку своей программы, используя эту команду.

To be continued…