Programming Ruby 1.9 (3rd edition): The Pragmatic Programmers' Guide / Программирование на Ruby 1.9 (3-е издание): Руководство прагматичного программиста: Ruby.New
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Для большей информации о строках, так-же как и о других вводных стандартах Ruby смотрите главу 6 о котярах начинается на далекой 106 странице. Droidos 20.10.10 в 17:34 Для большей информации о строках, а также о других стандартных типах Ruby, смотрите Главу 6, которая начинается на странице 106. tartuff22 16.06.11 в 08:00 |
|
|
Наконец, мы могли бы упростить этот метод еще немного. Значение, возвращаемое методом Ruby является значением последнего вычисленного выражения, поэтому мы можем избавиться от временных переменных и возвращении выражения вообще: Droidos 20.10.10 в 17:40 Наконец, мы могли бы упростить этот метод еще немного. Значение, возвращаемое методом Ruby является значением последнего вычисленного выражения, поэтому мы вообще можем избавиться от временной переменной и оператора return: tartuff22 16.06.11 в 08:04 Наконец, мы могли бы упростить этот метод еще немного. Значение, возвращаемое методом Ruby является значением последнего вычисленного выражения, поэтому мы вообще можем избавиться от временной переменной и оператора return: tartuff22 16.06.11 в 08:05 |
||
|
<code>def say_goodnight(name)</code> white_rabbit 19.09.10 в 11:20 |
||
|
Выводит Droidos 25.10.10 в 13:16 |
||
|
<code>Good night, Ma</code> white_rabbit 19.09.10 в 11:21 |
||
|
Мы обещали, что этот раздел будет кратким. У нас есть еще одна тема для обсуждения: Ruby имена. Для краткости мы будем использовать некоторые термины (например, переменная класса),те что мы не собираемся определять здесь.Однако, говорить о правилах сейчас, вы будете перед игрой, когда мы действительно приходят, чтобы обсудить переменных класса и, как позже. Droidos 21.10.10 в 19:15 Мы обещали, что этот раздел будет кратким. Мы должны рассмотреть еще одну тему: Ruby names. Для краткости, будем использовать некоторые термины (такие как "переменная класса"), которые здесь не будут объясняться. Однако, говоря о правилах сейчас, вы будете во всеоружии, когда мы позже действительно подойдем к обсуждению переменных класса и т.п. tartuff22 16.06.11 в 08:21 |
||
|
Ruby использует соглашения,которые могут показаться странными на первый взгляд: первые буквы названия указывают, на то как используется имя. Локальные переменные, параметры методов, и имена методов должны начинаться со строчной буквы или с символа подчеркивания. Глобальные переменные имеют префикс в виде знака доллара ($), и переменные экземпляра начинаются со знака коммерческого а (@). Переменные класса начинаются с двух знаков коммерческого а (@@) ( мы говорим глобальных и переменных класса лиш для полноты ,далее вы обнаружите что, они редко используются в программах Ruby. Существует много доказательств того, что глобальные переменные делают программы трудно поддерживаемыми. Переменные класса не так опасны, темнемение их не так часто используют.). Наконец, имена классов, имена модулей и констант должны начинаться с заглавной буквы. Образцы различных имен указаны в таблице 2.1 на следующей странице. После такого первоначального символа, в имя может быть включено любое сочетание букв, цифр и подчеркиваний (при условии, что символ, следующий за знаком @ не может быть цифрой). Однако, согласно правилам, составные переменные экземпляра, записываются с подчеркиванием между словами, и составные имена классов записываются в смешаном регистре ( каждое слово капитализируется). Имена методов могут заканчиваться символами : ?,!, и =. Droidos 23.10.10 в 12:13 Ruby использует соглашение, которое сначала может показаться странным: первый символ имени показывает как имя используется. Локальные переменные, параметры методов и имена методов должны начинаться с маленькой буквы или с подчеркивания. Глобальные переменные начинаются с префикса ($), а переменные экземпляра с символа @ ("at"). Переменные класса начинаются с @@. (И хотя мы говорим здесь о глобальных переменных и переменных класса для полноты описания, вы увидите, что они редко используются в программах Ruby. Существует много доказательств того, что глобальные переменные делают программы сложными для поддержки. Переменные класса не так опасны - но их стараются не использовать.). tartuff22 16.06.11 в 08:57 |
+1 | |
|
<b>Массивы и хеши</b> white_rabbit 19.09.10 в 12:53 |
||
|
Массивы и хэши в Ruby индексированы в коллекции. Оба хранилища коллекций объектов, доступны с помощью ключа. У массивов, ключ является целым числом, а хэши поддерживают любой объект в качестве ключа.Как массив так и хэш увеличиваются по мере добавления в них новых элементов. У массивов более эффективный способ доступ к элементам, но хэши обеспечивают большую гибкость. Любой конкретный массив или хэш может содержать объекты разных типов,у вас может быть массив, содержащий целое число, строку, и число с плавающей точкой. Droidos 23.10.10 в 12:34 Массивы и хэши Ruby являются индексированными коллекциями. Оба хранят коллекции объектов, доступных по ключу. В массивах ключ является целым числом, тогда как хэши поддерживают любой объект в качестве ключа. Оба растут при добавлении новых элементов. Более эффективен доступ к элементам массива, но хэши предоставляют большую гибкость. Как мы увидим через минуту, любой массив или хэш может содержать объекты разных типов; у вас может массив, содержащий целое число, строку и число с плавающей запятой. tartuff22 16.06.11 в 09:16 |
||
|
Вы можете создать и инициализировать новый объект массива с помощью литерала масива - набор элементов, заключенных в квадратные скобки. Создав объект массива, вы можете получить доступ к отдельным элементам, подставляя индексы в квадратных скобках, как показывает следующий пример. Отметим, что индексы массива Ruby начинаются с нуля. Droidos 23.10.10 в 13:15 |
||
|
<code> a = [ 1, 'cat', 3.14 ] # array with three elements white_rabbit 19.09.10 в 11:21 |
||
|
выводит: Droidos 23.10.10 в 13:53 |
||
|
The first element is 1 Droidos 27.10.10 в 17:33 |
||
|
The array is now [1, "cat", nil] Droidos 23.10.10 в 14:57 |
||
|
Возможно, вы заметили, что мы использовали специальное значение nil в этом примере. Во многих языках, концепция nil (или null) означает "нет объекта". В Ruby, это не так; nil является объектом, как и любой другой,даже тот который ничего не представляет. Так или иначе, давайте вернемся к массивам и хэшам. Droidos 23.10.10 в 15:00 Возможно, вы заметили, что мы использовали специальное значение nil в этом примере. Во многих языках, концепция nil (или null) означает "нет объекта". В Ruby, это не так; nil является объектом, как и любой другой, который, оказываетя, представляет "ничто" ('nothing'). Так или иначе, давайте вернемся к массивам и хэшам. tartuff22 16.06.11 в 09:30 Возможно, вы заметили, что мы использовали специальное значение nil в этом примере. Во многих языках, концепция nil (или null) означает "нет объекта". В Ruby, это не так; nil является объектом, как и любой другой, который, оказываетя, представляет "ничто" ('nothing'). Так или иначе, давайте вернемся к массивам и хэшам. tartuff22 16.06.11 в 09:30 |
||
|
Таблица 2.1. Примеры имен переменных и классов Droidos 25.10.10 в 13:13 |
||
|
<table border="0" cellpadding="0" cellspacing="0" width="600px"> white_rabbit 19.09.10 в 13:25 |
||
|
Синтаксис создания массивов со всеми кавычками и запятыми в некоторых случаях является слишком громоздким. Droidos 23.10.10 в 15:02 |
+1 | |
|
К счастью, в Ruby есть краткая форма: %w она делает то что нам надо: Droidos 23.10.10 в 15:02 |
+2 | |
|
<code> a = [ 'ant', 'bee', 'cat', 'dog', 'elk' ] white_rabbit 19.09.10 в 12:51 |
||
|
Хеши в Ruby сходны с массивами. Хеши используют литералы фигурных скобок а не квадратных скобок. Droidos 23.10.10 в 15:09 Хеши в Ruby сходны с массивами. Литерал хэша использует фигурные скобки вместо квадратных скобок. tartuff22 16.06.11 в 09:33 |
||
|
Литерал должен предоставить два объекта для каждого элемента: один для ключа, другой в качестве значения. Droidos 23.10.10 в 15:10 |
||
|
Ключ и значение, как правило, разделяются с помощью =>. Droidos 23.10.10 в 15:11 |
||
|
К примеру, вы хотите соединить инструменты с их оркестральными секциями. Вы можете сделать это с помощью хеша: Droidos 23.10.10 в 17:08 Например, вы можете отобразить музыкальные инструменты на их оркестровые разделы. Вы могли бы сделать это при помощи хеша: tartuff22 16.06.11 в 09:47 |
||
|
<code> inst_section = { white_rabbit 19.09.10 в 14:40 |
||
|
То что слева от =>; является ключом, а то что справа сообщаемым значением. Ключ в каждом хеше должен быть уникальным, вы не можете иметь две записи для "drum". Ключ и значение в хеше могут быть произвольными объектами, вы можете иметь хэши, где значениями являются массивы, другие хэши, и так далее. Droidos 25.10.10 в 12:13 То, что слева от =>, является ключем, а то, что справа - соответствующим значением. Ключи в хеше должны быть уникальны - вы не можете иметь два вхождения для "drum". Ключи и значения в хеше могут быть произвольными объектами - у вас могут хеши, в которых значениями являются массивы, другие хеши и т.д. tartuff22 16.06.11 в 10:07 |
+1 | |
|
Хеши индексируются с использованием тех-же квадратных скобок как и массивы. В этом коде мы будем использовать метод р для вывода значений в консоль.Этот метод работает также как и puts, но выводит значения такие как ноль. Droidos 25.10.10 в 13:21 Хеши индексируются с использованием тех же квадратных скобок как и массивы. В этом коде мы будем использовать метод р для вывода значений в консоль. Этот метод работает также как и puts, но явно выводит значения такие как nil. tartuff22 16.06.11 в 10:11 |
+1 | |
|
<code> p inst_section['oboe'] Droidos 19.09.10 в 18:15 |
||
|
Выводит Droidos 25.10.10 в 13:22 |
||
|
<code> "woodwind" Droidos 19.09.10 в 18:27 |
||
|
Как показано в предыдущем примере, если хэш индексируется с помощью отсутствующего ключа то он по умолчанию возвращает nil. Обычно это удобно по тому что nil обозначает<i>ложь</i> когда используются в условных выражениях. Иногда вам может понадобится сменить это значение по умолчанию. К примеру если вы используете хеш для того чтобы посчитать сколько раз каждое слово появляется в файле, удобно когда есть стандартное значение равное нулю. Также вы можете использовать слово как ключ, просто увеличивая сообщаемое значение хеша и не беспокоясь видели ли вы это слово до этого. Это легко сделать задавая стандартное значение когда вы создаете новый пустой хеш.(Полный код считателя периодичности слов находится на странице 72.) Droidos 28.10.10 в 09:28 Как показано в предыдущем примере, хеш по умолчанию возвращает nil при попытке получить значение по ключу, которого в хеше нет. Обычно это удобно, потому что nil означает false, когда используется в условных выражениях. Иногда вы можете захотеть изменить это значение по умолчанию. Например, если вы используете хеш, чтобы подсчитать, сколько раз каждое слово встречается в файле, удобно иметь значение по умолчанию 0. Тогда вы можете использовать слово как ключ и просто увеличивать соответствующее хеш-значение не беспокоясь о том, видели ли вы это слово до этого. Это легко можно сделать определяя значение по умолчанию при создании нового, пустого хеша. (Полный листинг "счетчика" на странице 72.) tartuff22 16.06.11 в 11:50 |
+1 | |
|
<code> histogram = Hash.new(0) # The default value is zero Droidos 19.09.10 в 18:16 |
||
|
У объектов массивов и хешей есть множество полезных методов; смотрите обсуждение на странице 67, и опорные секции начинающиеся на страницах 447 и 533 для деталей. Droidos 28.10.10 в 18:18 |
+1 | |
|
<b>Символы</b> Droidos 26.10.10 в 13:57 |
||
|
Часто при программировании необходимо придумывать название для чего-то важного. Например, вы захотели обратиться к точкам на компасе по имени, поэтому написали следующее: aist 19.09.10 в 12:35 |
||
|
<code> NORTH = 1 aist 19.09.10 в 12:36 |
||
|
Теперь вы можете использовать в своей программе эти константы, а не числа: aist 19.09.10 в 12:37 |
||
|
<code> walk(NORTH) aist 19.09.10 в 12:38 |
||
|
Большую часть времени, текущие числовые значения этих констант не имеют значения(пока они уникальны). Все что вам нужно это различать эти четыре направления. Droidos 28.10.10 в 18:39 |
||
|
Ruby предлагает ясную альтернативу. Символы являются просто именами констант которые вы не должны предварительно объявлять и которые гарантировано будут уникальны. Droidos 28.10.10 в 18:47 Символьный литерал начинается с двоеточия и обычно сопровождается некоторым именем. tartuff22 16.06.11 в 12:03 Ruby предлагает более чистую альтернативу. Идентификаторы являются просто именами констант, которые вы не должны объявлять заранее и которые гарантированно уникальны. Литерал идентификатора начинается с двоеточия и обычно сопровождается некоторым именем. tartuff22 16.06.11 в 12:23 |
||
|
<code> walk(:north) Droidos 19.09.10 в 21:37 |
||
|
Здесь нет необходимости назначить какое-то значение символа, Ruby заботится об этом за вас. Ruby также гарантирует, что независимо от того, где он появляется в вашей программе, только символ будет иметь то же значение. То есть, вы можете написать следующее: Droidos 26.10.10 в 14:23 Нет необходимости присваивать значение идентификатору - Ruby позаботится об этом. Ruby также гарантирует, что независимо от того, где идентификатор появляется в вашей программе, его значение будет тем же самым. Т.е., вы можете написать следующее: tartuff22 16.06.11 в 12:18 |
||
|
<code> def walk(direction) Droidos 23.09.10 в 20:12 |
||
|
Символы часто используются в качестве ключей в хешах. Мы могли бы написать в нашем предыдущем примере, вот так: Droidos 26.10.10 в 14:23 |
+1 | |
|
<code> inst_section = { Droidos 23.09.10 в 20:11 |
||
|
Фактически, символы на столько часто использовались как ключи хешей что Ruby 1.9 представляет новый синтаксис - вы можете использовать имя: пары значений для создания хеша 1.9 если ключи являются символами: Droidos 29.10.10 в 17:09 Фактически, идентификаторы так часто использовались как хеш-ключи, что Ruby 1.9 вводит новый синтаксис - вы можете использовать пары "имя: значение" чтобы создать хеш 1.9, если ключи являются идентификаторами. tartuff22 16.06.11 в 12:31 |
||
|
<code> inst_section = { Droidos 23.09.10 в 20:26 |
||
|
Выводит: Droidos 26.10.10 в 14:26 |
||
|
An oboe is a woodwind Droidos 29.10.10 в 17:37 |
||
|
<b>Управляющие структуры</b> Droidos 29.10.10 в 16:59 |
