Консольный ввод и вывод в Kotlin
Консольный ввод и вывод
Многие первые программы на Kotlin — консольные: текст в терминале, ввод с клавиатуры, без окон и кнопок. Так же устроены утилиты сборки, скрипты миграции и серверы вроде Ktor — они пишут логи в консоль, даже если основная работа идёт по сети.
Старт с нуля: первая программа. Дальше — корутины, коллекции.
Словарь терминов
| Термин | Простыми словами |
|---|---|
| Консоль / терминал | Окно, куда программа печатает текст и откуда читает ввод пользователя. |
| stdout | Стандартный поток вывода — обычный текст (println). |
| stderr | Поток для сообщений об ошибках — отделён от обычного вывода. |
| stdin | Стандартный ввод — то, что пользователь набирает с клавиатуры. |
| Аргументы командной строки | Слова после имени программы: java -jar app.jar Анна 25 → Анна, 25. |
| Интерполяция строк | Вставка переменных в строку: "Привет, $name". |
Вывод в консоль
fun main() {
print("Введите имя: ") // без перевода строки в конце
println("Готово.") // с переводом строки
System.err.println("Ошибка конфигурации") // в stderr
}
| Функция | Эффект |
|---|---|
print(...) | Печать без \n в конце |
println(...) | Печать и переход на новую строку |
System.err.println | Сообщение об ошибке (в IDE часто красным) |
Интерполяция
val n = 42
println("Ответ: $n, квадрат: ${n * n}")
$n— подставить значение переменной.${n * n}— подставить результат выражения (всё внутри фигурных скобок).
Многострочный текст
val help = """
Использование: app <имя>
Пример: app Анна
""".trimIndent()
println(help)
Тройные кавычки сохраняют переносы; trimIndent() убирает общий отступ слева.
Ввод с клавиатуры
С Kotlin 1.6+ для учебных задач удобен readln():
fun main() {
print("Имя: ")
val name = readln()
print("Возраст: ")
val age = readln().toIntOrNull() ?: run {
println("Нужно целое число")
return
}
println("Привет, $name! Через год вам будет ${age + 1}.")
}
Разбор:
| Строка | Смысл |
|---|---|
readln() | Ждёт Enter, возвращает строку без символа перевода строки. |
toIntOrNull() | Преобразует "42" → 42, "abc" → null без падения программы. |
?: run { ... return } | Если число не распарсилось — напечатать сообщение и выйти из main. |
readLine() — вариант с nullable
val line = readLine()
if (line.isNullOrBlank()) {
println("Пустой ввод")
}
readLine() совместим с Java API и возвращает String? (null при конце ввода / EOF).
Аргументы командной строки
fun main(args: Array<String>) {
if (args.isEmpty()) {
println("Укажите имя: app <имя>")
return
}
val name = args[0]
val greet = args.getOrElse(1) { "Привет" }
println("$greet, $name!")
}
| Выражение | Пример args = ["Анна", "Здравствуй"] |
|---|---|
args[0] | "Анна" |
args.getOrElse(1) { "Привет" } | "Здравствуй"; если второго нет — "Привет" |
Запуск:
./gradlew run --args="Анна"
java -jar app.jar Анна Здравствуй
В IntelliJ IDEA: Run → Edit Configurations → Program arguments.
Цикл «меню»
fun main() {
while (true) {
println("1 — сложить 2 — выход")
when (readln().trim()) {
"1" -> {
val a = readln().toIntOrNull() ?: continue
val b = readln().toIntOrNull() ?: continue
println(a + b)
}
"2" -> break
else -> println("Неизвестная команда")
}
}
}
when— аналогswitchс удобными ветками.continue— пропустить итерацию и снова показать меню, если ввод не число.break— выйти изwhile.
Без toIntOrNull() строка "два" вызовет NumberFormatException и программа упадёт.
Чтение файла
import java.io.File
fun main() {
val path = readln().trim()
val lines = File(path).readLines()
println("Строк: ${lines.size}")
lines.take(5).forEach { println(it) }
}
readLines() загружает весь файл в память. Для гигабайтных логов используйте Sequence и useLines { }.
Кодировка и Windows
Консоль Windows иногда показывает кириллицу некорректно.
- PowerShell:
chcp 65001перед запуском (UTF-8). - Gradle
run: JVM-флаг-Dfile.encoding=UTF-8.
В Linux и macOS UTF-8 обычно уже включён.
Частые ошибки
| Симптом | Причина |
|---|---|
NumberFormatException | toInt() вместо toIntOrNull() |
Пустая строка после readln() | Пользователь нажал Enter без текста — проверяйте isBlank() |
| Кракозябры в Windows | Кодировка консоли — см. выше |
Связанные материалы
- Первая программа
- Коллекции и Sequence
- Простые приложения
- Ktor — сервер с логами в консоль
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). История Kotlin - создание языка JetBrains для плавной совместимости с Java и современной разработки. Экосистема Kotlin-приложений - инструменты, фреймворки и мультиплатформенные сценарии разработки. Kotlin — это современный язык программирования общего назначения, который работает на платформе Java Virtual Machine (JVM), а также компилируется в JavaScript или нативный код. Набор советов, правил, принципов и обычаев в разработке на этом языке. Основы Kotlin - архитектура проекта, платформенные модули и базовые принципы разработки на языке. Типизация, набор правил определения типа данных значений языка. Операторы и выражения в Kotlin - логика вычислений, приоритеты операций и идиоматичный стиль записи условий. Циклы и управляющие конструкции в Kotlin - идиоматичные способы итерации, условия и управление выполнением. ООП в Kotlin - классы, модификаторы доступа, наследование и идиоматичное проектирование объектных структур. Кавычки, точки, запятые, скобки и прочие знаки препинания. Kotlin использует набор зарезервированных слов для построения синтаксических конструкций языка. Все ключевые слова разделены на категории по назначению. Набор функций, которые включены в стандартную библиотеку языка.История языка Kotlin
Экосистема Kotlin-приложений
Что требуется знать перед началом изучения языка программирования Kotlin
Рекомендации по разработке на Kotlin
Основы языка Kotlin
Типы данных и объявление переменных
Операторы и выражения в Kotlin
Циклы и управляющие конструкции
Объектно-ориентированное программирование в Kotlin
Синтаксис и пунктуация в Kotlin
Ключевые слова языка Kotlin
Встроенные функции и расширения Kotlin