Отметим: когда пользователь выделяет незнакомый фрагмент кода в мобильном приложении и нажимает «Объяснить», мы должны за доли секунды определить язык, выбрать уровень детализации и сгенерировать понятное описание. На практике это означает обработку 1000 строк кода за 200 мс — без лагов и перерасхода трафика. Мы реализуем AI-объяснение кода на iOS (Swift) и Android (Kotlin/Compose), опираясь на 5+ лет опыта в мобильной разработке и 10 проектов с интеграцией AI. Встроенная эвристика распознаёт язык за 5x быстрее вызова внешнего API, а кэш по SHA-256 сокращает повторные запросы до 60%. Экономия трафика достигает 80% для частых фрагментов.
Как определить язык программирования?
Перед объяснением нужно понять, на каком языке написан код. Пользователь редко указывает это явно. Мы используем эвристику по ключевым маркерам — например, func для Swift или def для Python. Это бесплатно, не требует вызова API и работает с точностью 90%.
Пример реализации эвристики на Swift
func detectLanguage(_ code: String) -> ProgrammingLanguage {
let patterns: [(ProgrammingLanguage, [String])] = [
(.swift, ["func ", "var ", "let ", "guard ", "@IBOutlet", "import Foundation"]),
(.kotlin, ["fun ", "val ", "var ", "data class", "viewModelScope", "suspend fun"]),
(.python, ["def ", "import ", "elif ", "print(", "__init__", "self."]),
(.javascript, ["const ", "let ", "=>", "async function", "require(", "module.exports"]),
(.typescript, [": string", ": number", "interface ", "<T>", "as unknown as"]),
(.java, ["public class", "private void", "@Override", "System.out.println"])
]
let codeShort = String(code.prefix(500))
for (language, markers) in patterns {
let matchCount = markers.filter { codeShort.contains($0) }.count
if matchCount >= 2 { return language }
}
return .unknown
}
| Метод | Точность | Скорость | Идеально для |
|---|---|---|---|
| Эвристика маркеров | ~90% | Быстро (5x быстрее API) | Мобильный клиент, незначительная задержка |
| github-linguist | >95% | Медленно | Серверный парсер, точность критична |
| API (трансформер) | >99% | Очень медленно | Веб, где время не критично |
Эвристика на маркерах — оптимальный выбор для мобильного приложения: точность 90% и скорость в 5 раз выше, чем у API. Это даёт экономию времени до 80% по сравнению с вызовом внешнего сервиса.
Какие уровни объяснения поддерживаются?
Одно объяснение не подходит всем. Новичок хочет «что делает этот код вообще», опытный разработчик — «почему именно так, а не через lazy var». Мы реализовали три уровня:
enum ExplainLevel {
case beginner, intermediate, expert
var instruction: String {
switch self {
case .beginner:
return "Explain this code for someone new to programming. Avoid jargon. Use simple analogies."
case .intermediate:
return "Explain what this code does, why key design decisions were made, and potential edge cases."
case .expert:
return "Analyze this code: architecture patterns used, performance implications, thread safety, potential issues."
}
}
}
Уровень можно определять автоматически — по частоте использования режима «beginner» или скорости чтения ответов. Или дать пользователю переключатель.
Что делать со сложными конструкциями?
Регулярные выражения, битовые операции, сложные дженерики — это отдельный класс. Для них в промпт добавляем специальные инструкции: «If the code contains regex patterns, explain each group separately. If it uses bitwise operations, explain the binary logic. If it uses generics or type constraints, explain why they're necessary.» Для regex дополнительно используем встроенную визуализацию через NSRegularExpression с пошаговым разбором групп. Например, шаблон ^(\d{3})-\w+$ разбивается на три группы — начало строки, три цифры, дефис, остаток.
Построчное объяснение
Для коротких фрагментов (< 20 строк) удобен формат с объяснением каждой строки. Мы отправляем промпт с инструкцией: «Explain this code line by line. Format: Line N: [explanation] (skip blank lines and closing braces unless important).» В UI — overlay поверх редактора: пользователь тапает строку, и рядом появляется всплывающее объяснение.
// Android Compose - объяснение строки по тапу
@Composable
fun CodeWithExplanations(
code: String,
explanations: Map<Int, String> // lineNumber -> explanation
) {
val lines = code.lines()
LazyColumn {
itemsIndexed(lines) { index, line ->
Column(modifier = Modifier.clickable { /* запрос объяснения */ }) {
Row {
Text(
text = "${index + 1}",
modifier = Modifier.width(32.dp),
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodySmall.copy(fontFamily = FontFamily.Monospace)
)
Text(
text = line,
style = MaterialTheme.typography.bodySmall.copy(fontFamily = FontFamily.Monospace)
)
}
explanations[index + 1]?.let { explanation ->
Text(
text = explanation,
modifier = Modifier
.fillMaxWidth()
.background(MaterialTheme.colorScheme.secondaryContainer)
.padding(horizontal = 8.dp, vertical = 4.dp),
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSecondaryContainer
)
}
}
}
}
}
Почему важно кэширование?
Одинаковый код объяснять повторно не нужно. Кэш по хэшу SHA256(code + language + level) с TTL 7 дней на устройстве — это экономия трафика до 60% и времени. На iOS — NSCache для сессии и Core Data для персистентного хранения, на Android — LruCache и Room. Кэш гарантирует, что пользователь не будет ждать повторно один и тот же ответ. В проектах с типовыми фрагментами кэш покрывает до 40% запросов.
Процесс работы и что входит в результат
- Анализ требований — изучаем контекст: обучающая платформа, code review, IDE? Фиксируем список поддерживаемых языков, уровни объяснения, нужна ли офлайн-работа.
- Проектирование архитектуры — определяем схему потоков: ввод кода → детекция языка → выбор уровня → запрос к AI → кэширование → вывод.
- Реализация — пишем модули на Swift (iOS) и Kotlin (Android), интегрируем выбранный AI-сервис (OpenAI, Gemini и др.).
- Интеграция — встраиваем UI-компоненты (построчный overlay, переключатель уровня), настраиваем обработку ошибок.
- Тестирование — проверяем на 50+ типовых фрагментах, включая сложные регулярки и редкие языки.
- Деплой — публикуем в App Store и Google Play, предоставляем документацию и поддержку первого месяца.
Отметим: Что входит в работу:
- Архитектурная документация и API для интеграции
- Исходный код модулей на Swift и Kotlin с подробными комментариями
- Обучение вашей команды (2–3 сессии по 1 часу)
- Гарантия и техническая поддержка в течение 1 месяца после релиза
Ориентиры по срокам
| Компонент | Срок |
|---|---|
| Базовое объяснение (вставка + генерация) | 2–3 дня |
| Построчный режим + автоопределение языка + уровни + кэш | 1,5 недели |
| Полная интеграция с существующим проектом | Индивидуально |
Свяжитесь с нами для индивидуальной оценки вашего проекта. Мы подберём оптимальное решение с учётом ваших требований и бюджета. Закажите реализацию AI-объяснения кода под ключ — получите консультацию уже сегодня.







