JavaRush /Курсы /Kotlin SELF /Компилятор и комментарии в Kotlin

Компилятор и комментарии в Kotlin

Kotlin SELF
1 уровень , 5 лекция
Открыта

1. Знакомство с компилятором

Компьютер не понимает человеческий язык. Компьютер не понимает даже языки программирования. Он понимает только программы, написанные в машинных кодах — состоящие из нулей и единичек. Люди же мыслят словами, идеями и, конечно же, им сложно сочинять целые программы из одних только 0 и 1.

00100100 переводится как десятичное число 36 или знак $

Поэтому и появились языки программирования вроде Kotlin. Они стали своего рода "переводчиками": теперь программист может написать команды «Сделай то-то и то-то» на понятном ему языке, а не в виде длинной цепочки команд процессору.

Но есть одна загвоздка. Компьютер всё равно не понимает Kotlin! Если просто скормить ему файл с кодом, он пожмёт плечами и ничего не сделает. Именно для этой ситуации и существует компилятор.

Что же такое компилятор?

Компилятор — это специальная программа, которая компилирует код: переводит Kotlin-код в код, понятный компьютеру. Он берёт текст на Kotlin, разбирает его, проверяет на ошибки и превращает в байт-код для виртуальной машины JVM.

        flowchart TD
    A[📝 Kotlin-код] --> B[Компилятор]

    B --> C{Есть ошибки?}

    C -->|Да ❌| H[Сообщение об ошибке Вернуться к коду]
    H --> A

    C -->|Нет ✅| I[⚙️ Генерация байт-кода]

    I --> J[Байт-код JVM]

    J --> K[Виртуальная машина JVM]

    K --> L[Выполнение программы]

    style A fill:#7B68EE,color:#fff
    style B fill:#FF8C00,color:#fff
    style J fill:#20B2AA,color:#fff
    style K fill:#3CB371,color:#fff
    style L fill:#3CB371,color:#fff
    style H fill:#DC143C,color:#fff
    
Это упрощённая схема для понимания общей идеи.

Можно представить компилятор как строгого учителя, который:

  • внимательно проверяет фразы (а не допустил ли ты ошибку?),
  • заставляет соблюдать правила (например, правильные имена переменных, скобки, типы…),
  • и только после этого допускает до собеседования с компьютером!

Если бы не компилятор, написание программы было бы похоже на сочинение “Войны и мира” в азбуке Морзе.

Компилятор ещё умнее

Компилятор Kotlin сейчас стал ещё умнее — он может не только переводить, но и оптимизировать код, подсказывать ошибки и даже советовать, как писать лучше. И ещё много-много всего.

Если говорить про Kotlin на JVM (то есть обычные консольные приложения/бэкенд на JVM), то обычно получается так:

  • На первом этапе ваш Kotlin-код преобразуется в специальный промежуточный байт-код JVM.
  • А уже потом во время выполнения JVM (виртуальная машина) переводит этот байт-код в настоящие машинные команды процессора (и может делать это с учётом конкретной машины).
  • Программа на языке Kotlin
  • Kotlin‑компилятор
  • Программа, состоящая из специальных кодов (байт‑код)
  • Java VM
  • Программа, состоящая из машинных кодов
Этапы компиляции для языка Kotlin

Если у вас крутой процессор, который поддерживает больший набор машинных команд, то во время такого перевода/оптимизаций JVM может сгенерировать машинный код с учётом сильных сторон вашего процессора и ОС. Именно поэтому программы на JVM-языках (включая Kotlin) в некоторых задачах могут быть очень быстрыми.

Не только JVM

Изначально Kotlin создавался прежде всего как язык для JVM (то есть “как Java, только удобнее”). Поэтому долгое время основной сценарий был такой: Kotlin-код → байт-код JVM → выполнение в JVM.

Но позже у Kotlin появились и другие “режимы компиляции” (другие сценарии запуска):

  • Kotlin/JVM — самый классический вариант: консоль, сервер, Android (частично), всё в мире JVM.
  • Kotlin/JS — компиляция в JavaScript для браузера или Node.js.
  • Kotlin/Native — компиляция в нативный машинный код (например, для iOS, macOS, Windows, Linux).
  • Kotlin Multiplatform — подход, когда часть кода общая, а часть платформо-зависимая, и проект может собираться сразу под несколько целей.

При этом идея остаётся той же: компилятор берёт Kotlin-код и превращает его в формат, который “понимает” целевая платформа — JVM, браузер (JS) или нативная ОС.

2. Типовые ошибки при компиляции

Скорость и оптимизация кода нам пока что не сильно важна, а вот что важно, так это то, что компилятор проверяет вашу программу на ошибки. Он проверяет код на корректность и не пустит его дальше, если нашёл даже маленькую ошибку.

Пример ошибки:

Вы пытаетесь присвоить число переменной, которая может хранить только текст.

val userName: String = 42 // Ой! Нельзя так.

Компилятор сразу выдаст ошибку, что типы не соответствуют (в духе): Type mismatch: inferred type is Int but String was expected.

Другой пример — опечатка в команде println:

printline("Привет!") // Ошибка в названии функции

Компилятор скажет что-то вроде: “Нет такой функции — проверяй синтаксис!” (например, Unresolved reference: printline).

Как читать ошибки?

