Читаем Учись программировать полностью

Вот почти что и всё, что можно сказать об этом! Нет, подождите секундочку… Я же не рассказал вам обо всех этих классах, которые выполняют самые разнообразные вещи: отправляют электронную почту, сохраняют и загружают файлы на ваш компьютер, или же создают окна и кнопки (и даже 3-хмерные миры) и всё прочее! Что ж, попросту имеется настолько много классов, которые вы можете использовать, что мне никак невозможно показать вам их все; я даже не знаю, что большинство из них из себя представляют! А что я могу сказать вам о них, так это то, где можно разузнать о них поподробнее, чтобы вы смогли изучить те из них, которые вы захотите применить в ваших программах. Однако, прежде, чем вы отправитесь на самостоятельное изучение, вам ещё следует узнать о других важных особенностях Ruby, которых нет в большинстве других языков, но без которых я просто не смог бы жить: о блоках и процедурных объектах.

<p>10. Блоки и процедурные объекты</p>

Это определённо одна из самых крутых возможностей Ruby. В некоторых других языках тоже есть такие возможности, хотя они могут называться как-нибудь по- другому (например, замыкания), но в большинстве даже более популярных языков, к их стыду, они отсутствуют.

Так что же это за новая крутая возможность? Это способность принимать блок кода (то есть код между do и end), обёртывать его в объект (называемый процедурным объектом или proc по-английски), сохранять его в переменной или передавать его в метод, а затем исполнять код этого блока, когда бы вы ни пожелали (более одного раза, если хотите). Таким образом, блок напоминает настоящий метод за исключением того, что он не привязан ни к какому объекту (он сам является объектом), и вы можете сохранять его или передавать его как параметр подобно тому, как вы это делаете с любым другим объектом. Думаю, настало время привести пример:

toast = Proc

.new do

puts 'Ваше

здоровье! '

end

toast.call

toast.call

toast.call

Ваше здоровье!

Ваше здоровье!

Ваше здоровье!

Итак, я создал объект proc (это название, полагаю, означает сокращение от «procedure», т. е. «процедура», но гораздо более важно, что оно рифмуется с «block»), который содержит блок кода, затем я с помощью call вызвал proc–объект три раза. Как видите, это очень напоминает метод.

На самом деле, это даже более походит на метод, чем в показанном мной примере, так как блоки могут принимать параметры:

doYouLike = Proc.new do |aGoodThing|

puts 'Я *действительно* люблю '+aGoodThing+'!' end

doYouLike.call 'шоколад' doYouLike.call 'рубин'

Я *действительно* люблю шоколад!

Я *действительно* люблю рубин!

Хорошо, вот мы узнали, что из себя представляют блоки и ргос-и читается: «проки»

[Прим. перев.], и как их можно использовать, но в чём же здесь дело? Почему бы просто не использовать методы? Ну потому, что некоторые вещи вы просто не сможете сделать с помощью методов. В частности, вы не можете передавать методы в другие методы (но вы можете передавать в методы процедурные объекты), и методы не могут возвращать другие методы (но они могут возвращать ргос-объекты). Это возможно просто потому, что ргос-и являются объектами, а методы – нет.

(Между прочим, вам это не кажется знакомым? Вот-вот, вы уже видели блоки раньше… когда вы изучали итераторы. Но давайте поговорим об этом ещё чуточку попозже.)

Методы, принимающие процедурные объекты

Когда мы передаём процедурный объект в метод, мы можем управлять тем, как, в каком случае или сколько раз мы вызываем ргос-объект. Например, имеется, скажем, нечто, что мы хотим сделать перед и после выполнения некоторого кода:

def doSelflmportantly someProc

puts 'Всем немедленно ЗАМЕРЕТЬ!

Мне нужно кое-что сделать…'

someProc.call

puts 'Внимание всем, я закончил.

Продолжайте выполнять свои дела.'

end

sayHello = Proc.new do

puts 'привет'

end

sayGoodbye = Proc.new do

puts 'пока'

end

doSelflmportantly sayHello

doSelflmportantly sayGoodbye

Всем немедленно ЗАМЕРЕТЬ! Мне нужно кое-что сделать… привет Внимание всем, я закончил. Продолжайте выполнять свои дела. Всем немедленно ЗАМЕРЕТЬ! Мне нужно кое-что сделать… пока

Внимание всем, я закончил. Продолжайте выполнять свои дела.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных