1. C#-компілятор
Комп’ютер не розуміє людську мову. Комп’ютер не розуміє навіть мови програмування. Він розуміє тільки програми, написані машинними кодами — які складаються з нулів і одиничок.
Для собак є команди — «Поруч», «Лапу» та інші: почувши їх, собака виконує щось важливе. Для комп’ютера їхню роль виконують числа: кожна команда закодована певним числом (його ще називають машинним кодом).
Писати програму у вигляді чисел дуже складно, тому люди вигадали мови програмування і компілятори. Така мова з одного боку зрозуміла людині, з іншого — компілятору. Компілятор — це спеціальна програма, яка перекладає текст програми, написаний мовою програмування, у набір машинних кодів.
Зазвичай програміст пише код мовою програмування, а потім запускає компілятор, який на основі цих файлів створює один файл із машинним кодом — фінальну (скомпільовану) програму.
- Програма мовою C++
-
Компілятор
- Програма, що складається з машинних кодів
У результаті отримана програма одразу може виконуватися на комп’ютері. Мінус такого підходу в тому, що код отриманої програми сильно залежить від процесора й операційної системи. Програма, скомпільована під Windows, не працюватиме на телефоні з Android.
Якщо ви написали програму під Android, то на операційній системі Windows вона не запуститься!
Але у C# підхід значно сучасніший.
- Програма мовою C#
-
C#‑компілятор
- Програма, що складаєтьсязі спеціальних IL-кодів (байт‑код)
-
CLR
- Програма, що складається з машинних кодів
Компілятор C# не компілює всі класи в один файл із машинним кодом. Замість цього він компілює ваш код не в машинні коди, а у спеціальний проміжний IL‑код (байт‑код). Компіляція в машинний код відбувається під час запуску програми.
А хто ж компілює програму в машинний код під час її запуску?
Для цього є спеціальна програма під назвою CLR (Common Language Runtime) — віртуальна машина C#. Спочатку запускають її, а потім — програму, що складається з байт‑коду. А вже CLR перед виконанням потрібної програми компілює її в машинний код.
Якщо у вас потужний процесор, який підтримує більший набір машинних команд, то під час «другої компіляції» згенерується машинний код з урахуванням саме вашого процесора та ОС. Саме тому C# іноді швидший, ніж C++, який одразу компілюється в машинний код і може використовувати тільки найпоширеніші команди процесора.
2. Типові помилки під час компіляції
Швидкість і оптимізація коду нам поки що не дуже важливі, а от що важливо — це те, що компілятор перевіряє вашу програму на помилки. Він перевіряє код на коректність і не пропускає його далі, якщо знаходить навіть маленьку помилку.
Приклад помилки:
Ви намагаєтеся присвоїти число змінній, яка може зберігати тільки текст.
string userName = 42; // Ой! Так не можна.
Компілятор одразу повідомить про несумісність типів: «Cannot implicitly convert type 'int' to 'string'».
Інший приклад — помилка у виклику методу WriteLine():
Console.WriteLin("Привіт!"); // Помилка в назві методу
Компілятор скаже: «Немає такого методу — перевірте синтаксис!»
Як читати помилки?
Більшість компіляторів підказують, де в коді помилка, і навіть іноді пропонують варіанти виправлення. Не бійтеся помилок: кожна з них — це крок до просвітлення і перемоги над вашим внутрішнім «босом».
3. Коментарі
Отже, уявіть: ви пишете складну програму. Усе працює, ви — геній! Але за місяць відкриваєте той самий код і… нічого не розумієте. Пара рядків коду тут, дивна змінна там. У голові тільки: «Це явно писав хто завгодно, але не я!». Ось тут і рятують коментарі.
Коментарі — це як нотатки на полях підручника або підписи на холодильнику («Пиво. Не пити. На ранок!»). Компілятор їх ігнорує, а люди — навпаки. Коментарі дають змогу пояснити сенс коду, позначати важливі деталі і навіть «вимикати» фрагменти програм, не видаляючи їх.
Важливо: жоден компілятор не читає ваші коментарі — вони повністю ігноруються!
Однорядкові коментарі
У C# є два види коментарів — однорядкові й багаторядкові. Однорядкові починаються з двох слешів // і тривають до кінця рядка. Усе, що стоїть після //, вважається коментарем і абсолютно ігнорується компілятором.
Приклад:
Console.WriteLine("Привіт, світ!"); // Це виводить привітання на екран
Ось тут // Це виводить привітання на екран — це коментар. Якщо у коді незрозуміло, навіщо потрібен рядок, так і напишіть!
Ще приклад:
int x = 42; // Значення віку програміста
Можна писати однорядкові коментарі й на окремих рядках:
// Ініціалізація змінної з іменем користувача
string userName = "Вася";
Майже як репліки у сценарії: коментар пояснює, навіщо і чому.
Багаторядкові коментарі
Що, як у вас накопичилося багато всього? Справжня історія? Для цього є багаторядкові коментарі, які починаються з /* і закінчуються символами */. Усе між цими символами ігнорується компілятором, навіть якщо це кілька рядків.
Приклад:
/*
Тут ми виводимо ім’я користувача на екран.
Якщо ім’я відсутнє, напишемо "Гість".
*/
Console.WriteLine("Введіть ваше ім’я:");
Або так:
int age = 18; /* Початкове значення віку
для нового користувача */
Увага: не можна вкладати одні багаторядкові коментарі в інші. Не намагайтеся бути хитрішими за компілятор — це не спрацює.
Ілюстрація:
| Вид | Синтаксис | Приклад |
|---|---|---|
| Однорядковий | // коментар |
int x = 1; // пояснення |
| Багаторядковий | /* всяке тут */ |
/* тут можна пояснити все, що хочеш */ |
4. Приклади з життя
«Вимкнення» рядка коду:
Буває, що ви тимчасово хочете не виконувати якийсь фрагмент коду. Коментарі тут якраз до місця:
// Console.WriteLine("Текст, який тимчасово не потрібен");
Рядок залишився, але компілятор його не «бачить».
Позначки TODO і FIXME
Програмісти — теж люди, і іноді треба самому собі нагадати, що код ще не дороблено, або що тут є помилка. Для цього часто пишуть:
// TODO: зробити перевірку на порожнє введення
// FIXME: ця функція неправильно обчислює суму
Багато редакторів і IDE навіть виділяють такі слова!
Програмісти жартують
Ну і, звісно, іноді в коді трапляються дуже цікаві коментарі:
// Я не відповідаю за цей код. Мене змусили написати його проти моєї волі.
// Дорогий, я_з_майбутнього! Будь ласка, пробач мене за цей код.
// Якщо я ще раз побачу таке, мені доведеться почати носити на роботу зброю.
// Якщо ця умова колись виконається, будь ласка, повідом мені за тел. ххх-ххх-ххх за винагороду.
// Дорогий програміст:
//
// Коли ти закінчиш «оптимізувати» цю підпрограму
// і зрозумієш, якою великою помилкою було це робити,
// будь ласка, збільшіть лічильник внизу як попередження
// для наступного хлопця:
//
// кількість_годин_витрачених_тут = 42
// Коли я починав це писати, тільки Бог і я розуміли, що я роблю.
// Зараз залишився тільки Бог.
// Іноді мені здається, що компілятор ігнорує усі мої коментарі
// Я присвячую весь свій код, всю роботу своїй дружині Дарлін, якій
// доведеться утримувати мене, наших трьох дітей і собаку, коли
// це піде у продакшн.
Так, коментарі можуть бути дуже смішними. Адже їх пишуть живі люди.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