Programming Ruby 1.9 (3rd edition): The Pragmatic Programmers' Guide / Программирование на Ruby 1.9 (3-е издание): Руководство прагматичного программиста: Ruby.New

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

В есть Ruby все обычные управляющие структуры такие как выражения <i>if</i> и циклы <i>while</i>. Программисты работающие с Java, C, и Perl могут отметить отсутствие скобок вокруг тел этих выражений. Как-бы то ни было Ruby использует ключевое слово end для выражения конца тела:

Droidos 29.10.10 в 18:15

0

В Ruby есть все обычные управляющие структуры, такие как операторы if и while. Java, C, Perl программисты могут отметить отсутствие фигурных скобок вокруг тел этих операторов. Вместо этого, Ruby использует ключевое слово end чтобы обозначить конец тела оператора:

tartuff22 16.06.11 в 12:43

0

<code>&nbsp;&nbsp;&nbsp;&nbsp;if count &gt; 10
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts "Try again"
&nbsp;&nbsp;&nbsp;&nbsp;elsif tries == 3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts "You lose"
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts "Enter a number"
&nbsp;&nbsp;&nbsp;&nbsp;end</code>

Droidos 23.09.10 в 20:27

0

Таким же образом while оканчивается вместе с end:

Droidos 29.10.10 в 18:17

0

<code>&nbsp;&nbsp;&nbsp;&nbsp;while weight &lt; 100 and num_pallets &lt;= 30
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pallet = next_pallet()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;weight += pallet.weight
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num_pallets += 1
&nbsp;&nbsp;&nbsp;&nbsp;end</code>

Droidos 23.09.10 в 20:29

0

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

Droidos 29.10.10 в 18:22

0

К примеру метод gets возвращает следующую строку из стандартного входного потока или nil когда доходит до конца файла. Так как Ruby воспринимает nil как <i>ложное</i> значение в условиях, вы можете напечатать следующие для вывода строк в файл:

Droidos 30.10.10 в 13:51

0
+1

<code>&nbsp;&nbsp;&nbsp;&nbsp;while line = gets
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts line.downcase
&nbsp;&nbsp;&nbsp;&nbsp;end</code>

Droidos 23.09.10 в 20:31

0

Здесь, оператор присвоения приравнивает переменную line либо к следующей строке текста либо к nil и потом выражение while проверяет присвоенное значение, а за тем прерывает цикл когда переменная становится равной нулю.

Droidos 31.10.10 в 18:06

0

Модификаторы выражений в Ruby имеют краткую форму если тело выражения <i>if</i> или <i>while</i> являются отдельно стоящими. Запишите выражение начав его с if или while и условия.
На пример, так выглядит простое выражение if:

Droidos 31.10.10 в 18:31

0

<code>&nbsp;&nbsp;&nbsp;&nbsp;if radiation > 3000
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts "Danger, Will Robinson"
&nbsp;&nbsp;&nbsp;&nbsp;end</code>

Droidos 19.09.10 в 20:35

0

Тоже самое с использованием модификатора выражения:

Droidos 31.10.10 в 18:42

0

<code>&nbsp;&nbsp;&nbsp;&nbsp;puts "Danger, Will Robinson" if radiation &gt; 3000</code>

Droidos 19.09.10 в 20:36

0

Аналогично цикл while:

Droidos 31.10.10 в 18:43

0

<code>&nbsp;&nbsp;&nbsp;&nbsp;square = 2
&nbsp;&nbsp;&nbsp;&nbsp;while square &lt; 1000
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;square = square*square
&nbsp;&nbsp;&nbsp;&nbsp;end</code>

Droidos 19.09.10 в 20:38

0

становится более осмысленной версией:

Droidos 31.10.10 в 19:36

0

<code>&nbsp;&nbsp;&nbsp;&nbsp;square = 2
&nbsp;&nbsp;&nbsp;&nbsp;square = square*square while square &lt; 1000</code>

