Kotlin — это не просто модно, это необходимо
Мир разработки на Android стремительно меняется. Ещё пять лет назад все писали на Java, а сегодня Kotlin — официальный язык для Android от Google. Но одного знания синтаксиса недостаточно. Чтобы пройти собеседование и получить оффер, нужно портфолио на Kotlin, которое покажет работодателю: вы умеете не просто читать документацию, а создавать работающие продукты.
В этой статье мы разберём пять лучших проектов для портфолио, которые закроют самые популярные требования в вакансиях: работа с сетью, многопоточность, архитектурные паттерны и UI. Каждый проект мы снабдим реальными примерами кода и объясним, почему именно он сделает ваше резюме сильнее.
Почему именно Kotlin? Тренды 2024–2025
Если вы всё ещё сомневаетесь, стоит ли учить Kotlin, взгляните на статистику. По данным опросов Stack Overflow, Kotlin входит в топ-5 самых любимых языков. А количество вакансий для Android-разработчиков на Kotlin растёт на 30–40% ежегодно.
При этом Kotlin универсален: на нём пишут не только мобильные приложения, но и серверные части (Ktor), мультиплатформенные проекты (KMP) и даже скрипты. Поэтому проекты для портфолио на Kotlin — это инвестиция в будущее.
Проект №1: Менеджер задач с корутинами и Retrofit
Начнём с классики — приложение для управления задачами. Это идеальный учебный проект Kotlin, который позволяет показать работу с REST API, базами данных и многопоточностью.
Что делает проект особенным?
- Использует Retrofit для сетевых запросов
- Реализует Kotlin Coroutines для асинхронности
- Хранит данные локально через Room
- Имеет архитектуру MVVM
Пример кода: загрузка задач с сервера
Вот как выглядит простой репозиторий, который получает список задач и кэширует их:
class TaskRepository(
private val api: TaskApi,
private val dao: TaskDao
) {
suspend fun getTasks(): List<Task> = withContext(Dispatchers.IO) {
try {
val remoteTasks = api.fetchTasks()
dao.insertAll(remoteTasks)
remoteTasks
} catch (e: Exception) {
dao.getAllTasks()
}
}
}
Обратите внимание на withContext(Dispatchers.IO) — это переключение на фоновый поток. Без корутин пришлось бы писать громоздкий AsyncTask. А здесь — чисто, лаконично и безопасно.
Почему это важно для портфолио?
Работодатели хотят видеть, что вы понимаете асинхронное программирование и умеете работать с ошибками. В коде выше мы gracefully обрабатываем сбой сети и возвращаем кэш — это показывает зрелость разработчика.
Проект №2: Приложение погоды с Jetpack Compose
Современный Android — это Jetpack Compose. Если ваше портфолио содержит только XML-разметку, вы рискуете выглядеть старомодно. Приложение погоды — идеальный кандидат для демонстрации навыков работы с Compose.
Ключевые фишки
- Динамический интерфейс на Compose
- Анимации переходов
- Работа с геолокацией
- Использование StateFlow для реактивного UI
Пример кода: простой экран с погодой
@Composable
fun WeatherScreen(viewModel: WeatherViewModel) {
val weatherState by viewModel.weatherState.collectAsState()
when (weatherState) {
is WeatherState.Loading -> CircularProgressIndicator()
is WeatherState.Success -> {
val weather = (weatherState as WeatherState.Success).data
Column(modifier = Modifier.padding(16.dp)) {
Text(text = "Температура: ${weather.temp}°C",
style = MaterialTheme.typography.h4)
Text(text = "Влажность: ${weather.humidity}%")
AsyncImage(model = weather.iconUrl,
contentDescription = "Иконка погоды")
}
}
is WeatherState.Error -> Text("Ошибка загрузки")
}
}
Здесь мы используем collectAsState() для подписки на данные. Это ключевой паттерн в Compose, который делает UI автоматически обновляемым при изменении данных.
Проект №3: Чат-приложение на WebSocket (Ktor Client)
Хотите выделиться? Добавьте в портфолио проект с реальным временем. Чат на WebSocket покажет, что вы умеете работать с постоянными соединениями и не боитесь нетривиальных задач.
Технологии
- Ktor Client для WebSocket
- Kotlin Flow для обработки сообщений
- Простая серверная часть на Ktor (опционально)
Пример кода: подключение к WebSocket
suspend fun connectToChat(): Flow<ChatMessage> = callbackFlow {
val client = HttpClient()
client.webSocket("wss://chat.example.com/ws") {
send(Frame.Text("{\"action\":\"join\",\"room\":\"general\"}"))
for (frame in incoming) {
if (frame is Frame.Text) {
val message = Json.decodeFromString<ChatMessage>(frame.readText())
trySend(message)
}
}
}
awaitClose { client.close() }
}
Обратите внимание на callbackFlow — это элегантный способ конвертировать колбэки в холодный или горячий поток. Такой код редко встретишь у новичков, а опытные разработчики его оценят.
Проект №4: Backend-сервис на Ktor
Не ограничивайтесь только мобильной разработкой. Покажите, что вы понимаете серверную сторону. Простой REST API на Ktor — это отличный способ расширить своё портфолио на Kotlin.
Что реализовать?
- CRUD для заметок или пользователей
- Аутентификацию по JWT
- Подключение к PostgreSQL через Exposed
- Документацию Swagger
Пример кода: эндпоинт для создания заметки
fun Application.configureRouting() {
routing {
post("/notes") {
val note = call.receive<NoteRequest>()
val savedNote = noteService.create(note)
call.respond(HttpStatusCode.Created, savedNote)
}
}
}
Этот код лаконичен и читаем. Ktor использует Kotlin-стиль, что делает его естественным для разработчиков, переходящих с Android на backend.
Проект №5: Мультиплатформенный модуль (KMP)
Самый амби