编程语言中字面常量(literal)的详细介绍(关键词:Java,文字量,直接量,常量,常值,字面量,字面值,实字)
一、问题背景
博主在复习《Java疯狂讲义》第3章(数据类型和运算符)
时,其中在3.2.3 Java关键字
中提到了直接量
的概念:
如上图所述,原文提到:
TRUE、 FALSE 和 NULL 都不是 Java 关键字。
Java还提供了三个特殊的直接量(literal):true、 false 和 null; Java 语言的标识符也不能使用这三个特殊的直接量。
博主对此概念很疑惑,于是便上网收集相关知识,总结如下文所示。
二、字面常量(literal)
在计算机科学中,字面常量(literal)是用于表达源代码中一个固定值的表示法(notation)。几乎所有计算机编程语言都具有对基本值的字面常量表示,诸如:整数、浮点数以及字符串;而有很多也对布尔类型和字符类型的值也支持字面量表示;还有一些甚至对枚举类型的元素以及像数组、记录和对象等复合类型的值也支持字面常量表示法。
1.字面常量(literal)的定义
在计算机科学中,字面常量(literal)
是用于表达源代码中一个固定值的表示法(notation)。
所谓字面
,就是字面常量在程序中直接以值的行式来操作和表现(可以对照变量)。
所谓常量
,是指这些值不能再被改变了。
字面常量的种类:
整形
整形数值 默认是int型,例如:22
。
如果要表示一个long型,则加 l、L后缀。例如:22L
。浮点型
浮点数默认是双精度dobule型的。例如:33.3
。
如果要表示单精度float型,加f、F后缀。例如:33.3F
。字符串型
包含在双引号""
中的字符序列,是字符串。例如:“hello world”
。字符型
用单引号''
包含,或者用/转义的字符,是字符型。例如:/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,文字量,直接量,常量,常值,字面量,字面值,实字)相关推荐
- Linux文件系统中的inode节点详细介绍
一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统 ...
- python流程控制语句-Python中流程控制语句的详细介绍
除了刚才介绍的while语句之外,Python也从其他语言借鉴了其他流程控制语句,并做了相应改变.Python中流程控制语句的详细介绍 4.1 ifStatements 或许最广为人知的语句就是if语 ...
- linux中各目录及详细介绍
linux中各目录及详细介绍 一.Linux文件系统的层次结构 在Linux或UNIX操作系统中,所有的文件和目录都被组织成一个以根节点开始的倒置的树状结构,如图: 二.目录 1.目录的定义 目录相当 ...
- wince中BIB文件的详细介绍
wince中BIB文件的详细介绍 在WinCE中使用的一个重要的文件就是BIB文件,全称Binary Image Builder File.在WinCE的编译过程中会用到BIB文件,应该是在最后的Ma ...
- (数据科学学习手札32)Python中re模块的详细介绍
一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...
- C#语言中的重要知识详细介绍
微软的.NET推出后,关于C#的有关文章也相继出现,作为微软的重要的与JAVA抗衡的语言,C#具有很多优点.本文将选一些C#语言中的重要知识详细介绍: 第一章:参数 1.1 IN 参数 c#种的四种参 ...
- linux中的chmod命令详细介绍、使用及实例
linux中的chmod命令详细介绍.使用及实例 chmod命令 chmod用于改变 linux 系统文件或目录的访问权限,可以用它控制文件或目录的访问权限.该命令有两种用法:一种是包含字母的文字设定 ...
- script标签中写html,html中script标签的详细介绍
大家好,欢迎关注支持,谢谢!本篇将介绍html中script标签的详细用法,有兴趣的朋友可以了解一下! 一.前言 在html中,为了实现动态交互效果,我们经常会嵌入其它脚本语言(如:JavaScrip ...
- Mac 系统中各个文件夹详细介绍
Mac 系统中各个文件夹详细介绍 Mac OS X 系统以Unix作为核心,根目录为 / 打开Macintosh HD你会发现内中有四个文件夹分别为:应用程序(Applications).系统(Sys ...
最新文章
- 任务感知单目深度估计的3D目标检测
- 程序实现:由给定几个数确定凸组合系数,组成一个给定的数
- 鲜为人知的C++ IO fstream流
- 用VS2010调试微软开放的部分源码
- Bicolored RBS
- python语言key_Python语言学习:字典常用的方法
- 使用Jackson将一个对象转换成一个JSON字符串
- mysql5.7.26修改账号密码_修改mysql5.7的用户密码
- react native 之setState
- alot英文怎么读_iot中文读什么,AloT怎么读,Iot是什么意思中文翻译
- js获取当前页面高度
- 平面设计中都有哪些风格?常用的风格有哪些?
- java猜拳_Java猜拳小游戏(剪刀、石头、布)
- 学习笔记13--障碍物检测之基于图像障碍物检测
- 开发一个App大概要多少钱?
- 计算机双工模式,windows10系统如何设置网络双工模式?
- 如何写网络舆情数据分析报告的技巧及注意事项详解
- 除了Kaggle,这里还有一些高质量的数据科学竞赛平台
- postgresql学习(一)
- Mac下python+selenium【2】获取表格所有元素