一、问题背景

博主在复习《Java疯狂讲义》第3章(数据类型和运算符)时,其中在3.2.3 Java关键字中提到了直接量的概念:

如上图所述,原文提到:

TRUE、 FALSE 和 NULL 都不是 Java 关键字。
Java还提供了三个特殊的直接量(literal):true、 false 和 null; Java 语言的标识符也不能使用这三个特殊的直接量。

博主对此概念很疑惑,于是便上网收集相关知识,总结如下文所示。

二、字面常量(literal)

在计算机科学中,字面常量(literal)是用于表达源代码中一个固定值的表示法(notation)。几乎所有计算机编程语言都具有对基本值的字面常量表示,诸如:整数、浮点数以及字符串;而有很多也对布尔类型和字符类型的值也支持字面量表示;还有一些甚至对枚举类型的元素以及像数组、记录和对象等复合类型的值也支持字面常量表示法。

1.字面常量(literal)的定义

在计算机科学中,字面常量(literal)是用于表达源代码中一个固定值的表示法(notation)。
所谓字面,就是字面常量在程序中直接以值的行式来操作和表现(可以对照变量)。
所谓常量,是指这些值不能再被改变了。

字面常量的种类:

  1. 整形
    整形数值 默认是int型,例如:22
    如果要表示一个long型,则加 l、L后缀。例如:22L

  2. 浮点型
    浮点数默认是双精度dobule型的。例如:33.3
    如果要表示单精度float型,加f、F后缀。例如:33.3F

  3. 字符串型
    包含在双引号""中的字符序列,是字符串。例如:“hello world”

  4. 字符型
    用单引号''包含,或者用/转义的字符,是字符型。例如:/n'a'

2.字面常量(literal)与标识符(identifier)的区别

int number = 666;
String phrase = "Hello World!";
Object object=null;
Boolean flag1=false;
Boolean flag2=true;

在上述Java代码中,number, String, phrase, Object, object, Boolean, flag1, flag2都是标识符(identifier),因为它们都是用于标识该程序中的变量、类(虽然该代码中没有标识类的成员方法的标识符)。
666, "Hello World", null, false, true都是字面常量(literal),因为它们都是在程序中直接以值的形式来操作和表现。

值得注意的是:Java中的3个特殊字面常量null, false, true在使用时必须是全小写的,如果全大写半小写半大写是错误的。

3.字面常量(literal)的译名的最优解选择

首先,字面常量的英文单词literal本身的意义就是字面意思上的,所以从这个角度来说,翻译为字面常量也可以理解。

literal /ˈlɪtərəl/ adj字面意思上的;n[计]字面常量

那在计算机领域,Literal的定义是怎么样的呢?

A letter or symbol that stands for itself as opposed to a feature, function, or entity associated with it in a programming language.
一种字母或符号,代表其本身,而不是与之相关联的编程语言中的特性、函数或实体。

literal这个词很讨厌,现有的译法众多,但都问题多多,而且没有一种占据绝对优势。如文字量、直接量、常量、常值、字面量、字面值、实字等等,也有直接译作“文本”,或者保留英文不译,或者通过采取基本等价的意译来规避的。

对于译名我有一个观点,若是一个术语有多个译名,并长期无法有一个译名占据优势,其实就暗示这些译名很可能都存在问题。literal不幸也是如此。

首先literal不是constant,所以不好用“常量”来翻译——虽然乍一看它很像“常量”。尽管如此,还是有一种看法,认为literal和常量、变量的差别只是赋值的时机,前者是在编译时,而后者是在运行时。根据这种看法,就有若干种“XX量”的译法,典型的如“字面量”、“直接量”。

然而这种看法值得质疑。问题不在于何时赋值,而是literal根本没有赋值的概念。因为赋值(还有变量、常量)是语义上的概念,而literal完全不是语义层面的东西。

所以literal不太好译作“xx量”。“XX量”除了变量、常量外,就是如标量(scalar)或向量(vector),都是指具有某种计算性质,也是语义层面的概念。而literal没有这种含义。

也有人将其译作“xx值”,例如常值或字面值。这比“XX量”要好,但是literal其实也不是值,而是值的符号表达——也就是literal始终是文法层面的概念。

这从各种语言规范里可以看出来。

Java的语言规范,literal是在lexical一章。也就是,它和Token、Line Terminators还有Comments是一个层面的。

Python的语言规范,literal是在Lexical analysis一章中,与它并列的是Line Structure、Identifiers and keywords以及Operators等。

再如ECMAScript规范,literal也是在lexical conversions一章中的。

我们看看和literal并列的,其实都是文法中的某种符号或token,譬如标识符、运算符、分隔符、关键字、分隔符、空白符、终止符……乃至Unicode字符序列。因此,翻作“XX量”或“XX值”都是文不对题的。

其实我本来考虑过是否可翻成“值符”或“常值符”的。类似的,台湾除了“常值”的译法最为常见外,还存在一些译法,如“实字”和“定字”(葉秉哲译法),其与“值符”的译法有相通处。但考虑再三,我觉得引入这样的新译法可能过于突兀,而且也存在一个问题——“值”通常会让人觉得是数值——string literal若作“字符串值符”或许还容易理解的,function literal作“函数值符”就晦涩了,所以还是退而求其次,我倾向于选用已有的译法“文本”和稍作改造的“源文本”。

在目前我正在翻译的一书中,对literal就采取了这一译法。

其中对于soap的document/literal-style是这样处理的:

文档/文本式(document/literal-style)的SOAP绑定提供的响应更简单。

然后加译注如下:

