You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<td>объявление функции <br /> незаметная ошибка: без = используется процедурный стиль объявления, в котором возвращаемый тип обязательно "Unit". Это может ввести в заблуждение, избегайте такой стиль</td>
44
+
<td>объявление функции <br /> незаметная ошибка: без = это процедура с возвращаемым типом "Unit". Такое может ввести в заблуждение</td>
<td><code class="highlighter-rouge">(1 to 5).map(_*2)</code> vs.<br /> <code class="highlighter-rouge">(1 to 5).reduceLeft( _+_ )</code></td>
64
-
<td>анонимная функция: квантификатор (подчеркивание) означает что на это место подставляется каждый элемент из диапазона (от 1 до 5).</td>
64
+
<td>анонимная функция: подчеркивание указывает место подставляемого элемента.</td>
65
65
</tr>
66
66
<tr>
67
67
<td><code class="highlighter-rouge">(1 to 5).map( x => x*x )</code></td>
68
-
<td>анонимная функция: слева от => задается имя для подставляемого элемента, которое мы можем в дальнейшем переиспользовать</td>
68
+
<td>анонимная функция: слева от => задается имя подставляемого элемента, чтоб его можно было переиспользовать</td>
69
69
</tr>
70
70
<tr>
71
71
<td><span class="label success">Хорошо</span><br> <code class="highlighter-rouge">(1 to 5).map(2*)</code><br /> <span class="label important">Плохо</span><br> <code class="highlighter-rouge">(1 to 5).map(*2)</code></td>
72
-
<td>анонимная функция: связанный инфиксный метод. Ради четкого понимания лучше использовать явное указание позиции подставляемого элемента в стиле <code class="highlighter-rouge">2*_</code>.</td>
72
+
<td>анонимная функция: запись с использованием инфиксного стиля. Ради четкого понимания лучше использовать явное указание позиции подставляемого элемента в стиле <code class="highlighter-rouge">2*_</code>.</td>
73
73
</tr>
74
74
<tr>
75
75
<td><code class="highlighter-rouge">(1 to 5).map { x => val y=x*2; println(y); y }</code></td>
<td><code class="highlighter-rouge">1 to 5</code> <em>тоже что и</em> <code class="highlighter-rouge">1 until 6</code> <br /> <code class="highlighter-rouge">1 to 10 by 2</code></td>
<td>for представление: работает через набор функции с filter/map</td>
210
+
<td>for-выражение: выражается набором с filter/map</td>
211
211
</tr>
212
212
<tr>
213
213
<td><codeclass="highlighter-rouge">for ((x,y) <- xs zip ys) yield x*y</code>
214
214
<br><em><strong>тоже что и</strong></em><br>
215
215
<codeclass="highlighter-rouge">(xs zip ys) map { case (x,y) => x*y }</code></td>
216
-
<td>for представление: когда слева от <- стоит шаблон (в данном случае это набор из 2х элементов x, y), то происходит распаковка по этому шаблону</td>
216
+
<td>for-выражение: извлечение элементов с последующим вычислением</td>
217
217
</tr>
218
218
<tr>
219
219
<td><codeclass="highlighter-rouge">for (x <- xs; y <- ys) yield x*y</code>
<td><preclass="highlight"><code>for (i <- 1 to 5) {
232
232
println(i)
233
233
}</code></pre></td>
234
-
<td>for представление: обход диапазона (от 1 до 5) включая его верхнюю границу </td>
234
+
<td>for-выражение: обход диапазона (от 1 до 5) включая его верхнюю границу </td>
235
235
</tr>
236
236
<tr>
237
237
<td><preclass="highlight"><code>for (i <- 1 until 5) {
238
238
println(i)
239
239
}</code></pre></td>
240
-
<td>for представление: обход диапазона (от 1 до 5) не включая его верхнюю границу</td>
240
+
<td>for-выражение: обход диапазона (от 1 до 5) не включая его верхнюю границу</td>
241
241
</tr>
242
242
<tr>
243
-
<td><spanid="pattern_matching"class="h2">проверка по шаблону</span></td>
243
+
<td><spanid="pattern_matching"class="h2">сопоставление с примером</span></td>
244
244
<td> </td>
245
245
</tr>
246
246
<tr>
247
247
<td><spanclass="label success">Хорошо</span><br> <codeclass="highlighter-rouge">(xs zip ys) map { case (x,y) => x*y }</code><br /> <spanclass="label important">Плохо</span><br> <codeclass="highlighter-rouge">(xs zip ys) map( (x,y) => x*y )</code></td>
248
-
<td>используйте ключевое слово case при передачи аргументов в функцию для проверки по шаблону.</td>
248
+
<td>используйте ключевое слово case при передачи аргументов в функцию для запуска механизма сопоставления с примером.</td>
249
249
</tr>
250
250
<tr>
251
251
<td><spanclass="label important">Плохо</span><br>
@@ -254,7 +254,7 @@ Some(3) match {
254
254
case Some(v42) => println("42")
255
255
case _ => println("Not 42")
256
256
}</code></pre></td>
257
-
<td>“v42” интерпретировано как имя для <b>новой</b> константы любого типа, поэтому “42” выведено.</td>
257
+
<td>“v42” интерпретировано как имя для <b>новой</b> константы любого типа, поэтому напечатано “42”.</td>
258
258
</tr>
259
259
<tr>
260
260
<td><spanclass="label success">Хорошо</span><br>
@@ -263,7 +263,7 @@ Some(3) match {
263
263
case Some(`v42`) => println("42")
264
264
case _ => println("Not 42")
265
265
}</code></pre></td>
266
-
<td>”`v42`” с обратными кавычками интерпретируется как указание на значение существующей константы <codeclass="highlighter-rouge">v42</code>, отображается “Not 42”.</td>
266
+
<td>”`v42`” с обратными кавычками интерпретируется как указание на значение существующей константы <codeclass="highlighter-rouge">v42</code>, напечатано “Not 42”.</td>
267
267
</tr>
268
268
<tr>
269
269
<td><spanclass="label success">Хорошо</span><br>
@@ -272,7 +272,7 @@ Some(3) match {
272
272
case Some(UppercaseVal) => println("42")
273
273
case _ => println("Not 42")
274
274
}</code></pre></td>
275
-
<td><codeclass="highlighter-rouge">UppercaseVal</code> однако константы, имена которых начинаются с заглавной буквы, в проверке по шаблону проверяются на совпадение значения. Поэтому при проверке <codeclass="highlighter-rouge">UppercaseVal</code> на совпадение с <codeclass="highlighter-rouge">3</code>, выводится “Not 42”.</td>
275
+
<td><codeclass="highlighter-rouge">UppercaseVal</code> однако константы, имена которых начинаются с заглавной буквы, сопоставляются по значению. Поэтому при сопоставлении <codeclass="highlighter-rouge">UppercaseVal</code> с <codeclass="highlighter-rouge">3</code>, выводится “Not 42”.</td>
276
276
</tr>
277
277
<tr>
278
278
<td><spanid="object_orientation"class="h2">Работа с объектами</span></td>
@@ -302,19 +302,19 @@ Some(3) match {
302
302
</tr>
303
303
<tr>
304
304
<td><codeclass="highlighter-rouge">abstract class D { ... }</code></td>
305
-
<td>задание абстрактного класса (не создаваемого, только наследуемого)</td>
305
+
<td>объявление абстрактного класса (не создаваемого, только наследуемого)</td>
306
306
</tr>
307
307
<tr>
308
308
<td><codeclass="highlighter-rouge">class C extends D { ... }</code></td>
<td>наследование класса с конструированием параметров. </td>
314
314
</tr>
315
315
<tr>
316
316
<td><codeclass="highlighter-rouge">object O extends D { ... }</code></td>
317
-
<td>задание объекта существующего в единственном экземпляре (сингэлтон) на основе другого класса.</td>
317
+
<td>объявление объекта одиночки (Singleton) на основе другого класса.</td>
318
318
</tr>
319
319
<tr>
320
320
<td><codeclass="highlighter-rouge">trait T { ... }</code><br /><codeclass="highlighter-rouge">class C extends T { ... }</code><br /><codeclass="highlighter-rouge">class C extends D with T { ... }</code></td>
@@ -327,15 +327,15 @@ Some(3) match {
327
327
</tr>
328
328
<tr>
329
329
<td><codeclass="highlighter-rouge">class C extends D { override def f = ...}</code></td>
330
-
<td>во избежании ошибок при наследовании и создании методов с одинаковыми названиями необходимо указывать override.</td>
330
+
<td>при наследовании и создании методов с одинаковыми именами необходимо указывать override.</td>
<td>ошибка: List - это абстрактный класс<br />вместо этого используйте объект List (вызываемый без new) который создает новые классы типа List</td>
338
+
<td>ошибка: List - это абстрактный класс<br />вместо этого по соглашению обычно используется объект с именем как у абстрактного типа, который уже создает классы</td>
0 commit comments