Типы данных
Что такое Any, Nothing, Unit в Kotlin?
Определения типов данных:
Any - это базовый класс в Kotlin, от которого наследуются все
остальные классы. Он является супертипом для всех классов.
Nothing - это специальный тип, который не имеет значений. Он
используется для обозначения ситуаций, когда функция никогда не завершается
нормально (например, функция, которая бросает исключение).
Unit - это тип, который используется для обозначения функций, не
возвращающих значения. Он аналогичен типу void в других языках
программирования.
Какие основные типы данных поддерживаются в Kotlin?
Определения типов данных:
-
Числовые типы:
Byte,Short,Int,Long,Float,Double
-
Символьные и строковые типы:
Char,String
-
Логический тип:
-
Boolean
-
-
Коллекции:
List,MutableList,Set,MutableSet,Map,MutableMap
-
Nullable типы:
- Все вышеперечисленные типы могут быть
null(например,String?).
- Все вышеперечисленные типы могут быть
Как работают nullable типы в Kotlin и чем они полезны?
Nullable типы в Kotlin обозначаются символом ?.
Это позволяет избежать NullPointerException (NPE) путем явного
указания, что переменная может быть null.
Пример:
var name: String? = "Alice"
name = null // Разрешено
println(name?.length) // Безопасный вызов (safe call), результат: null
Преимущества:
-
Явное указание nullable типов помогает предотвращать ошибки времени выполнения, связанные с null.
-
Компилятор Kotlin требует обработки возможных значений null, что делает код безопаснее.
Объясните различие между val и var.
Основная разница между val и var:
-
val(value): Объявляет неизменяемую переменную, которая может быть назначена только один раз.val name = "Alice" name = "Bob" // Ошибка компиляции -
var(variable): Объявляет изменяемую переменную, значение которой можно изменять.var age = 25 age = 26 // Разрешено
Как работать с коллекциями в Kotlin и какие типы коллекций существуют?
Kotlin различает интерфейсы коллекций только для чтения и изменяемые интерфейсы. List, Set и Map не гарантируют неизменяемость объекта или его элементов; комментарии «неизменяемый» в примерах ниже означают доступ только для чтения.
-
ListиMutableList:val list: List<String> = listOf("one", "two", "three") // Неизменяемый список val mutableList: MutableList<String> = mutableListOf("one", "two", "three") // Изменяемый список mutableList.add("four") -
SetиMutableSet:val set: Set<String> = setOf("one", "two", "three") // Неизменяемое множество val mutableSet: MutableSet<String> = mutableSetOf("one", "two", "three") // Изменяемое множество mutableSet.add("four") -
MapиMutableMap:val map: Map<String, Int> = mapOf("one" to 1, "two" to 2, "three" to 3) // Неизменяемый словарь val mutableMap: MutableMap<String, Int> = mutableMapOf("one" to 1, "two" to 2, "three" to 3) // Изменяемый словарь mutableMap["four"] = 4 -
Операции с коллекциями:
-
filter: Фильтрация элементов.val filtered = list.filter { it.startsWith("t") } // ["two", "three"] -
map: Преобразование элементов.val mapped = list.map { it.toUpperCase() } // ["ONE", "TWO", "THREE"] -
forEach: Итерация по элементам.list.forEach { println(it) }
-