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, рівень 1, лекція 5
Недоступний
Знайомство з Kotlin
Команди та перша програма в Kotlin
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