Skip to content

Commit 036132c

Browse files
committed
🎨 Improving style
Took 2 hours 46 minutes
1 parent 52ba933 commit 036132c

8 files changed

+48
-48
lines changed

_ru/tour/abstract-type-members.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ prerequisite-knowledge: variance, upper-type-bound
1414

1515
---
1616

17-
Абстрактные типы, такие как трейты и абстрактные классы, которые могут содержать членов абстрактного типа.
18-
Это означает, что только конкретный экземпляр определяет, каким именно будет этот тип.
17+
Абстрактные типы, такие как трейты и абстрактные классы, могут содержать членов абстрактного типа.
18+
Абстрактный означает, что только конкретный экземпляр определяет, каким именно будет тип.
1919
Вот пример:
2020

2121
```tut
@@ -24,7 +24,7 @@ trait Buffer {
2424
val element: T
2525
}
2626
```
27-
Здесь мы определили абстрактный вариант тип `T`, который используется для описания типа `element`. Мы можем расширить его в абстрактном классе, добавив верхнюю границу связанного с `T` типа, чтобы сделать его более конкретным.
27+
Здесь мы определили абстрактный тип `T`, который используется для описания типа члена `element`. Мы можем расширить его в абстрактном классе, добавив верхнюю границу нового типа `U` связанного с `T`, делая описание типа более конкретным.
2828

2929
```tut
3030
abstract class SeqBuffer extends Buffer {
@@ -33,9 +33,9 @@ abstract class SeqBuffer extends Buffer {
3333
def length = element.length
3434
}
3535
```
36-
Обратите внимание, как мы можем использовать еще один абстрактный тип `type U` в качестве верхней границы типа. Класс `SeqBuffer` позволяет хранить в буфере только последовательности, указывая, что тип `T` должен быть подтипом `Seq[U]` для нового абстрактного типа `U`.
36+
Обратите внимание, как мы можем использовать новый абстрактный тип `U` в качестве верхней границы типа. Класс `SeqBuffer` позволяет хранить в буфере только последовательности, указывая, что тип `T` должен быть подтипом `Seq[U]` для нового абстрактного типа `U`.
3737

38-
[Трейты](traits.html) или [классы](classes.html) с абстрактными членами типа часто используются в сочетании с анонимными экземплярами классов. Чтобы проиллюстрировать это рассмотрим программу, которая имеет дело с буфером, который ссылается на список целых чисел:
38+
[Трейты](traits.html) или [классы](classes.html) с членами абстрактного типа часто используются в сочетании с анонимными экземплярами классов. Чтобы проиллюстрировать это рассмотрим программу, которая имеет дело с буфером, который ссылается на список целых чисел:
3939

4040
```tut
4141
abstract class IntSeqBuffer extends SeqBuffer {
@@ -52,9 +52,9 @@ val buf = newIntSeqBuf(7, 8)
5252
println("length = " + buf.length)
5353
println("content = " + buf.element)
5454
```
55-
Здесь класс `newIntSeqBuf` является создателем экземпляров `IntSeqBuffer`, использует анонимную реализацию класса `IntSeqBuffer` (т.е. `new IntSeqBuffer`), устанавливая тип `T` как `List[Int]`.
55+
Здесь класс `newIntSeqBuf` создает экземпляры `IntSeqBuffer`, используя анонимную реализацию класса `IntSeqBuffer` (т.е. `new IntSeqBuffer`), устанавливая тип `T` как `List[Int]`.
5656

57-
Мы можем выводить тип класса из типа его членов и наоборот наоборот. Приведем версию кода, в которой выводится тип класса из типа его члена:
57+
Мы можем вывести тип класса из типа его членов и наоборот. Приведем версию кода, в которой выводится тип класса из типа его члена:
5858

5959
```tut
6060
abstract class Buffer[+T] {
@@ -74,4 +74,4 @@ println("length = " + buf.length)
7474
println("content = " + buf.element)
7575
```
7676

77-
Обратите внимание, что здесь нам необходимо использовать [вариантность в описании типа](variances.html) (`+T <: Seq[U]`) для того, чтобы скрыть конкретный тип реализации последовательности объектов, возвращаемых из метода `newIntSeqBuf`.
77+
Обратите внимание, что здесь необходимо использовать [вариантность в описании типа](variances.html) (`+T <: Seq[U]`) для того, чтобы скрыть конкретный тип реализации списка, возвращаемого из метода `newIntSeqBuf`.