Droidos 23.09.10 в 20:31

0

Такие модификаторы выражений покажутся знакомыми Perl програмистам.

Droidos 31.10.10 в 19:38

0

<b>Регулярные выражения</b>

Droidos 19.09.10 в 20:38

0

Большинство встроенных типов Ruby будут знакомы всем программистам. Большая часть языков имеют строки, числа, <strike>floats</strike>, массивы и тому подобное.
Как бы там ни было регулярные выражения <strike>типично поддерживаются</strike> (как правило) встроены в скриптовые языки такие как Ruby, Perl, и awk. Это стыдно потому что регулярные выражения <strike>все таки</strike> (хоть и выглядят сложно, однако являются) <strike>криптографические и это </strike> мощным инструментом для работы с текстом.

Droidos 03.11.10 в 15:43

0

Большинство встроенных типов Ruby будут знакомы всем программистам. В большинстве языков есть строки, числа, числа с плавающими точками, массивы и тому подобное.
Как бы там ни было регулярные выражения как правило встроены в скриптовые языки такие как Ruby, Perl, и awk. Стыдно бояться регулярных выражений, они хоть и выглядят сложно, однако являются мощными инструментами для работы с текстом.

Droidos 05.11.10 в 16:33

0

Большинство встроенных типов Ruby знакомы всем программистам. Большинство языков имеют string, integer, float, массивы и т.д. Однако, поддержка регулярных выражений обычно встроена только в скриптовые языки, такие как Ruby, Perl, awk. Это позор, потому что регулярные выражения, несмотря на загадочность, являются мощным инструментом для работы с текстом.

tartuff22 16.06.11 в 13:03

0
+2

<strike>Имеет</strike> большую разницу когда они <b>(кто они?)</b> встроенны в отличии от прикрепленных через интерфейс библиотеки.

Droidos 03.11.10 в 16:59

0

Есть большая разница между регулярными выражениями встроенными и прикрепленными через интерфейс библиотеки .

Droidos 05.11.10 в 17:02

0

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

tartuff22 16.06.11 в 13:09

0

Целые книги были написаны <strike>про</strike> (о) регулярных выражениях (к примеру Mastering Regular Expressions [Fri02]) <strike>и так</strike> (поэтому) мы не собираемся описывать все в этом коротком разделе. <strike>Как бы то ни было</strike> (Тем не менее) мы собираемся рассмотреть <strike>осмотреть</strike> несколько примеров регулярных выражений в действии. Вы найдете полное описание регулярных выражений на странице 117.

Droidos 04.11.10 в 18:26

0

Целые книги были написаны о регулярных выражениях (к примеру Mastering Regular Expressions [Fri02]) поэтому мы не собираемся описывать все в этом коротком разделе. Тем не менее мы собираемся рассмотреть несколько примеров регулярных выражений в действии. Вы найдете полное описание регулярных выражений на странице 117.

Droidos 05.11.10 в 16:37

0

Регулярные выражения это простой путь для определения шаблона символов (для поиска) <strike>введенных</strike> в строке. В Ruby вы <strike>типично</strike> (как правило) создаете регулярное выражение вписывая шаблон между слешами (/pattern/). И Ruby (остается) <strike>это все таки</strike> Ruby <strike>так как</strike> регулярные выражения <strike>это</strike> (являются) объектами которыми можно манипулировать.

Droidos 04.11.10 в 18:33

0

Регулярные выражения это простой путь для определения шаблона символов для поиска. В Ruby вы как правило создаете регулярное выражение вписывая шаблон между слешами (/pattern/). И Ruby остается Ruby регулярные выражения являются объектами которыми можно манипулировать.

Droidos 05.11.10 в 16:44

0

К примеру вы можете написать шаблон который сопоставляет строку содержащую текст Perl или Python используя данное регулярное выражение:

Droidos 04.11.10 в 19:08

0
+1

