Так что же сейчас произошло? Вот, мы смогли обойти каждый из объектов в массиве совсем без использования номеров, и это определённо приятно. В переводе на русский, приведённую выше программу можно прочитать примерно так: для каждого (each) объекта в languages, пусть переменная lang указывает на этот объект и затем выполнится (do) всё, что я скажу вам, пока вы не дойдёте до конца (end). (Чтобы вы знали: C++ это ещё один язык программирования. Его гораздо труднее изучить, чем Ruby; обычно, программа на C++ будет во много раз длиннее, чем программа на Ruby, которая делает то же самое.) Вы, должно быть, думаете: «Это очень похоже на циклы, о которых мы узнали до этого». Ну да, похоже. Одно важное отличие заключается в том, что метод each – это просто-напросто метод. while и end (также как do, if, else и все другие синие слова) это не методы. Они являются основополагающей частью языка Ruby, как и операция = или скобки; они похожи на знаки пунктуации в английском [или русском –
Но не each; each – это просто ещё один метод массива. Такие методы, как each, которые «ведут себя как» циклы, часто называют итераторами.
Нужно отметить ещё одну вещь об итераторах: за ними всегда следует do…end. Около while и if никогда не бывает do; мы используем do только с итераторами.
А вот другой маленький симпатичный итератор, но это не метод массива… Это метод целого числа!
3.times do
puts 'Гип-гип-ура!' end
Гип-гип-ура! Гип-гип-ура!
Другие методы массивов
Итак, мы изучили each, но у массивов есть много других методов… почти столько же много, как методов у строк! В сущности, некоторые из них (такие, как length, reverse, + и *) работают так же, как и со строками, только они оперируют с ячейками массива, а не с буквами в строке. Другие, например, last и join, характерны только для массивов. Третьи, такие как push и pop, фактически изменяют массив. И так же, как с методами строк, вам не нужно помнить их все, покуда вы помните, где можно узнать о них (прямо здесь).
Сначала давайте взглянем на to_s и join. Метод join работает во многом схоже с методом to__ s, за исключением того, что он добавляет строку между объектами массива. Давайте посмотрим:
foods = ['артишок',
'бриошь',
'карамель']
puts foods
puts
puts foods.to s
puts
puts foods.join(',
')
puts
puts foods.join('
:) ') + '
8) '
200.times do
puts[]
end
артишок
бриошь
карамель
артишокбриошькарамель
артишок, бриошь, карамель
артишок :) бриошь :) карамель 8)
Как видите, метод puts обращается с массивами не так, как с другими объектами: он просто вызывает puts для каждого из объектов в массиве. Вот почему вывод через puts пустого массива 200 раз ничего не делает: массив ни на что не указывает, так что нечего выводить с помощью puts. (Ничего не делать 200 раз – значит всё равно ничего не делать.) Попробуйте вывести методом puts массив, содержащий другие массивы: он делает то, что вы ожидали?
Кроме того, вы заметили, что я не употреблял в puts пустые строки, когда хотел вывести чистую строку? Получилось то же самое.
Теперь давайте посмотрим на push, pop и last. Методы push и pop в каком-то смысле противоположны, как + и -. push добавляет объект в конец вашего массива, а pop удаляет последний объект из массива (и сообщает вам, что это был за объект). last похож на pop в том, что он сообщает вам, что находится в конце массива, только он оставляет массив нетронутым. Повторю снова: push и pop действительно изменяют массив:
favorites = []
favorites.push
'капли дождя на розах'
favorites.push
'капли виски на котах'
puts
favorites[0]
puts
favorites
. last
puts
favorites
.length
puts
favorites
.pop
puts
favorites
puts
favorites
.length
капли
дождя
на
розах
капли
виски
на
котах
2
капли
виски
на
котах
капли
дождя
на
розах
1
Попробуйте ещё кое-что
• Напишите программу, о которой мы говорили в самом начале этой главы.
Подсказка: Есть прекрасный метод массива, который вернёт вам отсортированную версию массива: sort. Используйте его!
• Попробуйте написать указанную программу без использования метода sort. Большая часть программирования – это преодоление сложностей, так что практикуйтесь чаще, насколько это возможно!
• Перепишите вашу программу «Содержание» (из главы о методах). Начните программу с массива, содержащего всю информацию для вашей таблицы с содержанием (названия глав, номера страниц и т. д.). Затем напечатайте информацию из массива в виде красиво отформатированного содержания.
До сих пор мы изучили довольно много разных методов. А сейчас пора научиться, как сделать свои собственные.
8. Пишем свои методы