Permalink
Browse files

Update typecasts.md

  • Loading branch information...
Temon137 committed Jun 20, 2017
1 parent e523e01 commit 02594edc89fed8c5970a7bf5409de00aa007ad67
Showing with 9 additions and 9 deletions.
  1. +9 −9 typecasts.md
View
@@ -20,7 +20,7 @@ if (obj is String) {
print(obj.length)
}
if (obj !is String) { // тоже самое что и !(obj is String)
if (obj !is String) { // то же самое, что и !(obj is String)
print("Not a String")
}
else {
@@ -33,8 +33,8 @@ else {
<!--In many cases, one does not need to use explicit cast operators in Kotlin, because the compiler tracks the
`is`-checks for immutable values and inserts (safe) casts automatically when needed:-->
Во многих случаях, в Kotlin вам не нужно использовать явные приведения, потому что компилятор следит за `is`-проверками для
неизменяемых значений и вставляет приведения автоматически, там где они нужны.
Во многих случаях в Kotlin вам не нужно использовать явные приведения, потому что компилятор следит за `is`-проверками для
неизменяемых значений и вставляет приведения автоматически, там, где они нужны:
``` kotlin
fun demo(x: Any) {
@@ -60,7 +60,7 @@ fun demo(x: Any) {
// x автоматически преобразовывается в String справа от `||`
if (x !is String || x.length == 0) return
// x is автоматически преобразовывается в String справа от `&&`
// x автоматически преобразовывается в String справа от `&&`
if (x is String && x.length > 0) {
print(x.length) // x автоматически преобразовывается в String
}
@@ -81,17 +81,17 @@ when (x) {
<!--Note that smart casts do not work when the compiler cannot guarantee that the variable cannot change between the check and the usage.
More specifically, smart casts are applicable according to the following rules:-->
Заметьте, что умные приведения не работают когда компилятор не может гарантировать, что переменная не изменится между проверкой и использованием.
Заметьте, что умные приведения не работают, когда компилятор не может гарантировать, что переменная не изменится между проверкой и использованием.
Более конкретно, умные приведения будут работать:
<!-- * *val*{: .keyword } local variables - always;
* *val*{: .keyword } properties - if the property is private or internal or the check is performed in the same module where the property is declared. Smart casts aren't applicable to open properties or properties that have custom getters;
* *var*{: .keyword } local variables - if the variable is not modified between the check and the usage and is not captured in a lambda that modifies it;
* *var*{: .keyword } properties - never (because the variable can be modified at any time by other code).-->
* с локальными *val* пременными - всегда;
* с *val* свойствами - если поле имеет модификатор доступа `private` или `internal`, или проверка происходит в том же модуле, в котором объявленно это свойство.
Умные приведения не применимы к публичным свойствам, или свойствам, которые имеют переопределённые getter'ы;
* с локальными *val* переменными - всегда;
* с *val* свойствами - если поле имеет модификатор доступа `private` или `internal`, или проверка происходит в том же модуле, в котором объявлено это свойство.
Умные приведения неприменимы к публичным свойствам или свойствам, которые имеют переопределённые getter'ы;
* с локальными *var* переменными - если переменная не изменяется между проверкой и использованием и не захватывается лямбдой, которая её модифицирует;
* с *var* свойствами - никогда (потому что переменная может быть изменена в любое время другим кодом).
@@ -101,7 +101,7 @@ More specifically, smart casts are applicable according to the following rules:-
<!--Usually, the cast operator throws an exception if the cast is not possible. Thus, we call it *unsafe*.
The unsafe cast in Kotlin is done by the infix operator *as*{: .keyword } (see [operator precedence](grammar.html#precedence)):-->
Обычно, оператор приведения выбрасывает исключение если приведения невозможно. Таким образом, мы называем его *небезопасным*.
Обычно оператор приведения выбрасывает исключение, если приведение невозможно, поэтому мы называем его *небезопасным*.
Небезопасное приведение в Kotlin выполняется с помощью инфиксного оператора *as*:
``` kotlin

0 comments on commit 02594ed

Please sign in to comment.