Большинство компиляторов подсказывают, где в коде ошибка, и даже иногда предлагают варианты исправления. Не бойтесь ошибок: каждая из них — это шаг к просветлению и прохождению вашего внутреннего "босса".

3. Комментарии

Читаю код того самого чела, который утверждал: «Мой код в комментариях не нуждается, он понятен и так».

Итак, представьте: вы пишете сложную программу. Всё работает, вы — гений! Но через месяц вы открываете тот самый код и... ничего не понимаете. Пару строчек кода тут, странная переменная там. В голове только: «Это явно писал кто угодно, но не я!». Вот тут-то и спасают комментарии.

Комментарии — это как записки на полях учебника или подписи на холодильнике ("Пиво. Не пить. На утро!"). Компилятор их игнорирует, а люди — наоборот. Комментарии позволяют объяснить смысл кода, помечать важные детали и даже «выключать» куски программ, не удаляя их.

Важно: компилятор не читает ваши комментарии, они полностью игнорируются!

Однострочные комментарии

В Kotlin (как и в Java) есть два вида комментариев — однострочные и многострочные. Однострочные начинаются с двойного слеша // и идут до конца строки. Всё, что находится после //, считается комментарием и абсолютно игнорируется компилятором.

Пример:

println("Привет, мир!") 	// Это выводит приветствие на экран

Вот тут // Это выводит приветствие на экран — комментарий. Если в коде кажется непонятным, зачем нужна строка, вот так и пишите!

Ещё пример:

val x = 42 	// Значение возраста программиста

Можно писать однострочные комментарии и на отдельных строках:

// Инициализация переменной с именем пользователя
val userName = "Вася"

Почти как реплики в сценарии: комментарий объясняет, зачем и почему.

Многострочные комментарии

Что, если у вас много всего накопилось? Настоящая история? Для этого есть многострочные комментарии, которые начинаются с /* и заканчиваются на */. Всё между этими символами игнорируется компилятором, даже если это несколько строк.

Пример:

/*
  Здесь мы выводим имя пользователя на экран.
  Если имя отсутствует, напишем "Гость".
*/
println("Введите ваше имя:")

Или так:

var age = 18 /* Начальное значение возраста
                для нового пользователя */

Внимание: нельзя вложить одни многострочные комментарии в другие. Не пытайтесь быть хитрее компилятора — это не сработает.

Иллюстрация:

Вид Синтаксис Пример
Однострочный
// комментарий
val x = 1 // объяснение
Многострочный
/* всякое тут */
/* тут можно объяснить всё, что хотите */

4. Примеры из жизни

«Отключение» строки кода:

Бывает, что вы временно хотите не выполнять какой-то фрагмент кода. Комментарии тут как раз к месту:

// println("Текст, который временно не нужен")

Строчка осталась, но компилятор её не «видит».

Пометки TODO и FIXME

Программисты — тоже люди, и иногда нужно самому себе напомнить, что код ещё не доделан, или что тут есть баг. Для этого часто пишут:

// TODO: сделать проверку на пустой ввод
// FIXME: эта функция неверно считает сумму

Многие редакторы и IDE даже выделяют такие слова!

Программисты шутят

// Я не отвечаю за этот код. Меня заставили написать его против моего желания.
// Дорогой, я_из_будущего! Пожалуйста, прости меня за этот код.
// Если я ещё раз увижу такое, мне придётся начать носить на работу оружие.
// Если это условие когда-нибудь выполнится, пожалуйста, сообщите мне по тел. ххх-ххх-ххх за вознаграждение.
// Дорогой программист:
//
// Когда ты закончишь «оптимизировать» эту подпрограмму
// и поймёшь, насколько большой ошибкой было делать это,
// пожалуйста, увеличь счётчик внизу как предупреждение
// для следующего парня:
//
// количество_часов_потраченных_здесь = 42
// Когда я начинал это писать, только Бог и я понимали, что я делаю. 
// Сейчас остался только Бог
// Иногда мне кажется, что компилятор игнорирует все мои комментарии
// Я посвящаю весь свой код, всю работу своей жене Дарлин, которой 
// придётся содержать меня, наших троих детей и собаку, когда 
// это пойдёт в продакшн.

Да, комментарии могут быть очень смешными. Ведь их пишут живые люди.

1
Задача
Kotlin SELF, 1 уровень, 5 лекция
Недоступна
Комментарии рядом с выводом
Комментарии рядом с выводом
1
Задача
Kotlin SELF, 1 уровень, 5 лекция
Недоступна
Потерянный println
Потерянный println
1
Задача
Kotlin SELF, 1 уровень, 5 лекция
Недоступна
Выключить отладку
Выключить отладку
1
Задача
Kotlin SELF, 1 уровень, 5 лекция
Недоступна
Цепочка поломок
Цепочка поломок
1
Опрос
Знакомство с Kotlin, 1 уровень, 5 лекция
Недоступен
Знакомство с Kotlin
Команды и первая программа в Kotlin
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Иван Уровень 11
1 апреля 2026
Первая задача, запустил валидатор первый раз - красное, второй раз - все позеленело, ничего не менял
Nikolay Уровень 2
25 марта 2026
С коментариями всё понятно!) Ехаем далее! Димон ты где?))) Дошёл до сюда?