_ru/tour/annotations.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,14 @@ def factorial(x: Int): Int = {
5757

5858

5959
## Аннотации, влияющие на генерацию кода
60-
Некоторые аннотации типа `@inline` влияют на сгенерированный код (т.е. ваш jar-файл может иметь другой код, чем если бы вы не использовали аннотацию). Такая аннотация означает вставку всего кода в тело метода вместо вызова. Полученный байт-код длиннее, но, надеюсь, работает быстрее. Использование аннотации `@inline` не гарантирует, что метод будет встроен, но заставит компилятор сделать это, если и только если будут соблюдены некоторые практические требования к размеру сгенерированного кода.
60+
Некоторые аннотации типа `@inline` влияют на сгенерированный код (т.е. в результате сам код вашего jar-файл может отличаться). Такая аннотация означает вставку всего кода в тело метода вместо вызова. Полученный байт-код длиннее, но, надеюсь, работает быстрее. Использование аннотации `@inline` не гарантирует, что метод будет встроен, но заставит компилятор сделать это, если и только если будут соблюдены некоторые разумные требования к размеру сгенерированного кода.
6161

6262
### Java аннотации ###
6363
Есть некоторые отличий синтаксиса аннотаций, если пишется Scala код, который взаимодействует с Java.
6464

6565
**Примечание:**Убедитесь, что вы используете опцию `-target:jvm-1.8` с аннотациями Java.
6666

67-
Java имеет определяемые пользователем метаданные в виде [аннотаций](https://docs.oracle.com/javase/tutorial/java/annotations/). Ключевой особенностью аннотаций является то, что они полагаются на указание пар ключ-значение для инициализации своих элементов. Например, если нам нужна аннотация для отслеживания источника какого-то класса, мы можем определить её как
67+
Java имеет определяемые пользователем метаданные в виде [аннотаций](https://docs.oracle.com/javase/tutorial/java/annotations/). Ключевой особенностью аннотаций является то, что они задаются в виде пар ключ-значение для инициализации своих элементов. Например, если нам нужна аннотация для отслеживания источника какого-то класса, мы можем определить её как
6868

6969
```
7070
@interface Source {
@@ -98,7 +98,7 @@ class MyScalaClass ...
9898
}
9999
```
100100

101-
А затем использовать следующим образом
101+
А затем можно использовать следующим образом
102102

103103
```
104104
@SourceURL("http://coders.com/")
@@ -112,7 +112,7 @@ public class MyClass extends HisClass ...
112112
class MyScalaClass ...
113113
```
114114

115-
Элемент `mail` был указан со значением по умолчанию, поэтому нам не нужно явно указывать его значение. Однако, если нам нужно это сделать, мы не можем смешивать эти два стиля в Java:
115+
Элемент `mail` был указан со значением по умолчанию, поэтому нам не нужно явно указывать его значение. Мы не можем смешивать эти два стиля в Java:
116116

117117
```
118118
@SourceURL(value = "http://coders.com/",

_ru/tour/basics.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ previous-page: tour-of-scala
2626
Это простой способ поэкспериментировать со Scala кодом без всяких настроек.
2727

2828
Большинство примеров кода в этой документации также интегрированы с ScalaFiddle,
29-
поэтому вы можете непосредственно поэкспериментировать с ними, просто нажав кнопку Run.
29+
поэтому вы можете поэкспериментировать с ними, просто нажав кнопку Run.
3030

3131
## Выражения
3232

@@ -47,7 +47,7 @@ println("Hello," + " world!") // Hello, world!
4747

4848
### Значения
4949

50-
Результаты выражений можно назвать с помощью ключевого слова `val`.
50+
Результаты выражений можно присваивать именам с помощью ключевого слова `val`.
5151

5252
```tut
5353
val x = 1 + 1
@@ -63,7 +63,7 @@ println(x) // 2
6363
x = 3 // Не компилируется.
6464
```
6565

66-
Типы значений могут быть выведены автоматически, но вы также можете явно указать тип, как показано ниже:
66+
Типы значений могут быть выведены автоматически, но можно и явно указать тип, как показано ниже:
6767

6868
```tut
6969
val x: Int = 1 + 1
@@ -73,15 +73,15 @@ val x: Int = 1 + 1
7373

7474
### Переменные
7575

76-
Переменные похожи на значения константы, за исключением того, что их можно переназначить заново. Вы можете объявить переменную с помощью ключевого слова `var`.
76+
Переменные похожи на значения константы, за исключением того, что их можно присваивать заново. Вы можете объявить переменную с помощью ключевого слова `var`.
7777

7878
```tut
7979
var x = 1 + 1
8080
x = 3 // Компилируется потому что "x" объявлен с ключевым словом "var".
8181
println(x * x) // 9
8282
```
8383

84-
Как и в случае со значениями, вы можете явно указать тип, если хотите:
84+
Как и в случае со значениями, вы можете явно указать тип, если захотите:
8585

8686
```tut
8787
var x: Int = 1 + 1
@@ -190,7 +190,7 @@ class Greeter(prefix: String, suffix: String) {
190190
println(prefix + name + suffix)
191191
}
192192
```
193-
Возвращаемый тип метода `greet` это `Unit`, используется тогда, когда не имеет смысла что-либо возвращать. Аналогично `void` в Java и C. (Поскольку каждое выражение Scala должно иметь какое-то значение, поэтому, при отсутствии возвращающегося значения, возвращается одиночка (сингэлтон) типа Unit. Явным образом его можно задать как `()`, оно не несет какой-либо информации.)
193+
Возвращаемый тип метода `greet` это `Unit`, используется тогда, когда не имеет смысла что-либо возвращать. Аналогично `void` в Java и C. (Поскольку каждое выражение Scala должно иметь какое-то значение, то при отсутствии возвращающегося значения, возвращается экземпляр типа Unit. Явным образом его можно задать как `()`, он не несет какой-либо информации.)
194194

195195
Вы можете создать экземпляр класса используя ключевое слово `new`.
196196

@@ -233,11 +233,11 @@ if (point == yetAnotherPoint) {
233233
} // Point(1,2) и Point(2,2) разные.
234234
```
235235

236-
Есть еще куча вещей которые мы бы хотели рассказать про классы образцы, мы уверены, что вы влюбитесь в них! Обязательно рассмотрим их подробнее немного [позже](case-classes.html).
236+
Есть еще много деталей, которые мы бы хотели рассказать про классы образцы, мы уверены, что вы влюбитесь в них! Обязательно рассмотрим их [позже](case-classes.html).
237237

238238
## Объекты
239239

240-
Объекты задаются и существуют в единственным экземпляре. Вы можете думать о них как об одиночках своего собственного класса.
240+
Объекты задаются и существуют в единственным экземпляре. Вы можете думать о них как об одиночках (сингэлтонах) своего собственного класса.
241241

242242
Вы можете задать объекты при помощи ключевого слова `object`.
243243

@@ -260,7 +260,7 @@ val newerId: Int = IdFactory.create()
260260
println(newerId) // 2
261261
```
262262

263-
Позже рассмотрим объекты более [подробно](singleton-objects.html).
263+
Позже мы рассмотрим объекты [подробнее](singleton-objects.html).
264264

265265
## Трейты
266266

_ru/tour/lower-type-bounds.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
layout: tour
3-
title: Нижнее Ограничение Типов
3+
title: Нижнее Ограничение Типа
44

55
discourse: true
66

@@ -14,7 +14,7 @@ prerequisite-knowledge: upper-type-bounds, generics, variance
1414

1515
---
1616

17-
В то время как [верхнее ограничение типов](upper-type-bounds.html) ограничивают тип до подтипа стороннего типа, *нижнее ограничение типов* объявляют тип супертипом стороннего типа. Термин `B >: A` выражает, что параметр типа `B` или абстрактный тип `B` относится к супертипу типа `A`. В большинстве случаев `A` будет задавать тип класса, а `B` задавать тип метода.
17+
В то время как [верхнее ограничение типа](upper-type-bounds.html) ограничивает тип до подтипа стороннего типа, *нижнее ограничение типа* объявляют тип супертипом стороннего типа. Термин `B >: A` выражает, то что параметр типа `B` или абстрактный тип `B` относится к супертипу типа `A`. В большинстве случаев `A` будет задавать тип класса, а `B` задавать тип метода.
1818

1919
Вот пример, где это полезно:
2020

@@ -36,7 +36,7 @@ case class Nil[+B]() extends Node[B] {
3636

3737
В данной программе реализован связанный список. `Nil` представляет пустой список. Класс `ListNode` - это узел, который содержит элемент типа `B` (`head`) и ссылку на остальную часть списка (`tail`). Класс `Node` и его подтипы ковариантны, потому что у нас указанно `+B`.
3838

39-
Однако эта программа _не компилируется_, потому что параметр `elem` в `prepend` имеет тип `B`, который мы объявили *ко*вариантным. Так это не работает, потому что функции *контр*вариантны в типах своих параметров и *ко*вариантны типах в своих результатов.
39+
Однако эта программа _не компилируется_, потому что параметр `elem` в `prepend` имеет тип `B`, который мы объявили *ко*вариантным. Так это не работает, потому что функции *контр*вариантны в типах своих параметров и *ко*вариантны в типах своих результатов.
4040

4141
Чтобы исправить это, необходимо перевернуть вариантность типа параметра `elem` в `prepend`. Для этого мы вводим новый тип для параметра `U`, у которого тип `B` указан в качестве нижней границы типа.
4242

0 commit comments

Comments
 (0)