Зверёк Харьковский (zverok_kha) wrote in pguide_ru,
Зверёк Харьковский
zverok_kha
pguide_ru

3.2 - части речи (окончание)

окончание перевода главы 3.2. начало, продолжение

Блоки

Любой код, окруженный фигурными скобками — это блок.

Например, 2.times { print "Да, однажды я использовал хрустящий бекон в примере, но никогда больше!" }.

Блоки позволяют сгруппировать несколько комманд, так что их можно будет передавать дальше по всей программе. Фигурные скобки очень похожи на крабьи клешни, которые ухватили код и держат его. Как видишь две клешни — вспомни, что код между ними спресован в единое целое.

Блоки похожи на детские сувениры, которые продаются в супермаркетах — малюсенькие карандашики и микроскопическая бумага упакованы в такую маленькую прозрачную коробочку, что ее можно спрятать в ладонь; правда, блоки не требуют так щуриться для того чтобы их разглядеть.

Фигурные скобки можно заменить словами do и end — так красивее, если блок занимает больше одной строки.

 loop do
   print "Намного лучше." 
   print "Ах. Простор!" 
   print "От этих крабьих клешней спина разламывалась." 
 end

Аргументы блоков

Аргументы блока — набор переменных, окруженных вертикальными чертами и разделенных запятыми.

Например, |x|, |x,y|, и |up, down, all_around|.

Аргументы блока используются в его начале.

{ |x,y| x + y }

В этом примере, |x,y| — аргументы. После аргументов идет немножко когда. Выражение x + y складывает аргументы.

Мне нравится думать, что вертикальные черточки похожи на туннель — похоже, что это желоб, по которому переменные соскальзывают вниз (x раскорячился, а y держит ноги вместе). Этот желоб — способ сообщения между блоком и миром вокруг него.

Через этот желоб (или туннель) переменные передаются в блок.

(— У меня нет жены. Нет детей. Не останется наследства. Единственное, что мир запомнит обо мне — хрустящий бекон.
— М-да.)

Диапазон

Диапазон  — это два значения, окруженных круглыми скобками и разделенных многоточием (двумя или тремя точками).

(1..3) — диапазон, представляющий числа от 1 до 3.

('a'..'z') — диапазон, представляющий строчные буквы английского алфавита.

Представь его как аккордеон, меха которого соединены для переноски (конечно, для того, чтобы почувствовать собственную значимость, можно ходить повсюду с расдвинутым аккордеоном, но все равно иногда приходится отдавать должное скромности и следить за компактностью своего багажа). Скобки — это ручки компактного аккордеона, а точки — цепочка, удерживающая его в таком положении.

Обычно используют две точки. Если добавить третью, последнее значение будет исключено из диапазона.

(0...5) — диапазон чисел от 0 до 4.

Когда видишь третью точку — представь себе чуть-чуть приоткрытый аккордеон. Достаточно для того, чтобы одна нотка прозвучала. Эта нотка — и есть последнее значение. Пусть его поглотит небо.

Массивы

Массив — это список, окруженный квадратными скобками и разделенный запятыми.

[1, 2, 3] — массив чисел.

['coat', 'mittens', 'snowboard'] — массив строк.

Представь гусеницу, приколотую в твоем коде. Квадратные скобки — это скрепки, которыми гусеница закреплена, чтобы можно было разобраться, где голова, а где хвост. Запятые — ноги гусеницы, торчащие между секций ее тела.

Жила-была гусеница с запятыми вместо ног. Поэтому ей приходилось делать паузу после каждого шага. Другие гусеницы очень уважали ее и сделали своим главарем. О, она был еще и филантроп! Она был известна тем, что делилась свежими листьями с менее удачливыми гусеницами.

В общем, массив — это набор каких-то штук, только он еще и сохраняет порядок, в котором лежат эти штуки.

Хеши

Хеш — это словарь, окруженный фигурными скобками. Словари сопоставляют слова с их определениями. В Руби это делается с помощью стрелочек, составленных из знаков «равно» и «больше».

Например, {'a' => 'aardvark', 'b' => 'badger'}.

В этот раз фигурные скобки — это как маленькие книжки. Видишь, они похожи на маленькие сильно открытые книжки? Они обозначают открытие и закрытие нашего словаря.

Представь себе словарь с определением на каждой странице. Запятые — это уголки страниц, которые мы переворачиваем, чтобы увидеть следующее определение. Одно на каждой странице: слово, а за ним стрелочка указывает на определение.

{
 'имя' => 'Петр',
 'профессия' => 'дрессировщик львов',
 'большая любовь' => 'фланель'
}