&nbsp;&nbsp;&nbsp;&nbsp;<code>/Perl|Python/</code>

Droidos 19.09.10 в 20:39

0

Прямые слеши разграничивают шаблон который содержит две соответствующие вещи и разделяются вертикальной чертой (|). Эта символ черты обозначает либо вещь справа либо вещь с лева в этом случае Perl или Python. Вы можете использовать скобки в шаблонах, так-же как в арифметических выражениях так что вы можете написать этот шаблон так:

Droidos 05.11.10 в 17:49

0

&nbsp;&nbsp;&nbsp;&nbsp;<code>/P(erl|ython)/</code>

Droidos 05.11.10 в 15:55

0

Вы также можете указать повторение в шаблоне.Строке /ab+c/ соответствует строка содержащая a и однo или более b, а за тем c. Измените плюс на знак умножения и /ab*c/ создаст регулярное выражение которое сопоставляет, один а, ноль или более b, и одно с.

Droidos 05.11.10 в 17:58

0

Вы можете еще сопоставить одну группу символов без шаблона. Несколько частых примеров символов классов типа \s, который обозначает символ пробела(space, tab, newline и подобное); \d который обозначает число и \w который выводит любой символ появляющийся в данном слове. dot ( . ) сопоставляется почти с каждым символом. Таблица с этими символами находится на странице 125.

Droidos 05.11.10 в 18:36

0

Мы можем сложить это все чтобы получить полезные регулярные выражения:

Droidos 11.11.10 в 19:17

0

<code>&nbsp;&nbsp;&nbsp;&nbsp;/\d\d:\d\d:\d\d/ # a time such as 12:34:56
&nbsp;&nbsp;&nbsp;&nbsp;/Perl.*Python/ # Perl, zero or more other chars, then Python
&nbsp;&nbsp;&nbsp;&nbsp;/Perl Python/ # Perl, a space, and Python
&nbsp;&nbsp;&nbsp;&nbsp;/Perl *Python/ # Perl, zero or more spaces, and Python
&nbsp;&nbsp;&nbsp;&nbsp;/Perl +Python/ # Perl, one or more spaces, and Python
&nbsp;&nbsp;&nbsp;&nbsp;/Perl\s+Python/ # Perl, whitespace characters, then Python
&nbsp;&nbsp;&nbsp;&nbsp;/Ruby (Perl|Python)/ # Ruby, a space, and either Perl or Python</code>

white_rabbit 19.09.10 в 14:42

0

Однажды освоив шаблоны,будет стыдно их не использовать.Оператор отожествления =~ может быть использован для отожествления строки после регулярного выражения. Если шаблон найден в строке,=~ возвращает его начальную позицию противополюжно возвращает nil. Это значит чтовы вы можеты использовать регулярные выражения как условие для выражений while . К примеру следующий фрагмент кода выводит if стоку содержащую Perl or Python:

Droidos 05.11.10 в 18:58

0

<code>&nbsp;&nbsp;&nbsp;&nbsp;if line =~ /Perl|Python/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts "Scripting language mentioned: #{line}"
&nbsp;&nbsp;&nbsp;&nbsp;end</code>

white_rabbit 19.09.10 в 14:43

0

Часть строки сопоставленная регулярным выражением может быть <strike>перемещена с</strike>(заменена) другим текстом с использованием одного из <strike>заменяющих</strike> методов (подстановки в) Ruby:

Droidos 07.11.10 в 19:01

0

Часть строки сопоставленная регулярным выражением может быть заменена другим текстом с использованием одного из методов подстановки в Ruby:

Droidos 12.11.10 в 14:38

0

<code>&nbsp;&nbsp;&nbsp;&nbsp;line.sub(/Perl/, 'Ruby') # replace first 'Perl' with 'Ruby'
&nbsp;&nbsp;&nbsp;&nbsp;line.gsub(/Python/, 'Ruby') # replace every 'Python' with 'Ruby'</code>