所谓SOAP绑定,是指服务如何转换为SOAP消息协议。wsdlsoap:binding元素上的style属性定义了绑定的风格,可以是RPC(远程过程调用)风格的,也可以是文档(document)风格的。wsdlsoap:body元素上的use属性定义了soap主体(body)的使用方式,主体中的数据可以经过编码(encoded),也可以直接使用文本(literal)。采用文档风格并且直接使用文本的,就是所谓文档/文本式(document/literal)。而清单2.14则采用了RPC/编码式(RPC/encoded)。

对于之后的function literal,是这样处理的:

比如可以在运行时创建新的函数,可以通过不带函数名的源文本(literal) 直接创建出无名的函数对象……

然后加译注:

源文本(literal),是指程序源代码中用来表示固定的值的符号序列。例如在大多数语言中,引号包围的字符序列即为字符串源文本(string literal),表示一个特定的字符串值。

总的来说,我是把literal译作“文本”的,在编程语言语境下是译作“源文本”即“源代码中的文本”之意。“源代码中的文本”基本是literal的直译。这个译法的主要问题是,当然不是所有源代码中的文本都是literal。然而其英文原词本来也不可能包含这个意思,所以直译无法包括此意也是正常的。

文本一译,还与text存在冲突。但是把literal理解为text,总好过理解为var/const。而且使用“源文本”的译法,就不存在直接冲突了。虽然大家可能把“源文本”对应到“source text”上,但这至少比其它译法都接近literal的实际意思,因为literal以及其他文法符号,不过就是source text分解后的具体成份。所以string literal用“字符串源文本”来翻译,大家想到的如果是“source text of the string”,那就恰好没错了。

参考文献:
[1]数据类型之二:字面量(literal)
[2]什么是Literal

编程语言中字面常量(literal)的详细介绍(关键词:Java,文字量,直接量,常量,常值,字面量,字面值,实字)相关推荐

  1. Linux文件系统中的inode节点详细介绍

    一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统 ...

  2. python流程控制语句-Python中流程控制语句的详细介绍

    除了刚才介绍的while语句之外,Python也从其他语言借鉴了其他流程控制语句,并做了相应改变.Python中流程控制语句的详细介绍 4.1 ifStatements 或许最广为人知的语句就是if语 ...

  3. linux中各目录及详细介绍

    linux中各目录及详细介绍 一.Linux文件系统的层次结构 在Linux或UNIX操作系统中,所有的文件和目录都被组织成一个以根节点开始的倒置的树状结构,如图: 二.目录 1.目录的定义 目录相当 ...

  4. wince中BIB文件的详细介绍

    wince中BIB文件的详细介绍 在WinCE中使用的一个重要的文件就是BIB文件,全称Binary Image Builder File.在WinCE的编译过程中会用到BIB文件,应该是在最后的Ma ...

  5. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  6. C#语言中的重要知识详细介绍

    微软的.NET推出后,关于C#的有关文章也相继出现,作为微软的重要的与JAVA抗衡的语言,C#具有很多优点.本文将选一些C#语言中的重要知识详细介绍: 第一章:参数 1.1 IN 参数 c#种的四种参 ...

  7. linux中的chmod命令详细介绍、使用及实例

    linux中的chmod命令详细介绍.使用及实例 chmod命令 chmod用于改变 linux 系统文件或目录的访问权限,可以用它控制文件或目录的访问权限.该命令有两种用法:一种是包含字母的文字设定 ...

  8. script标签中写html,html中script标签的详细介绍

    大家好,欢迎关注支持,谢谢!本篇将介绍html中script标签的详细用法,有兴趣的朋友可以了解一下! 一.前言 在html中,为了实现动态交互效果,我们经常会嵌入其它脚本语言(如:JavaScrip ...

  9. Mac 系统中各个文件夹详细介绍

    Mac 系统中各个文件夹详细介绍 Mac OS X 系统以Unix作为核心,根目录为 / 打开Macintosh HD你会发现内中有四个文件夹分别为:应用程序(Applications).系统(Sys ...

最新文章

  1. 任务感知单目深度估计的3D目标检测
  2. 程序实现:由给定几个数确定凸组合系数,组成一个给定的数
  3. 鲜为人知的C++ IO fstream流
  4. 用VS2010调试微软开放的部分源码
  5. Bicolored RBS
  6. python语言key_Python语言学习:字典常用的方法
  7. 使用Jackson将一个对象转换成一个JSON字符串
  8. mysql5.7.26修改账号密码_修改mysql5.7的用户密码
  9. react native 之setState
  10. alot英文怎么读_iot中文读什么,AloT怎么读,Iot是什么意思中文翻译
  11. js获取当前页面高度
  12. 平面设计中都有哪些风格?常用的风格有哪些?
  13. java猜拳_Java猜拳小游戏(剪刀、石头、布)
  14. 学习笔记13--障碍物检测之基于图像障碍物检测
  15. 开发一个App大概要多少钱?
  16. 计算机双工模式,windows10系统如何设置网络双工模式?
  17. 如何写网络舆情数据分析报告的技巧及注意事项详解
  18. 除了Kaggle,这里还有一些高质量的数据科学竞赛平台
  19. postgresql学习(一)
  20. Mac下python+selenium【2】获取表格所有元素

热门文章

  1. c语言 int大端转小端,C++将整型数据转换成大端或小端存储顺序
  2. srm平台采购谈判的四种方法
  3. 测试管理中可能存在的问题及分析
  4. shell脚本实战:
  5. Python实现人脸检测(个人、多人、视频)
  6. Zotero同步OneDrive
  7. html怎么写查看附件,gmail邮箱附件如何以html格式查看
  8. CF467D Fedor and Essay
  9. Simulink中示波器图窗编辑设置
  10. Unity3D内存管理