Що означає слово «буквальний»?


80

Що означає слово "літерал", коли воно використовується в такому контексті, як літеральні рядки та значення літералу?

У чому різниця між буквальним значенням і значенням?

Відповіді:


117

Буквал - це "будь-яке позначення для представлення значення у вихідному коді" ( wikipedia )

(Порівняйте це з ідентифікаторами , які посилаються на значення в пам'яті.)

Приклади:

  • "hey" (рядок)
  • false (логічне значення)
  • 3.14 (дійсне число)
  • [1,2,3] (список номерів)
  • (x) => x*x (функція)
  • /^1?$|^(11+?)\1+$/ (регулярний вираз)

Деякі речі, які не є буквальними:

  • std::cout (ідентифікатор)
  • foo = 0; (заява)
  • 1+2 (вираз)

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

1
Я навіть не знав, що це робиться: я просто думав, що показ літералу регулярного виразу взагалі є хорошою ідеєю.
Джоел Коухорн,

4
"будь-яке позначення для представлення цінності у вихідному коді" Визначення Вікіпедії сьогодні читаються як посилання на експертів, які вже знають, а не виконують певні педагогічні цілі - що вищеперекладене перекладається на "пояснити, як мені п'ять"?
BKSpurgeon

2
@BKSpurgeon В основному код, який представляє значення в програмі, замість того, щоб мати спеціальне значення для виконання програми. Наприклад: 15 буквально означає п'ятнадцять у програмі проти, +що має особливе значення "скласти дві речі разом". Ви не ставитесь +до того, що представляє сам знак плюс, оскільки він не є буквальним.
avid_useR

82

Літерал - це значення, яке було закодовано безпосередньо у вашому джерелі.

Наприклад:

string x = "This is a literal";
int y = 2; // so is 2, but not y
int z = y + 4; // y and z are not literals, but 4 is
int a = 1 + 2; // 1 + 2 is not a literal (it is an expression), but 1 and 2 considered separately are literals

Деякі літерали можуть мати спеціальний синтаксис, тому ви знаєте, що це за тип літералу:

//The 'M' in 10000000M means this is a decimal value, rather than int or double.
var accountBalance = 10000000M; 

Що відрізняє їх від змінних чи ресурсів, так це те, що компілятор може розглядати їх як константи або виконувати певні оптимізації за допомогою коду там, де вони використовуються, оскільки певно, що вони не зміняться.


11
Мені подобається те, що ти щойно пояснив, замість того, щоб намагатися показати, наскільки ти знаєш, тим самим заплутавши новачків. Нам потрібно більше таких людей, як ти.
Містер Смі

2
Легко і переконливо. Подяка
Джонні

16

Літерал - це присвоєння явного значення, наприклад

int i = 4;  // i is assigned the literal value of '4'
int j = i   // j is assigned the value of i.  Since i is a variable,  
            //it can change and is not a 'literal'

EDIT: Як зазначалося, саме призначення не має нічого спільного з визначенням літералу, я використовував призначення у своєму прикладі, але літерал також може бути переданий у метод тощо.


yep: літерали не мають нічого спільного з присвоєнням;)

Це правда, я мав би пояснити той факт, що я використовував призначення, щоб продемонструвати, що таке літерал.
Ed S.

12

Буквальний - це коли ви включаєте значення у вихідний код (на відміну від посилання на змінну або константу). Наприклад:

int result = a + 5; // a is a variable with a value, 5 is a literal

string name = "Jeff Atwood"; // name is a variable initialized
                             // with the string literal, "Jeff Atwood"

int[] array = new int[] {1, 2, 3}; // C# has array literals (this is actually three
                                   // int literals within an array literal)

Якщо літерал представляє якусь величину, як фізична константа, краще дати йому ім’я, замість того, щоб писати той самий літерал скрізь, де він вам потрібен. Таким чином, коли ви читаєте вихідний код, ви знаєте, що означає число , яке, як правило, важливіше його значення (яке в будь-якому випадку може змінитися).

const int maxUsers = 100;
const double gravitationalAcceleration = 9.8;

Як правило, єдиними числовими літералами, які я використовую (крім того, щоб ініціалізувати константи, як зазначено вище), є 0 або 1, а іноді і 2, якщо я пропускаю кожен інший елемент у циклі. Якщо значення числа важливіше його фактичного значення (воно зазвичай є), краще назвати його.


6

Буквальне значення - це значення, але значення також може зберігатися у змінній. У заяві

string str = "string literal";

є рядкова змінна (str) та рядковий літерал. Після виконання оператора вони обидва мають однакове значення.

Майте на увазі, що у багатьох мовах змінна та літеральне значення не обов’язково навіть повинні бути одного типу. Наприклад:

int a = 1.0;

Буквальне значення вище - тип із плаваючою комою. Значення буде примушене компілятором, щоб воно вмістилося до змінної int.

Для іншого прикладу, у першому рядку коду С ++ вище тип рядкового літералу насправді взагалі не є типом бібліотеки string. Для підтримки зворотної сумісності з C рядкові літерали в C ++ є масивами char.


5

Швидкий приклад:

int my_int_var = 723;

723 - Цей набір символів стосується буквального цілого значення.

my_int_var - Цей набір символів відноситься до цілого значення змінної .


3

Буквал - це коли ви вводите його в код. Отже, рядковий літерал є

string s = "SomeText";

Це на відміну від побудови рядка або прийняття його як параметра.


2

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

Іншим поширеним використанням є значення, які перетворюються на безпосередні значення у збірці. Це значення, які вставляються безпосередньо в машинну інструкцію, а не вимагають навантажень реєстру.



1

Я чув, що рядкові літерали випадково використовуються для посилання на те, що специфікація C # фактично позначає як дослівні рядкові літерали. Звичайний літеральний рядок дозволяє екранувати певні символи (префікс а), наприклад \ t для вкладки. Дослівний літеральний рядок дописується символом @ і обробляється дослівно, \ не має особливого значення.

//regular
string regular = "\thello world";
//verbatim
string verbatim = @"C:\";
//the regular equivalent of this would be "C:\\"

0

Літерали - це скорочене позначення значень певних типів, яке мова вважає настільки важливим чи фундаментальним, що саме для них він виділив синтаксис цукру.

Приклад типів, значення яких часто представлені літералами:

Boolean = { true, false }
Integer = { ..., -2, -1, 0, 1, 2, ... }
Character = { 'a', 'b', ... }
String = { "hello", "world", ... }

Деякі мови мають літерали навіть для типів функцій:

Integer -> Integer = { (x: Integer) => x + 2), (x: Integer) => x/2, ...}

Прикладом значень, які зазвичай не представлені літералами, можуть бути значення типів класів:

Car(brand: String, seats: Integer) = { Car("BMW", 5), Car("Ferrari", 2), ...}

Тут значення Car("BMW", 5)типу Carсправді однозначно позначається з використанням послідовності символів, однак значення не подається за допомогою спеціального скороченого літералу, а використовує загальні (багатослівні) умовні механізми для позначення значень будь-якого типу класу.

Термін літерал є синонімом значення термін , екземпляр , константа , член та елемент типу, але несе в собі трохи додаткового значення, яке говорить нам, що існує скорочення для запису.

Мені подобається думати про літерали як про єгипетські ієрогліфи, на відміну від набору символів з алфавіту для вираження концепції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.