Permalink
Browse files

Update delegated-properties.md

Исправления ошибок и удаление дублированного предлоэения (строка 140).
  • Loading branch information...
Temon137 committed Jun 19, 2017
1 parent 1ccf25c commit a15997234946c9ab2ef5afc391c54a6b60aece15
Showing with 10 additions and 10 deletions.
  1. +10 −10 delegated-properties.md
View
@@ -88,7 +88,7 @@ NEW было присвоено значению ‘p’ в Example@33a17727.
<!--Note that since Kotlin 1.1 you can declare a delegated property inside a function or code block, it shouldn't necessarily be a member of a class.
Below you can find [the example](delegated-properties.html#local-delegated-properties-since-11).-->
Заметьте, что начиная с версии Kotlin 1.1, вы можете объявлять делегированные свойства внутри функций или блоков кода, а не только внутри классов. Снизу вы можете найти пример
Заметьте, что начиная с версии Kotlin 1.1, вы можете объявлять делегированные свойства внутри функций или блоков кода, а не только внутри классов. Снизу вы можете найти пример.
<!--## Standard Delegates-->
## Стандартные делегаты
@@ -129,15 +129,15 @@ will see the same value. If the synchronization of initialization delegate is no
can execute it simultaneously, pass `LazyThreadSafetyMode.PUBLICATION` as a parameter to the `lazy()` function.
And if you're sure that the initialization will always happen on a single thread, you can use `LazyThreadSafetyMode.NONE` mode,
which doesn't incur any thread-safety guarantees and the related overhead.-->
По умолчанию вычисление ленивых свойств **синхронизированно**: значение вычисляется только в одном потоке выполнения, и все остальные потоки могут видеть одно и то же значение. Если синхронизация не требуется, передайте `LazyThreadSafetyMode.PUBLICATION` в качестве параметра в функцию `lazy()`, тогда несколько потоков смогут исполнять вычисление одновременно. Или если вы уверены, что инициализация всегда будет происходить в одном потоке исполнения, вы можете использовать режим `LazyThreadSafetyMode.NONE`, который не гарантирует никакой потокобезопасности.
По умолчанию вычисление ленивых свойств **синхронизировано**: значение вычисляется только в одном потоке выполнения, и все остальные потоки могут видеть одно и то же значение. Если синхронизация не требуется, передайте `LazyThreadSafetyMode.PUBLICATION` в качестве параметра в функцию `lazy()`, тогда несколько потоков смогут исполнять вычисление одновременно. Или если вы уверены, что инициализация всегда будет происходить в одном потоке исполнения, вы можете использовать режим `LazyThreadSafetyMode.NONE`, который не гарантирует никакой потокобезопасности.
### Observable свойства
<!--`Delegates.observable()` takes two arguments: the initial value and a handler for modifications.
The handler gets called every time we assign to the property (_after_ the assignment has been performed). It has three
parameters: a property being assigned to, the old value and the new one:-->
Функция `Delegates.observable()` принимает два аргумента: начальное значение свойства и обработчик (лямбда), который вызывается при изменении свойства. У обработчика три параметра: описание свойства, которое изменяется, старое значение и новое значение. Если Вам нужно иметь возможность запретить присваивание некоторых значений, используйте функцию vetoable() вместо observable().
Функция `Delegates.observable()` принимает два аргумента: начальное значение свойства и обработчик (лямбда), который вызывается при изменении свойства. У обработчика три параметра: описание свойства, которое изменяется, старое значение и новое значение.
``` kotlin
import kotlin.properties.Delegates
@@ -244,11 +244,11 @@ If `someCondition` fails, the variable won't be computed at all.-->
<!--* `thisRef` - must be the same or a supertype of the _property owner_ (for extension properties - the type being extended),
* `property` - must be of type `KProperty<*>` or its supertype, this function must return the same type as property (or its subtype).-->
* `thisRef` — должен иметь такой же тип, или быть наследником типа _хозяина свойства_ (для [расширений](extensions.html) — тип, который расширяется)
* `property` — должен быть типа `KProperty<*>` или его родительского типа. Это функция должна возвращать значение того же типа, что и свойство (или его родительского типа).
* `thisRef` — должен иметь такой же тип или быть наследником типа _хозяина свойства_ (для [расширений](extensions.html) — тип, который расширяется)
* `property` — должен быть типа `KProperty<*>` или его родительского типа. Эта функция должна возвращать значение того же типа, что и свойство (или его родительского типа).
<!--For a **mutable** property (a *var*{:.keyword}), a delegate has to _additionally_ provide a function named `setValue` that takes the following parameters:-->
Для **изменяемого** свойства (*var*), делегат должен _дополнительно_ предоставлять функцию `setValue`, которая принимает следующие параметры:
Для **изменяемого** свойства (*var*) делегат должен _дополнительно_ предоставлять функцию `setValue`, которая принимает следующие параметры:
<!--* `thisRef` — same as for `getValue()`,
* `property` — same as for `getValue()`,
@@ -283,7 +283,7 @@ interface ReadWriteProperty<in R, T> {
<!--Under the hood for every delegated property the Kotlin compiler generates an auxiliary property and delegates to it.
For instance, for the property `prop` the hidden property `prop$delegate` is generated, and the code of the accessors simply delegates to this additional property:-->
Для каждого делегированного свойства, "за кулисами" компилятор Kotlin генерирует вспомогательное свойство и делегирует его. Например, для свойства `prop` генерируется скрытое свойство `prop$delegate`, и исполнение геттеров и сеттеров просто делегируется этому дополнительному свойству:
Для каждого делегированного свойства компилятор Kotlin "за кулисами" генерирует вспомогательное свойство и делегирует его. Например, для свойства `prop` генерируется скрытое свойство `prop$delegate`, и исполнение геттеров и сеттеров просто делегируется этому дополнительному свойству:
``` kotlin
class C {
@@ -312,7 +312,7 @@ _Примечание: Предоставление делегата досту
<!--By defining the `provideDelegate` operator you can extend the logic of creating the object to which the property implementation is delegated.
If the object used on the right hand side of `by` defines `provideDelegate` as a member or extension function, that function will be
called to create the property delegate instance.-->
С помощью определения оператора `provideDelegate` вы можете расширить логику создания объекта, которому будет делегировано свойство. Если объект используется справа от `by` определяет `provideDelegate` как член или как [расширение](extensions.html), эта функция будет вызвана для создания экземпляра делегата.
С помощью определения оператора `provideDelegate` вы можете расширить логику создания объекта, которому будет делегировано свойство. Если объект, который используется справа от `by`, определяет `provideDelegate` как член или как [расширение](extensions.html), эта функция будет вызвана для создания экземпляра делегата.
<!--One of the possible use cases of `provideDelegate` is to check property consistency when the property is created, not only in its getter or setter.-->
Один из возможных юзкейсов `provideDelegate` — это проверка состояния свойства при его создании.
@@ -347,7 +347,7 @@ class MyUI {
<!--* `thisRef` - must be the same or a supertype of the _property owner_ (for extension properties - the type being extended),
* `property` - must be of type `KProperty<*>` or its supertype.-->
* `thisRef` — должен иметь такой же тип, или быть наследником типа _хозяина свойства_ (для [расширений](extensions.html) — тип, который расширяется)
* `property` — должен быть типа `KProperty<*>` или его родительского типа. Это функция должна возвращать значение того же типа, что и свойство (или его родительского типа)
* `property` — должен быть типа `KProperty<*>` или его родительского типа. Эта функция должна возвращать значение того же типа, что и свойство (или его родительского типа)
<!--The `provideDelegate` method is called for each property during the creation of the `MyUI` instance, and it performs the necessary validation right away.-->
Метод `provideDelegate` вызывается для каждого свойства во время создания экземпляра `MyUI`, и сразу совершает необходимые проверки.
@@ -375,7 +375,7 @@ fun <T> MyUI.bindResource(
<!--In the generated code, the `provideDelegate` method is called to initialize the auxiliary `prop$delegate` property.
Compare the generated code for the property declaration `val prop: Type by MyDelegate()` with the generated code
[above](delegated-properties.html#translation-rules) (when the `provideDelegate` method is not present):-->
В сгенерированном коде, метод `provideDelegate` вызывается для инициализации вспомогательного свойства `prop$delegate`.
В сгенерированном коде метод `provideDelegate` вызывается для инициализации вспомогательного свойства `prop$delegate`.
Сравните сгенерированный для объявления свойства код `val prop: Type by MyDelegate()` со сгенерированным кодом из Transaction Rules (когда `provideDelegate` не представлен):
``` kotlin

0 comments on commit a159972

Please sign in to comment.