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
- Програма, що складається з машинних кодів
Якщо у вас потужний процесор, який підтримує ширший набір машинних команд, то під час такого перекладу й оптимізації 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 /* Початкове значення віку
для нового користувача */
Увага: не можна вкладати одні багаторядкові коментарі в інші. Не намагайтеся бути хитрішими за компілятор — це не спрацює.
Ілюстрація:
| Вид | Синтаксис | Приклад |
|---|---|---|
| Однорядковий | |
|
| Багаторядковий | |
|
4. Приклади з життя
«Вимкнення» рядка коду:
Буває, що ви тимчасово не хочете виконувати якийсь фрагмент коду. У такій ситуації коментарі дуже доречні:
// println("Текст, який тимчасово не потрібен")
Рядок залишився, але компілятор його не «бачить».
Позначки TODO і FIXME
Програмісти — теж люди. Іноді треба нагадати самому собі, що код ще не дороблено або що тут є баг. Для цього часто пишуть:
// TODO: зробити перевірку на порожнє введення
// FIXME: ця функція неправильно рахує суму
Багато редакторів та IDE навіть підсвічують такі слова!
Програмісти жартують
// Я не відповідаю за цей код. Мене змусили написати його проти моєї волі.
// Дорогий я_з_майбутнього! Будь ласка, пробач мені цей код.
// Якщо я ще раз побачу таке, мені доведеться почати носити на роботу щось для самозахисту.
// Якщо ця умова колись виконається, будь ласка, повідомте мені за тел. ххх-ххх-ххх за винагороду.
// Дорогий програмісте:
//
// Коли ти закінчиш «оптимізувати» цю підпрограму
// і зрозумієш, наскільки великою помилкою було робити це,
// будь ласка, збільш лічильник як попередження
// для наступної людини:
//
// кількість_годин_витрачених_тут = 42
// Коли я починав це писати, лише Бог і я розуміли, що я роблю.
// Зараз залишився тільки Бог
// Іноді мені здається, що компілятор ігнорує всі мої коментарі
// Я присвячую весь свій код, усю роботу своїй дружині Дарлін, якій
// доведеться утримувати мене, наших трьох дітей і собаку, коли
// це піде в продакшн.
Так, коментарі можуть бути дуже смішними. Адже їх пишуть живі люди.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