В марте официальный твиттер-аккаунт Google, посвященный разработке приложений для Android (@AndroidDev), публиковал короткие, но очень полезные заметки о разработке на языке Kotlin. Я собрал их все вместе и опубликую в трех сообщениях в течение трех дней.
1. Эвлис-оператор (если null, то...):
val name: String = person.name ?: "unknown"
2. Строковые шаблоны:
val text = "$language has ${language.length} characters"
3. Разрушающие объявления:
val (red, green, blue) = color
val (x, y) = point
4. Оператор when:
return when (cargo) {
null, 0 -> "empty"
1 -> "tiny"
2..10 -> "small"
is Int -> "big inty"
else -> "$cargo"
}
5. Цикл for:
for(i in 1..100) { /* ... */ }
for(i in 100 downTo 1) { /* ... */ }
for(i in 1 until array.size step 2) { /* ... */ }
for((index, element) in array.withIndex()) { /* ... */ }
for((key, value) in map) { /* ... */ }
6. Свойства и поля:
class User {
val id: String = "" // неизменяемое поле
var name: String = "" // изменяемое поле
var surname: String = "" // изменяемое поле с кастомным геттером
get() = surname.toUpperCase()
var email: String = "" // изменяемое поле с кастомным сеттером
set(value) {
if(isEmailValid()) field = value
}
}
7. Классы данных (Kotlin автоматически добавляет к ним методы equals(), toString() и copy()):
data class User(val name: String, val email: String /* ... */ )
8. Модификаторы видимости:
val isVisible = true
private val isHidden = true
internal val almostVisible = true
9. Аргументы по умолчанию:
class BulletPointSpan(
private val bulletRadius: Float = DEFAULT_BULLET_RADIUS,
private val gapWith: Int = DEFAULT_GAP_WIDTH,
private val color: Int = Color.BLACK
) { /* ... */ }
val bulletPointSpan = BulletPointSpan()
val bulletPointSpan2 = BulletPointSpan(resources.getDimension(R.dimen.radius))
val bulletPointSpan3 = BulletPointSpan(color = Color.RED)
10. Изолированные классы (по сути прокачанный enum):
sealed class NetworkResult
data class Success(val result: String): NetworkResult()
data class Failure(val error: Error): NetworkResult()
viewModel.data.observe(this,
Observe { data ->
data ?: return@Observer
when (data) {
is Success -> showResult(data.result)
is Failure -> showError(data.error)
}
})
1. Эвлис-оператор (если null, то...):
val name: String = person.name ?: "unknown"
2. Строковые шаблоны:
val text = "$language has ${language.length} characters"
3. Разрушающие объявления:
val (red, green, blue) = color
val (x, y) = point
4. Оператор when:
return when (cargo) {
null, 0 -> "empty"
1 -> "tiny"
2..10 -> "small"
is Int -> "big inty"
else -> "$cargo"
}
5. Цикл for:
for(i in 1..100) { /* ... */ }
for(i in 100 downTo 1) { /* ... */ }
for(i in 1 until array.size step 2) { /* ... */ }
for((index, element) in array.withIndex()) { /* ... */ }
for((key, value) in map) { /* ... */ }
6. Свойства и поля:
class User {
val id: String = "" // неизменяемое поле
var name: String = "" // изменяемое поле
var surname: String = "" // изменяемое поле с кастомным геттером
get() = surname.toUpperCase()
var email: String = "" // изменяемое поле с кастомным сеттером
set(value) {
if(isEmailValid()) field = value
}
}
7. Классы данных (Kotlin автоматически добавляет к ним методы equals(), toString() и copy()):
data class User(val name: String, val email: String /* ... */ )
8. Модификаторы видимости:
val isVisible = true
private val isHidden = true
internal val almostVisible = true
9. Аргументы по умолчанию:
class BulletPointSpan(
private val bulletRadius: Float = DEFAULT_BULLET_RADIUS,
private val gapWith: Int = DEFAULT_GAP_WIDTH,
private val color: Int = Color.BLACK
) { /* ... */ }
val bulletPointSpan = BulletPointSpan()
val bulletPointSpan2 = BulletPointSpan(resources.getDimension(R.dimen.radius))
val bulletPointSpan3 = BulletPointSpan(color = Color.RED)
10. Изолированные классы (по сути прокачанный enum):
sealed class NetworkResult
data class Success(val result: String): NetworkResult()
data class Failure(val error: Error): NetworkResult()
viewModel.data.observe(this,
Observe { data ->
data ?: return@Observer
when (data) {
is Success -> showResult(data.result)
is Failure -> showError(data.error)
}
})