Підрозділ 2.3
Літерали
Розглядає літерали як фіксовані значення в коді: логічні, цілі, дробові, символьні, рядкові та null-значення.
2.3. Літерали
Літерали — це фіксовані значення, записані безпосередньо у вихідному коді програми. Коли ми пишемо 42, 3.14, "Привіт" або true — все це літерали. На відміну від змінних, значення якої може змінюватись під час виконання, літерал завжди означає одне й те саме конкретне значення, відоме ще на етапі компіляції.
Літерали можна передавати змінним як значення, передавати як аргументи методів або використовувати безпосередньо у виразах. У C# є кілька видів літералів: логічні, цілочисленні, речові, символьні, рядкові та спеціальний літерал null.
Логічні літерали
Є лише два логічних літерали — true (істина) і false (хибність). Вони відповідають типу bool і є єдиними допустимими значеннями для логічних змінних:
Цілочисленні літерали
Цілочисленні літерали представляють цілі числа — позитивні та негативні. Вони можуть бути виражені у трьох системах числення: десятковій, двійковій та шістнадцятковій.
З числами у десятковій формі все звично — вони використовуються в повсякденному житті:
Числа у двійковій формі передуються символами 0b, після яких іде набір з нулів та одиниць:
Для запису числа у шістнадцятковій формі використовуються символи 0x, після яких іде набір символів від 0 до 9 і від A до F:
Починаючи з C# 7, у цілочисленних літералах можна використовувати символ підкреслення _ як розділювач розрядів для покращення читабельності. Компілятор його повністю ігнорує:
Речові літерали
Речові літерали представляють дробові числа. Перша форма — числа з фіксованою крапкою, де дробову частину відокремлено від цілої крапкою:
Також речові літерали можуть задаватися в експоненційній формі MEp, де M — мантиса, E — ознака степеня, p — порядок (степінь десяти). Наприклад, 3.2e3 означає 3.2 × 10³ = 3200:
За замовчуванням всі речові літерали є значеннями типу double. Якщо потрібно явно вказати тип float або decimal, використовуються суфікси: f або F для float, m або M для decimal:
Тип decimal особливо важливий для фінансових розрахунків, оскільки він не має похибок округлення, характерних для float і double при роботі з десятковими дробами.
Символьні літерали
Символьні літерали представляють одиночний символ. Символ береться в одинарні лапки і відповідає типу char. Кожен символ кодується у Unicode і займає 2 байти.
Найпростіший вид — звичайні символи:
Окрему групу складають керуючі послідовності — спеціальні комбінації символів, що починаються зі зворотного слішу \. Вони інтерпретуються компілятором не як два символи, а як один спеціальний:
Символи також можна визначати через шістнадцяткові коди ASCII, вказуючи після \x шістнадцятковий код символу:
Ще один спосіб — визначення через коди Unicode. Після \u вказується чотиризначний шістнадцятковий код символу з таблиці Unicode:
Рядкові літерали
Рядкові літерали представляють рядки — послідовності символів. Рядок береться в подвійні лапки і відповідає типу string:
Якщо всередині рядка необхідно використати подвійну лапку, вона екранується зворотним слішем \":
У рядках також можна використовувати керуючі послідовності. Зокрема, \n здійснює перехід на новий рядок:
Якщо рядок містить багато зворотних слішів (наприклад, шляхи до файлів), зручно використовувати verbatim-рядок з префіксом @. У такому рядку зворотний сліш не є спеціальним символом і не потребує екранування:
Verbatim-рядок також може бути багаторядковим — переноси рядка всередині @"..." включаються у значення як є:
null
Окремий літерал null представляє відсутність посилання — тобто посилання, яке не вказує на жодний об'єкт. По суті, null означає «немає значення» або «значення невідоме».
Значення null може бути присвоєне будь-якій змінній reference-типу — рядкам, масивам, об'єктам класів:
Спроба звернутися до члена або методу змінної, що містить null, спричинить виняток NullReferenceException під час виконання — одну з найпоширеніших помилок у програмуванні. Саме тому перевірка на null перед використанням є важливою звичкою.