Функции Kotlin Scoping - есть ли побочные эффекты от использования «it» или «this»? - PullRequest
1 голос
/ 03 октября 2019

В основном, в чем разница между этим:

obj?.let{ doSomethingWith(it) }

И этим?

obj?.let{ doSomethingWith(obj) }

Очевидно, что первый предпочтительнее, просто читая документы Kotlin, однако я нашел такой код:второй, и моя IDE не жалуется на это. Есть ли какие-то «ошибки», о которых нужно знать, должен ли я всегда использовать «это» и «это», даже если я не вынужден это делать?

1 Ответ

4 голосов
/ 04 октября 2019

Это на самом деле не столько связано с областями видимости, но и с нулевой безопасностью.

В случае obj (object не является хорошим именем, так как это ключевое слово в Kotlin)значение, этот код будет выдавать ненужное умное приведение:

val obj: String? = null

obj?.let {
    doSomethingWith(obj) // Smart cast to kotlin.String
}

В случае, если obj является переменной, это становится еще хуже, как было правильно указано в комментариях, так как этот код не может быть потоком-безопаснее.

Это безопасно, хотя:

obj?.let { 
    doSomethingWith(it) 
}

Поскольку it является значением, следовательно, неизменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...