在文字字符串和文字值等上下文中使用“文字”一词是什么意思?
文字值和值之间有什么区别?
Answers:
文字是“用于在源代码中表示值的任何符号”(Wikipedia)
(将其与标识(将其指向内存中的值)进行对比。)
例子:
"hey"
(一个字符串)false
(一个布尔值)3.14
(实数)[1,2,3]
(数字列表)(x) => x*x
(功能)/^1?$|^(11+?)\1+$/
(一个正则表达式)一些不是文字的东西:
std::cout
(标识符)foo = 0;
(一份声明)1+2
(一种表达)15
字面意思是15,而+
它的特殊含义是“将两件事加在一起”。您不会将它+
视为代表加号,因为它不是文字。
文字是直接硬编码到源中的值。
例如:
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;
将它们与变量或资源区分开来的原因在于,编译器可以将它们视为常量,或者可以在使用它们的代码处执行某些优化,因为可以确定它们不会更改。
文字是在源代码中包含值时(与引用变量或常量相对)。例如:
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。如果数字的含义比实际值(通常是实际值)更重要,则最好将其命名。
文字是“数据的源代码表示”。
文字是某些类型的值的简写表示法,这些类型被认为是非常重要或基本的,以至于有专门针对它们的语法糖。
类型的示例,其值通常由文字表示:
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
确实使用一系列符号唯一地表示,但是,该值不是使用专用的速记文字来表示的,而是使用通用的(冗长的)概念机制来表示任何类类型的值。
术语字面是术语的代名词值,例如,固定,成员,和元素的类型,却承载了一下,告诉我们只有写下来的简写额外的意义。
我喜欢将文字视为埃及的象形文字,而不是将字母中的字符串在一起以表达概念。