Типы данных в Kotlin для Android-разработки

Типы данных определяют, каким образом хранятся и обрабатываются данные в программе. В Kotlin, как и в большинстве статически типизированных языков, тип переменной определяется при её объявлении и влияет на операции, которые можно с ней производить.

Основные типы данных в Kotlin



Числовые типы
  • Int: целое число (32-bit).
  • Long: длинное целое число (64-bit).
  • Float: вещественное число одинарной точности (32-bit).
  • Double: вещественное число двойной точности (64-bit).

Строковый тип
  • String: обычная строка текста.

Булевый тип
  • Boolean: логическое значение (true или false).

Специальные типы для Android
  • CharSequence: интерфейс, представляющий последовательность символов (часто используется в Android для работы с текстом).
  • SpannableString: класс, который позволяет добавлять стили и разметку к текстовым данным (используется для форматирования текста в Android).

SpannableString и CharSequence


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

Kotlin: Хранилище конфигурационных переменных

В Kotlin/Android есть несколько способов организовать централизованное хранение конфигурационных переменных.

Ресурсные файлы (values)


Создайте файл в "res/values/strings.xml":
<resources>
    <string name="api_url">https://api.example.com</string>
    <integer name="timeout">30000</integer>
    <bool name="debug_mode">true</bool>
</resources>

Доступ через: R.string.api_url.

Константы в отдельном файле


Создайте файл "Config.kt":
object Config {
    const val API_URL = "https://api.example.com"
    const val TIMEOUT = 30000
    const val DEBUG_MODE = true
}

Доступ: Config.API_URL.

BuildConfig


Настройте в "build.Gradle":
buildTypes {
    debug {
        buildConfigField "String", "API_URL", "\"https://api.example.com\""
    }
    release {
        buildConfigField "String", "API_URL", "\"https://api.prod.com\""
    }
}

Доступ: BuildConfig.API_URL.

Application-класс


Создайте в "Application":
class MyApp: Application() {
 
...

Kotlin: Функции, лямбды и обработка нажатий

Функции: Основы


Функция — это блок кода, который выполняет определённое действие и может быть вызван многократно.

Синтаксис:
fun имяФункции(параметры): ТипВозврата {
    // тело функции
    return результат
}

Пример простой функции:
fun addNumbers(a: Int, b: Int): Int {
    return a + b
}

// Вызов
val sum = addNumbers(5, 3)  // sum = 8

Важные моменты:
  • fun — ключевое слово для объявления функции.
  • Типы параметров и возвращаемого значения указываются явно.
  • Если функция не возвращает значение, тип возврата — Unit (можно не указывать).

Функции без возвращаемого значения


Когда функция выполняет действие, но не возвращает результат:
fun showMessage(message: String) {
    println(message)
}

// Вызов
showMessage("Привет из функции!")

Значения параметров по умолчанию


Можно задать значения по умолчанию, чтобы не указывать их при вызове:
fun greet(name: String = "Гость") {
    println("Привет, $name!")
}

// Варианты
...

Kotlin: Как получать данные с JSON

Давайте разберем, как получить конкретное значение из JSON файла, хранящегося в "assets".

Пример структуры JSON (user.json)
[
    {
        "id": 1,
        "name": "Иван",
        "email": "iv@mail.com",
        "age": 25
    },
    {
        "id": 2,
        "name": "Анна",
        "email": "an@mail.com",
        "age": 30
    }
]

Шаги для получения данных



Чтение файла из assets
val jsonString = context.assets.open("user.json").bufferedReader().use { it.readText() }

Создание модели данных
data class User(
    val id: Int,
    val name: String,
    val email: String,
    val age: Int
)

Парсинг JSON и поиск по ID
// Парсим весь JSON в список
val gson = Gson()
val users = gson.fromJson(jsonString, Array<User>::class.java).toList()

// Ищем пользователя по ID
fun getUserById(id: Int): User? {
    return users.find { it.id == id }
}

// Пример использования
val user = getUserById(1)
user?.let {
    println("Имя:
...

Единицы измерения в Android/Jetpack Compose

В Android/Jetpack Compose существует несколько основных единиц измерения.

Основные единицы измерения



dp (density-independent pixels)
  • Размеров элементов интерфейса.
  • Отступов.
  • Полей.
  • Автоматически масштабируются под плотность экрана.

sp (scale-independent pixels)
  • Только для текста.
  • Учитывают системные настройки размера шрифта.

px (pixels)
  • Абсолютные пиксели.
  • Редко используются в разработке.
  • Зависит от плотности экрана.

pt (points)
  • 1 pt = 1/72 дюйма.
  • Используется редко.

Дополнительные единицы



em
  • Относительная единица.
  • Зависит от размера шрифта родительского элемента.

rem
  • Относительная единица.
  • Зависит от размера шрифта корневого элемента.

%
  • Процент от родительского контейнера.

Специальные единицы в Compose



TextUnit
  • Используется для размеров текста.
  • Включает sp и другие единицы.

Dp
  • Основной тип для размеров в Compose.
  • Заменяет dp из традиционной Android-разработки.

Примеры использования


// В Compose
Text(
text = "Hello",
fontSize = 16.sp, // для текста
modifier = Modifier
   
...