Перейти к основному содержимому

Простые приложения на Kotlin

Разработчику Архитектору

Простые приложения на Kotlin

Kotlin — это современный язык программирования, разработанный компанией JetBrains. Он полностью совместим с экосистемой Java, но предлагает более лаконичный синтаксис, безопасную работу с данными и продвинутые функции для работы с коллекциями. Язык особенно удобен для создания консольных утилит, скриптов автоматизации и простых приложений с графическим интерфейсом.

В этой главе рассматриваются примеры простых приложений, демонстрирующие базовые возможности языка — работу со строками, файлами, сетью, сериализацией данных и системными ресурсами. Каждый пример сопровождается разбором ключевых конструкций кода.


Как запускать примеры из главы

  1. Скопируйте код в файл .kt с функцией fun main().
  2. IntelliJ IDEA / Android Studio: откройте файл → Run у main.
  3. CLI: kotlin имя.kt (Kotlin 2.x) или kotlinc имя.kt -include-runtime -d app.jar && java -jar app.jar.
  4. Нужно: JDK 17+.

Генератор паролей

Генератор паролей демонстрирует работу со строками, массивами символов и генерацией случайных значений. Приложение создает пароль заданной длины, используя набор допустимых символов.


Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • SecureRandom: Класс из пакета java.security обеспечивает криптографически стойкую генерацию случайных чисел. Это предпочтительнее использования класса Random для создания паролей.
  • Коллекция символов: Строка chars содержит все допустимые символы для пароля.
  • Диапазон и маппинг: Оператор (1..length) создает диапазон целых чисел от 1 до заданной длины. Метод map применяет лямбда-выражение к каждому элементу диапазона, выбирая случайный символ из строки chars.
  • joinToString: Метод объединяет список символов в одну строку без разделителей.
  • Интерполяция строк: Конструкция $password позволяет вставлять значение переменной прямо в строку вывода.

Сортировщик текстового файла

Эта утилита читает текст из файла, сортирует слова по алфавиту и записывает результат в новый файл. Пример иллюстрирует работу с файловым вводом/выводом и коллекциями.


Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • Чтение файла: Метод readText() загружает всё содержимое файла в память как строку.
  • Разделение текста — Регулярное выражение \\s+ разделяет текст по пробельным символам (пробелы, табы, переносы строк). Фильтрация filter { it.isNotEmpty() } удаляет пустые элементы.
  • Сортировка: Метод Collections.sort() сортирует список слов в лексикографическом порядке.
  • Запись файла: Метод writeText() записывает отсортированный список слов в новый файл, разделяя их переносами строк.

Консольный калькулятор

Простой калькулятор выполняет арифметические операции (+, -, *, /) над двумя числами, введенными пользователем. Пример показывает обработку ввода, условные операторы и исключительные ситуации.


Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • when: Конструкция when работает как расширенный оператор switch, позволяя сопоставлять значения оператора с соответствующими действиями.
  • Обработка ошибок: Метод toDoubleOrNull() возвращает null, если строка не является числом. Оператор Elvis (?:) используется для обработки таких случаев и завершения выполнения функции.
  • Проверка деления: В случае деления проверяется, что делитель не равен нулю. Если условие нарушено, функция возвращает null.

Трекер задач в JSON

Приложение управляет списком задач, сохраняя их в формате JSON. Пример демонстрирует использование библиотек для сериализации и десериализации данных, а также работу с файловой системой. Для работы потребуется библиотека kotlinx.serialization.


Структура данных


import kotlinx.serialization.Serializable

@Serializable
data class Task(
val id: Int,
val title: String,
val isCompleted: Boolean
)

Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • Аннотация @Serializable: Указывает классу, что его экземпляры могут быть преобразованы в формат JSON.
  • Json.encodeToString / decodeFromString: Методы библиотеки kotlinx.serialization преобразуют объекты в строки JSON и обратно.
  • Работа с файлами: Функции loadTasks и saveTasks обеспечивают сохранение состояния приложения между запусками.
  • Генерация ID: Метод maxOfOrNull находит максимальный ID среди существующих задач, чтобы присвоить новому уникальный идентификатор.

Простой HTTP-сервер и клиент

Kotlin позволяет создавать простые сетевые приложения с использованием встроенных классов HttpURLConnection или сторонних библиотек. Ниже приведен пример сервера на основе стандартной библиотеки Java и клиента, отправляющего запрос.