white_rabbit 19.09.10 в 14:48

0

Вы можете <strike>переместить</strike> (заменить) каждое <strike>случай</strike> (совпадение) Perl и Python с помощью Ruby <strike>используя это</strike> (таким образом):

Droidos 07.11.10 в 19:07

0

Вы можете заменить каждое совпадение Perl и Python с помощью Ruby таким образом:

Droidos 12.11.10 в 14:39

0

&nbsp;&nbsp;&nbsp;&nbsp;<code>line.gsub(/Perl|Python/, 'Ruby')</code>

white_rabbit 19.09.10 в 14:48

0

Мы будем еще много говорить регулярных выражениях в этой книге.

Droidos 07.11.10 в 19:08

0

<b>Блоки и итераторы</b>

white_rabbit 19.09.10 в 14:49

0

Эта секция кратко описывает одн(у из сильных сторон) <strike>о из особенностей</strike> Ruby. <strike>Мы мы</strike> имеются ввиду блоки кода: куски кода которые <strike>вы</strike> можно ассоциировать с вызовом метода точно также если бы они были параметрами. И это <strike>нереально</strike> (невероятно) мощная возможность, которую один из наших читателей прокомментировал так: "Это очень интересно и важно так что если вы не уделяли этому ни какого внимания то вам луче начать сейчас". Мы должны с этим согласится.

Droidos 07.11.10 в 19:19

0

Эта секция кратко описывает одну из сильных сторон Ruby. Мы имеем ввиду блоки кода: куски кода которые можно ассоциировать с вызовом метода точно также если бы они были параметрами. И это невероятно мощная возможность, которую один из наших читателей прокомментировал так: "Это очень интересно и важно так что если вы не уделяли этому ни какого внимания то вам луче начать сейчас". Мы должны с этим согласится.

Droidos 12.11.10 в 14:46

0

Вы можете использовать блоки кода для создания callback'ов (но они проще чем безымянные встроенные классы Java) для передачи кусков кода (но они более гибкие чем указатели функций С ) и также для создания итераторов.

Droidos 07.11.10 в 19:29

0

Блоки кода это просто куски кода между скобочками или do. . . end. Вот это блок кода:

Droidos 07.11.10 в 19:31

0

<code>&nbsp;&nbsp;&nbsp;&nbsp;{ puts "Hello" }</code>

white_rabbit 19.09.10 в 14:50

0

А также:

white_rabbit 19.09.10 в 14:51

0

<code>&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;club.enroll(person)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person.socialize
&nbsp;&nbsp;&nbsp;&nbsp;end</code>

white_rabbit 19.09.10 в 14:50

0

Почему здесь два вида разграничителей? Иногда кажется более естественным выбрать один способ а не другой. Также это может зависеть от предыдущих строк кода: скобки легче отслеживать чем пары do/end. В этой книге мы попытаемся следовать тому что становится стандартом Ruby и будем использовать скобки для одно строчных блоков и do/end для много строчных блоков.

Droidos 07.11.10 в 19:36

0

Все что вы можете делать с блоком это ассоциировать его с вызовом метода. Вы делаете все это выводя начало блока в конец линии кода содержащей метод call.

Droidos 08.11.10 в 18:48

0

К примеру в следующем коде блок содержащий puts "Hi" ассоциируемый с call для метода greet (который мы не показывали):

Droidos 08.11.10 в 19:12

0

&nbsp;&nbsp;&nbsp;&nbsp;<code>greet { puts "Hi" }</code>

white_rabbit 19.09.10 в 14:53

0

Если метод содержит параметры то они выводятся перед блоком:

Droidos 08.11.10 в 19:14

0

&nbsp;&nbsp;&nbsp;&nbsp;<code>verbose_greet("Dave", "loyal customer") { puts "Hi" }</code>

white_rabbit 19.09.10 в 14:53

0
Минутку...

← Предыдущая страница

Следующая страница →