Я не сравниваю хеши со словарями, потому что определения можно хранить только в словаре. В предыдущем примере, я храню личную информацию о Петре, дрессировщике львов, влюбленном во фланель. Хеши похожи на словари, потому что в них очень легко что-нибудь найти.

В отличие от массивов, элементы в хеше хранятся без какого-то определенного порядка. (прим.перев.: для Руби 1.9 это уже неверно — хеши в нем сохраняют порядок элементов)


(1: — Меня начинает тяготить этот комикс. Он тут везде будет вставляться?
— Как орешки?
2: (молчат)
3: — Может быть, если мы будем молчать, все это исчезнет?)

Регулярные выражения

Регулярное выражение (или «регексп», «regexp», «regular expression») — набор символов, окруженный слешами.

Например, /ruby/, /[0-9]+/ и /^\d{3}-\d{3}-\d{4}/.

Регулярные выражения используются для поиска слов или фрагментов текста. Слеши по обе стороны — это штырьки.

Представь себе маленькое слово со штырьками с каждой стороны и держи его над книгой. Проводишь словом над книгой, и когда оно оказывается над соответствующим словом, оно мигает. Ты прикрепляешь регулярное выражение к книге, как раз над совпадением, и оно сияет буквами совпавшего слова.

Хм, ну и когда ты втыкаешь штырьки в книгу, бумага чихает: «рег-експ»!

Регулярные выражения намного быстрее, чем водить пальцем по строчкам. Руби может использовать регулярные выражения, чтобы очень быстро искать в целых томах книг.

Операторы

Вот эти операторы ты будешь использовать в Руби для математики или чтобы сравнивать разные штуки. Просмотри список, запомни хоть несколько — ну, вроде сложения +, вычитания − и всякое такое.

  ** !  ~  *  /  %  +  -  &  
  << >> |  ^  >  >= <  <= <=>
  || != =~ !~ && += -= == ===
  .. ... not and or

Ключевые слова

В Руби есть несколько встроенных слов, насыщенных значением. Эти слова нельзя использовать как переменные или изменить их значение в своих интересах. Некоторые мы уже обсуждали. Они в домике, дружище. Только тронь их — и тут же получишь официальную синтаксическую ошибку.

  alias   and     BEGIN   begin   break   case    class   def     defined 
  do      else    elsif   END     end     ensure  false   for     if 
  in      module  next    nil     not     or      redo    rescue  retry 
  return  self    super   then    true    undef   unless  until   when 
  while   yield

Ну и ладненько. Это и есть знаменитые части языка Руби. В следующих главах мы нальем достаточно киселя, чтобы склеить эти части в хитрые кусочки (трогательного) кода.

Рекомендую просмотреть части речи еще раз. Улови общий вид. Я тебя проверю в следующем разделе.


(1: — Ты заметил, что этак книгу вообще написана лунатиком?
— Угу.
2: — Серьезно, он слишком гиперактивный. Если мы поддержим этот безумный темп, он быстро сгорит.
3: — Сгорит? Он собирается выстрелить себе в голову, как только ему исполнится 30!)

  • Post a new comment

    Error

    default userpic
  • 6 comments

Deleted comment

Отличная работа! Наконец-то я нашел адекватный перевод хотя бы части этой замечательной книги. Продолжайте в том же духе, вы делаете важное дело.
Я подумал немного и решил предложить свою помощь. Думаю, несмотря на постоянную нехватку времени, я могу переводить/редактировать по небольшому отрывку раз в неделю и присылать вам.
Привет, спсаибо на добром слове.

За предложение помощи тоже спасибо — но в таком формате я вынужден от него отказаться. Ещё после попытки участвовать в этом коллективном проекте перевода я понял, что чужие переводы мне не нравятся, а чем редактировать чужое — проще перевести самому.

Если действительно хотите помочь, то вот что действительно нужно:
1. врисовывать переводы прямо в комиксы (подбирая соответствующие шрифты, правда, учитывая специфическую стилистику _why’я, это будет нелегко :)
2. читать свежие переводы и комментировать на тему «Х звучит непонятно, а У — просто хреново»
3. впрочем, достаточно просто пинать меня в комментах время от времени на тему «где следующий кусок?», потому что в последнее время жызнь складывается так, что новый кусочек появляется только когда это сообщество обнаруживает новый человек и начинает благодарить за «то, что я делаю» (тут мне становится стыдно, что я на самом-то деле ничего и не делаю :)
Хорошо. Редактировать комиксы у меня скорее всего терпения не хватит, а вот комментарии писать - это я всегда готов :)