JavaRush /Курси /C# SELF /Компілятор і коментарі

Компілятор і коментарі

C# SELF
Рівень 1 , Лекція 5
Відкрита

1. C#-компілятор

Комп’ютер не розуміє людську мову. Комп’ютер не розуміє навіть мови програмування. Він розуміє тільки програми, написані машинними кодами — які складаються з нулів і одиничок.

Для собак є команди — «Поруч», «Лапу» та інші: почувши їх, собака виконує щось важливе. Для комп’ютера їхню роль виконують числа: кожна команда закодована певним числом (його ще називають машинним кодом).

Писати програму у вигляді чисел дуже складно, тому люди вигадали мови програмування і компілятори. Така мова з одного боку зрозуміла людині, з іншого — компілятору. Компілятор — це спеціальна програма, яка перекладає текст програми, написаний мовою програмування, у набір машинних кодів.

Зазвичай програміст пише код мовою програмування, а потім запускає компілятор, який на основі цих файлів створює один файл із машинним кодом — фінальну (скомпільовану) програму.

  • Програма мовою C++
  • Компілятор
  • Програма, що складається з машинних кодів
Етапи компіляції для мови C++

У результаті отримана програма одразу може виконуватися на комп’ютері. Мінус такого підходу в тому, що код отриманої програми сильно залежить від процесора й операційної системи. Програма, скомпільована під Windows, не працюватиме на телефоні з Android.

Якщо ви написали програму під Android, то на операційній системі Windows вона не запуститься!

Але у C# підхід значно сучасніший.

  • Програма мовою C#
  • C#‑компілятор
  • Програма, що складаєтьсязі спеціальних IL-кодів (байт‑код)
  • CLR
  • Програма, що складається з машинних кодів
Етапи компіляції для мови C#

Компілятор 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
// Коли я починав це писати, тільки Бог і я розуміли, що я роблю.
// Зараз залишився тільки Бог.
// Іноді мені здається, що компілятор ігнорує усі мої коментарі
// Я присвячую весь свій код, всю роботу своїй дружині Дарлін, якій
// доведеться утримувати мене, наших трьох дітей і собаку, коли
// це піде у продакшн.

Так, коментарі можуть бути дуже смішними. Адже їх пишуть живі люди.

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