1. Java‑компілятор
До речі, ви ще не раз почуєте, що беззаперечна перевага Java над іншими мовами — це кросплатформність. Що це таке і як це працює? Почнімо здалеку.
Річ у тім, що компʼютер уміє виконувати лише найпростіші команди.
Для собак є команди «Поруч», «Лапу» та інші — почувши їх, собака робить щось важливе. У компʼютера роль таких команд відіграють числа: кожна команда закодована певним числом (його ще називають машинним кодом).
Писати програму у вигляді чисел дуже складно, тому люди вигадали мови програмування і компілятори. Така мова з одного боку — зрозуміла людині, з іншого — компілятору. Компілятор — це спеціальна програма, яка перетворює текст програми, написаний мовою програмування, у набір машинних кодів.
Зазвичай програміст пише програму мовою програмування, а потім запускає компілятор, який на основі написаних програмістом файлів із кодом формує єдиний файл із машинним кодом — кінцеву (скомпільовану) програму.
- Програма мовою C++
-
Компілятор
- Програма, що складається з машинних кодів
У результаті отримана програма одразу може виконуватися на компʼютері. Мінус цього підходу в тому, що код отриманої програми сильно залежить від процесора й операційної системи. Програма, скомпільована під Windows, не працюватиме на телефоні з Android.
Якщо ви написали програму для Android, то в операційній системі Windows вона не запуститься!
А от у Java підхід інший — значно гнучкіший.
- Програма мовою Java
-
Java‑компілятор
- Програма, що складається зі спеціальних кодів (байт‑код)
-
Java VM
- Програма, що складається з машинних кодів
Компілятор Java не компілює всі класи в одну програму з машинних кодів. Замість цього він компілює кожен клас окремо — і не в машинні коди, а у спеціальний проміжний код (байт‑код). Компіляція в машинний код виконується під час запуску програми.
А хто ж компілює програму в машинний код під час її запуску?
Для цього є спеціальна програма під назвою JVM (Java Virtual Machine) — віртуальна машина Java. Спочатку запускають її, а потім — програму, що складається з байт‑коду. І вже JVM перед виконанням вашої програми компілює її в машинний код.
Якщо у вас потужний процесор, який підтримує ширший набір машинних команд, то під час «другої компіляції» згенерується машинний код з урахуванням саме вашого процесора та ОС. Саме тому Java інколи швидша за C++, який одразу компілюється в машинний код і може використовувати лише найпоширеніші команди процесора.
2. Типові помилки під час компіляції
Поки що швидкість і оптимізація коду — не головне. Важливіше інше: компілятор перевіряє вашу програму на помилки. Він перевіряє код на коректність і не пропустить його далі, якщо знайде навіть дрібну помилку.
Приклад помилки:
Ви намагаєтеся присвоїти число змінній, яка може зберігати лише текст.
String userName = 42; // Ой! Так не можна.
Компілятор одразу видасть помилку про невідповідність типів: Неможливо неявно перетворити тип «int» на «String».
Інший приклад — описка в назві методу println:
System.out.printline("Привіт!"); // Помилка в назві методу
Компілятор скаже: «Немає такого методу — перевірте синтаксис!»
Як читати помилки?
Більшість компіляторів підказують, де в коді помилка, і іноді навіть пропонують варіанти виправлення. Не бійтеся помилок: кожна з них — це крок до осяяння й перемоги над вашим внутрішнім босом.
3. Коментарі
Отже, уявіть: ви пишете складну програму. Усе працює, ви — геній! Але за місяць ви відкриваєте той самий код і... нічого не розумієте. Кілька рядків коду тут, дивна змінна там. У голові лише: «Це явно писав хто завгодно, але не я!» Ось тут і виручають коментарі.
Коментарі — це як нотатки на полях підручника або підписи на холодильнику («Пиво. Не пити. На ранок!»). Компілятор їх ігнорує, а люди — навпаки. Коментарі дають змогу пояснити сенс коду, позначити важливі деталі і навіть «вимикати» шматки програм, не видаляючи їх.
Важливо: жоден компілятор не читає ваші коментарі — вони цілковито ігноруються!
Однорядкові коментарі
У Java є два види коментарів — однорядкові та багаторядкові. Однорядкові починаються з подвійної косої риски // і тривають до кінця рядка. Усе, що розміщене після //, вважається коментарем і абсолютно ігнорується компілятором.
Приклад:
System.out.println("Привіт, світе!"); // Це виводить привітання на екран
Ось тут // Це виводить привітання на екран — коментар. Якщо в коді незрозуміло, навіщо потрібен рядок, так і пишіть!
Ще приклад:
int x = 42; // Значення віку програміста
Можна писати однорядкові коментарі й на окремих рядках:
// Ініціалізація змінної з іменем користувача
String userName = "Вася";
Майже як репліки у сценарії: коментар пояснює — навіщо і чому.
Багаторядкові коментарі
Що робити, якщо накопичилося чимало всього? Тоді стануть у пригоді багаторядкові коментарі. Для цього є багаторядкові коментарі, які починаються з /* і закінчуються на */. Усе між цими символами ігнорується компілятором, навіть якщо це кілька рядків.
Приклад:
/*
Тут ми виводимо імʼя користувача на екран.
Якщо імені немає, напишемо "Гість".
*/
System.out.println("Введіть ваше імʼя:");
Або так:
int age = 18; /* Початкове значення віку
для нового користувача */
Увага: не можна вкладати одні багаторядкові коментарі в інші. Не намагайтеся бути хитрішими за компілятор — це не спрацює.
Ілюстрація:
| Тип | Синтаксис | Приклад |
|---|---|---|
| Однорядковий | |
|
| Багаторядковий | |
|
4. Приклади з життя
«Вимкнення» рядка коду:
Буває, що ви тимчасово хочете не виконувати якийсь фрагмент коду. Коментарі тут якраз до місця:
// System.out.println("Текст, який тимчасово не потрібен");
Рядок залишився, але компілятор його не «бачить».
Позначки TODO і FIXME
Програмісти — теж люди, і часом треба самому собі нагадати, що код ще не завершений, або що тут є баг. Для цього часто пишуть:
// TODO: зробити перевірку на порожнє введення
// FIXME: ця функція неправильно рахує суму
Багато редакторів та IDE навіть підсвічують такі слова!
Програмісти жартують
// Я не відповідаю за цей код. Мене змусили написати його всупереч моєму бажанню.
// Дорогий, я_з_майбутнього! Будь ласка, пробач мене за цей код.
// Якщо я ще раз таке побачу, мені доведеться почати носити на роботу зброю.
// Якщо ця умова коли-небудь виконається, будь ласка, повідомте мені за тел. +380 XX XXX XX XX за винагороду.
// Дорогий програміст:
//
// Коли ви закінчите «оптимізувати» цю підпрограму
// і зрозумієте, наскільки великою помилкою було це робити,
// будь ласка, збільште лічильник внизу як попередження
// для наступного колеги:
//
// кількість_годин_витрачених_тут = 42
// Коли я починав це писати, лише Бог і я розуміли, що я роблю.
// Зараз залишився лише Бог.
// Іноді мені здається, що компілятор ігнорує всі мої коментарі.
// Я присвячую весь свій код, усю роботу своїй дружині Дарлін, якій
// доведеться утримувати мене, наших трьох дітей і собаку, коли
// це піде в продакшн.
Так, коментарі можуть бути дуже кумедними. Адже їх пишуть живі люди.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