Сервер

Код ITЗагрузка примера кода…


Клиент

Код ITЗагрузка примера кода…


Разбор кода

  • ServerSocket: Создает серверный сокет, который слушает входящие соединения на указанном порту.
  • Socket: Представляет соединение между клиентом и сервером.
  • HttpURLConnection: Класс для отправки HTTP-запросов и получения ответов.
  • Потоки ввода/вывода: BufferedReader и PrintWriter используются для чтения и записи текстовых данных через сеть.

Отправитель HTTP-запросов

Утилита для отправки произвольных HTTP-запросов с возможностью указания метода, заголовков и тела запроса.


Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • Настройка заголовков: Цикл forEach устанавливает пользовательские заголовки в запросе.
  • Отправка тела: При использовании методов POST или PUT тело запроса записывается в поток вывода.
  • Чтение ответа: Данные считываются из потока ввода и собираются в строку для отображения.

Утилита для сканирования директорий

Программа выводит список всех файлов и поддиректорий в указанной папке рекурсивно.


Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • Рекурсия: Функция вызывает сама себя для каждой поддиректории, увеличивая уровень отступа.
  • File.listFiles(): Возвращает массив файлов в текущей директории.
  • Отступы: Строка " ".repeat(indent) создает визуальный отступ для отображения структуры дерева.

Скрипт для создания резервного копирования файлов

Скрипт копирует файлы из одной директории в другую, создавая временную метку в имени папки назначения.


Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • Дата и время: Класс LocalDateTime и форматтер DateTimeFormatter генерируют уникальное имя для папки бэкапа.
  • Копирование файлов: Метод copyTo копирует файл в новую директорию с возможностью перезаписи.
  • Создание директории: Метод mkdirs() создает всю цепочку директорий, если они отсутствуют.

Мониторинг дискового пространства

Утилита отображает информацию о свободном и занятом месте на дисках системы.


Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • Свойства объекта File — Поля totalSpace, freeSpace, usableSpace содержат информацию о пространстве диска в байтах.
  • Конвертация единиц: Деление на 1024 * 1024 * 1024 переводит байты в гигабайты.
  • Форматирование вывода: Метод format позволяет вывести процент занятости с двумя знаками после запятой.

Парсер URL и проверка доступности ресурса

Программа анализирует URL, извлекает компоненты (протокол, хост, путь) и проверяет доступность ресурса.


Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • Класс URL: Автоматически разбирает строку URL на компоненты.
  • HEAD запрос: Используется для проверки доступности ресурса без загрузки всего контента.
  • Обработка исключений: Блок try-catch перехватывает ошибки сети или неверного формата URL.

Конвертер форматов дат

Утилита преобразует строковое представление даты в различные форматы.


Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • LocalDate: Класс для работы с датами без учета времени.
  • DateTimeFormatter: Определяет шаблоны для парсинга и форматирования дат.
  • Параметризация: Список выходных форматов позволяет гибко задавать нужные варианты представления даты.

Утилита для просмотра запущенных процессов

Программа выводит список активных процессов операционной системы с указанием их имен и идентификаторов.


Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • ProcessBuilder: Запускает внешнюю команду операционной системы.
  • Определение ОС: Логика выбора команды зависит от названия операционной системы.
  • Чтение вывода: Вывод процесса считывается построчно и выводится в консоль.

Характерный пример для Kotlin

Одной из ключевых особенностей Kotlin является работа с nullable типами и безопасность операций. Приведенный пример демонстрирует использование оператора ?. (safe call), elvis-оператора ?: и функции let для безопасной работы с потенциально пустыми значениями.


Как запустить

  • Файл: Main.kt (или имя по смыслу раздела) с fun main() из примера.
  • Команда: Run в IDE или kotlin Main.kt.
  • Результат: вывод println в консоли (см. конец примера).

Код программы

Код ITЗагрузка примера кода…


Разбор кода

  • Safe Call (?.): Вызывает метод только если объект не равен null.
  • Elvis Operator (?:): Возвращает альтернативное значение, если левая часть равна null.
  • Функция let: Позволяет выполнить блок кода с объектом, передавая его как параметр.
  • Блоки run: Выполняются при отсутствии объекта или при необходимости выполнить действие по умолчанию.

Этот подход делает код более читаемым и предотвращает возникновение NullPointerException, что является одним из главных преимуществ Kotlin перед Java.


Основа по протоколу

Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.

Содержание