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 В Ruby есть все обычные управляющие структуры, такие как операторы if и while. Java, C, Perl программисты могут отметить отсутствие фигурных скобок вокруг тел этих операторов. Вместо этого, Ruby использует ключевое слово end чтобы обозначить конец тела оператора: tartuff22 16.06.11 в 12:43 |
|
|
<code> if count > 10 Droidos 23.09.10 в 20:27 |
||
|
Таким же образом while оканчивается вместе с end: Droidos 29.10.10 в 18:17 |
||
|
<code> while weight < 100 and num_pallets <= 30 Droidos 23.09.10 в 20:29 |
||
|
Большинство выражений в Ruby возвращают значение, что обозначает возможность их использования в качестве условий. Droidos 29.10.10 в 18:22 |
||
|
К примеру метод gets возвращает следующую строку из стандартного входного потока или nil когда доходит до конца файла. Так как Ruby воспринимает nil как <i>ложное</i> значение в условиях, вы можете напечатать следующие для вывода строк в файл: Droidos 30.10.10 в 13:51 |
+1 | |
|
<code> while line = gets Droidos 23.09.10 в 20:31 |
||
|
Здесь, оператор присвоения приравнивает переменную line либо к следующей строке текста либо к nil и потом выражение while проверяет присвоенное значение, а за тем прерывает цикл когда переменная становится равной нулю. Droidos 31.10.10 в 18:06 |
||
|
Модификаторы выражений в Ruby имеют краткую форму если тело выражения <i>if</i> или <i>while</i> являются отдельно стоящими. Запишите выражение начав его с if или while и условия. Droidos 31.10.10 в 18:31 |
||
|
<code> if radiation > 3000 Droidos 19.09.10 в 20:35 |
||
|
Тоже самое с использованием модификатора выражения: Droidos 31.10.10 в 18:42 |
||
|
<code> puts "Danger, Will Robinson" if radiation > 3000</code> Droidos 19.09.10 в 20:36 |
||
|
Аналогично цикл while: Droidos 31.10.10 в 18:43 |
||
|
<code> square = 2 Droidos 19.09.10 в 20:38 |
||
|
становится более осмысленной версией: Droidos 31.10.10 в 19:36 |
||
|
<code> square = 2 Droidos 23.09.10 в 20:31 |
||
|
Такие модификаторы выражений покажутся знакомыми Perl програмистам. Droidos 31.10.10 в 19:38 |
||
|
<b>Регулярные выражения</b> Droidos 19.09.10 в 20:38 |
||
|
Большинство встроенных типов Ruby будут знакомы всем программистам. Большая часть языков имеют строки, числа, <strike>floats</strike>, массивы и тому подобное. Droidos 03.11.10 в 15:43 Большинство встроенных типов Ruby будут знакомы всем программистам. В большинстве языков есть строки, числа, числа с плавающими точками, массивы и тому подобное. Droidos 05.11.10 в 16:33 Большинство встроенных типов Ruby знакомы всем программистам. Большинство языков имеют string, integer, float, массивы и т.д. Однако, поддержка регулярных выражений обычно встроена только в скриптовые языки, такие как Ruby, Perl, awk. Это позор, потому что регулярные выражения, несмотря на загадочность, являются мощным инструментом для работы с текстом. tartuff22 16.06.11 в 13:03 |
+2 | |
|
<strike>Имеет</strike> большую разницу когда они <b>(кто они?)</b> встроенны в отличии от прикрепленных через интерфейс библиотеки. Droidos 03.11.10 в 16:59 Есть большая разница между регулярными выражениями встроенными и прикрепленными через интерфейс библиотеки . Droidos 05.11.10 в 17:02 Большая разница в том, что поддержка регулярных выражений встроена, а не прикреплена через интерфейс библиотеки. tartuff22 16.06.11 в 13:09 |
||
|
Целые книги были написаны <strike>про</strike> (о) регулярных выражениях (к примеру Mastering Regular Expressions [Fri02]) <strike>и так</strike> (поэтому) мы не собираемся описывать все в этом коротком разделе. <strike>Как бы то ни было</strike> (Тем не менее) мы собираемся рассмотреть <strike>осмотреть</strike> несколько примеров регулярных выражений в действии. Вы найдете полное описание регулярных выражений на странице 117. Droidos 04.11.10 в 18:26 Целые книги были написаны о регулярных выражениях (к примеру Mastering Regular Expressions [Fri02]) поэтому мы не собираемся описывать все в этом коротком разделе. Тем не менее мы собираемся рассмотреть несколько примеров регулярных выражений в действии. Вы найдете полное описание регулярных выражений на странице 117. Droidos 05.11.10 в 16:37 |
||
|
Регулярные выражения это простой путь для определения шаблона символов (для поиска) <strike>введенных</strike> в строке. В Ruby вы <strike>типично</strike> (как правило) создаете регулярное выражение вписывая шаблон между слешами (/pattern/). И Ruby (остается) <strike>это все таки</strike> Ruby <strike>так как</strike> регулярные выражения <strike>это</strike> (являются) объектами которыми можно манипулировать. Droidos 04.11.10 в 18:33 Регулярные выражения это простой путь для определения шаблона символов для поиска. В Ruby вы как правило создаете регулярное выражение вписывая шаблон между слешами (/pattern/). И Ruby остается Ruby регулярные выражения являются объектами которыми можно манипулировать. Droidos 05.11.10 в 16:44 |
||
|
К примеру вы можете написать шаблон который сопоставляет строку содержащую текст Perl или Python используя данное регулярное выражение: Droidos 04.11.10 в 19:08 |
+1 | |
|
<code>/Perl|Python/</code> Droidos 19.09.10 в 20:39 |
||
|
Прямые слеши разграничивают шаблон который содержит две соответствующие вещи и разделяются вертикальной чертой (|). Эта символ черты обозначает либо вещь справа либо вещь с лева в этом случае Perl или Python. Вы можете использовать скобки в шаблонах, так-же как в арифметических выражениях так что вы можете написать этот шаблон так: Droidos 05.11.10 в 17:49 |
||
|
<code>/P(erl|ython)/</code> Droidos 05.11.10 в 15:55 |
||
|
Вы также можете указать повторение в шаблоне.Строке /ab+c/ соответствует строка содержащая a и однo или более b, а за тем c. Измените плюс на знак умножения и /ab*c/ создаст регулярное выражение которое сопоставляет, один а, ноль или более b, и одно с. Droidos 05.11.10 в 17:58 |
||
|
Вы можете еще сопоставить одну группу символов без шаблона. Несколько частых примеров символов классов типа \s, который обозначает символ пробела(space, tab, newline и подобное); \d который обозначает число и \w который выводит любой символ появляющийся в данном слове. dot ( . ) сопоставляется почти с каждым символом. Таблица с этими символами находится на странице 125. Droidos 05.11.10 в 18:36 |
||
|
Мы можем сложить это все чтобы получить полезные регулярные выражения: Droidos 11.11.10 в 19:17 |
||
|
<code> /\d\d:\d\d:\d\d/ # a time such as 12:34:56 white_rabbit 19.09.10 в 14:42 |
||
|
Однажды освоив шаблоны,будет стыдно их не использовать.Оператор отожествления =~ может быть использован для отожествления строки после регулярного выражения. Если шаблон найден в строке,=~ возвращает его начальную позицию противополюжно возвращает nil. Это значит чтовы вы можеты использовать регулярные выражения как условие для выражений while . К примеру следующий фрагмент кода выводит if стоку содержащую Perl or Python: Droidos 05.11.10 в 18:58 |
||
|
<code> if line =~ /Perl|Python/ white_rabbit 19.09.10 в 14:43 |
||
|
Часть строки сопоставленная регулярным выражением может быть <strike>перемещена с</strike>(заменена) другим текстом с использованием одного из <strike>заменяющих</strike> методов (подстановки в) Ruby: Droidos 07.11.10 в 19:01 Часть строки сопоставленная регулярным выражением может быть заменена другим текстом с использованием одного из методов подстановки в Ruby: Droidos 12.11.10 в 14:38 |
||
|
<code> line.sub(/Perl/, 'Ruby') # replace first 'Perl' with 'Ruby' white_rabbit 19.09.10 в 14:48 |
||
|
Вы можете <strike>переместить</strike> (заменить) каждое <strike>случай</strike> (совпадение) Perl и Python с помощью Ruby <strike>используя это</strike> (таким образом): Droidos 07.11.10 в 19:07 Вы можете заменить каждое совпадение Perl и Python с помощью Ruby таким образом: Droidos 12.11.10 в 14:39 |
||
|
<code>line.gsub(/Perl|Python/, 'Ruby')</code> white_rabbit 19.09.10 в 14:48 |
||
|
Мы будем еще много говорить регулярных выражениях в этой книге. Droidos 07.11.10 в 19:08 |
||
|
<b>Блоки и итераторы</b> white_rabbit 19.09.10 в 14:49 |
||
|
Эта секция кратко описывает одн(у из сильных сторон) <strike>о из особенностей</strike> Ruby. <strike>Мы мы</strike> имеются ввиду блоки кода: куски кода которые <strike>вы</strike> можно ассоциировать с вызовом метода точно также если бы они были параметрами. И это <strike>нереально</strike> (невероятно) мощная возможность, которую один из наших читателей прокомментировал так: "Это очень интересно и важно так что если вы не уделяли этому ни какого внимания то вам луче начать сейчас". Мы должны с этим согласится. Droidos 07.11.10 в 19:19 Эта секция кратко описывает одну из сильных сторон Ruby. Мы имеем ввиду блоки кода: куски кода которые можно ассоциировать с вызовом метода точно также если бы они были параметрами. И это невероятно мощная возможность, которую один из наших читателей прокомментировал так: "Это очень интересно и важно так что если вы не уделяли этому ни какого внимания то вам луче начать сейчас". Мы должны с этим согласится. Droidos 12.11.10 в 14:46 |
||
|
Вы можете использовать блоки кода для создания callback'ов (но они проще чем безымянные встроенные классы Java) для передачи кусков кода (но они более гибкие чем указатели функций С ) и также для создания итераторов. Droidos 07.11.10 в 19:29 |
||
|
Блоки кода это просто куски кода между скобочками или do. . . end. Вот это блок кода: Droidos 07.11.10 в 19:31 |
||
|
<code> { puts "Hello" }</code> white_rabbit 19.09.10 в 14:50 |
||
|
А также: white_rabbit 19.09.10 в 14:51 |
||
|
<code> do white_rabbit 19.09.10 в 14:50 |
||
|
Почему здесь два вида разграничителей? Иногда кажется более естественным выбрать один способ а не другой. Также это может зависеть от предыдущих строк кода: скобки легче отслеживать чем пары do/end. В этой книге мы попытаемся следовать тому что становится стандартом Ruby и будем использовать скобки для одно строчных блоков и do/end для много строчных блоков. Droidos 07.11.10 в 19:36 |
||
|
Все что вы можете делать с блоком это ассоциировать его с вызовом метода. Вы делаете все это выводя начало блока в конец линии кода содержащей метод call. Droidos 08.11.10 в 18:48 |
||
|
К примеру в следующем коде блок содержащий puts "Hi" ассоциируемый с call для метода greet (который мы не показывали): Droidos 08.11.10 в 19:12 |
||
|
<code>greet { puts "Hi" }</code> white_rabbit 19.09.10 в 14:53 |
||
|
Если метод содержит параметры то они выводятся перед блоком: Droidos 08.11.10 в 19:14 |
||
|
<code>verbose_greet("Dave", "loyal customer") { puts "Hi" }</code> white_rabbit 19.09.10 в 14:53 |
