47
47
ее значение nil, он просто печатает три точки. Нет смысла приветствовать
48
48
несуществующее, верно?
49
49
50
- ## Циклы и повторы – так же известные как итерации
50
+ ## Циклы и повторы – также известные как итерации
51
51
52
- Если объект, записанный в переменной ` @names ` откликается на метод
53
- ` each ` , значит он является объектом на котором вы можете итерировать. И
54
- итерируя по нему вы можете приветствовать каждого человека за раз. И
55
- наконец, если ` @names ` является чем-то совсем другим, просто превратим
56
- ее в строку автоматически и поприветствуем.
52
+ Если объект, записанный в переменной ` @names ` , откликается на метод
53
+ ` each ` , значит он является объектом, на котором вы можете итерировать.
54
+ И, итерируя по нему, вы можете приветствовать каждого человека за раз.
55
+ И, наконец, если переменная ` @names ` является чем-то совсем другим,
56
+ просто превратим её в строку автоматически и поприветствуем.
57
57
58
58
Давайте взглянем на итератор повнимательнее:
59
59
64
64
{% endhighlight %}
65
65
66
66
` each ` – это метод, который принимает блок кода и запускает этот блок
67
- кода для каждого элемента в списке. И в примере выше, код между ` do ` и
68
- ` end ` , это просто некий блок. Блок это что-то вроде анонимной функции
67
+ кода для каждого элемента в списке. И в примере выше код между ` do ` и
68
+ ` end ` – это просто некий блок. Блок – это что-то вроде анонимной функции
69
69
или ` лямбды ` . Переменная между знаками (|) – это параметр для данного
70
70
блока, как раз тот самый элемент списка, на которым будет производится
71
71
действие в блоке кода.
72
72
73
- Что происходит здесь, это то, что каждая запись в списке, ` name ` ,
74
- привязана к элементу в списке, и таким образом выражение `puts "Hello
73
+ Что происходит здесь, это то, что каждая запись в списке – ` name ` –
74
+ привязана к элементу в списке, и, таким образом, выражение `puts "Hello
75
75
#{name}!"` будет выполнено с этим элементом.
76
76
77
77
Большинство других языков программирования поддерживают прохождение по
@@ -86,17 +86,17 @@ for (i=0; i<number_of_elements; i++)
86
86
87
87
Это работает, но это не так элегантно. Вам нужно заводить переменную типа
88
88
` i ` , понимать, сколько элементов в списке, и объяснять языку, как он
89
- должен проходить по списку. Путь Ruby намного элегантней, все детали
90
- исполнения скрыты внутри ` each ` метода, и все что вам нужно сделать –
91
- это сказать, что нужно сделать с элементами списка. Внутри метод ` each `
92
- вызывает ` yield "Albert'", затем ` yield "Brenda"` и так далее с
89
+ должен проходить по списку. Путь Ruby намного элегантней: все детали
90
+ исполнения скрыты внутри ` each ` метода – и все что вам нужно сделать
91
+ – это сказать: что нужно сделать с элементами списка. Внутри метод
92
+ ` each ` вызывает ` yield "Albert'" ` , затем ` yield "Brenda" ` и так далее с
93
93
остальными именами.
94
94
95
- ## Блоки, прекрасные блестки на грани Ruby
95
+ ## Блоки: прекрасные блёстки на грани Ruby
96
96
97
97
Реальная сила блоков видна, когда вы работаете с более сложными
98
- сущностями, чем списки. За выполнением простых деталей внутри метода, вы
99
- также можете осуществлять там некую настройку, декомпозицию, отлавливать
98
+ сущностями, чем списки. Помимо выполнения простых деталей внутри метода,
99
+ вы также можете осуществлять там некую настройку, декомпозицию, отлавливать
100
100
ошибки – все может быть скрыто от пользователя.
101
101
102
102
{% highlight ruby %}
@@ -113,23 +113,23 @@ def say_bye
113
113
end
114
114
{% endhighlight %}
115
115
116
- Метод ` say_bye ` не использует ` each ` , вместо этого он проверяет, что
117
- ` @names ` откликается на метод ` join ` , и если так, использует его. В
118
- другом случае, он просто печатает переменную в виде строки. Этот метод
119
- не волнует настоящий * тип* переменной, просто действует в зависимости
120
- от методов, которые тот поддерживает. Это так же известно под названием
116
+ Метод ` say_bye ` не использует ` each ` – вместо этого он проверяет, что
117
+ ` @names ` откликается на метод ` join ` , и если так – использует его. В
118
+ другом случае он просто печатает переменную в виде строки. Этот метод
119
+ не волнует настоящий * тип* переменной, он просто действует в зависимости
120
+ от методов, которые тот поддерживает. Это также известно под названием
121
121
"Duck Typing" (Утиная типизация), как в известной фразе – "если оно
122
- ходит как утка, если оно крякает как утка – это утка". Выигрыш от этого
123
- в том, что вам не обязательно ограничивать типы переменных, которые
122
+ ходит как утка и крякает как утка – это утка". Выигрыш от этого в том,
123
+ что вам не обязательно ограничивать типы переменных, которые
124
124
поддерживаются. Если кто-то захочет использовать ваш метод с неким новым
125
125
классом списка, пока тот поддерживает вызов метода ` join ` с аналогичной
126
126
другим спискам семантикой – все будет работать как запланировано.
127
127
128
128
## Запускаем скрипт
129
129
130
- Итак, это был MegaGreeter класс, остальное в файле, это лишь вызовы
130
+ Итак, это был MegaGreeter класс; остальное в файле – это лишь вызовы
131
131
метода на этом классе. Последний трюк, на который стоит обратить
132
- внимание, это следующая строка:
132
+ внимание – это следующая строка:
133
133
134
134
{% highlight ruby %}
135
135
if __ FILE__ == $0
@@ -139,17 +139,17 @@ if __FILE__ == $0
139
139
файла. ` $0 ` – это имя файла, которое было использовано при запуске
140
140
программы. Данная проверка говорит: "Если это тот самый файл, который
141
141
был запущен изначально…". Это позволяет файлу быть использованным как
142
- библиотека, и не выполнять код в данном контексте. Но если файл
142
+ библиотека и не выполнять код в данном контексте. Но если файл
143
143
используется как выполняемый – тогда выполняем этот код.
144
144
145
145
## Считайте, что вы в теме
146
146
147
- Итак, это конец краткого тура по Ruby. Там еще столько для изучения,
147
+ Итак, это конец краткого тура по Ruby. Там еще столько для изучения:
148
148
различные структуры, которые предлагает Ruby; использование блоков и
149
- ` yield ` ; модули и примеси; и многое-многое другое. Я надеюсь, что эти
150
- небольшие примеры оставят в вас приятное послевкусие от Ruby и вы
149
+ ` yield ` ; модули и примеси – и многое-многое другое. Я надеюсь, что эти
150
+ небольшие примеры оставят у вас приятное послевкусие от Ruby – и вы
151
151
захотите узнать его еще лучше!
152
152
153
- Если так, пожалуйста просмотрите нашу
153
+ Если так, пожалуйста, просмотрите нашу
154
154
[ Документацию] ( /ru/documentation/ ) , которая содержит в себе ссылки на
155
- руководства и введения, все они бесплатно доступны онлайн.
155
+ руководства и введения – все они бесплатно доступны онлайн.
0 commit comments