保留字

(重定向自關鍵字

保留字(英語:Reserved word),有时也叫关键字keyword[1][2],是编程语言中的一类语法结构。在特定的编程语言里,这些保留字具有较为特殊的意义,并且在语言的格式说明里被预先定义。通常,保留字包括用来支持类型系统的原始数据类型的标记,并可以用来识别诸如循环结构、语句块、条件、分支等程序结构。

保留字在编程语言设计之时就被定义。有时,语言说明具有一定的灵活性,软件商可能会在其生产的编译器中添加非标准的语言特性。同样,当发展得更加成熟时,编程语言的保留字标准可能会扩展一些额外的特性,例如,在传统的编程语言中增加面向对象程序设计的特性。有时,编程语言说明会包含一些将来版本可能需要用到的保留字。在Java中,constgoto就是两个保留字——它们在Java中目前没有被使用,因此不具有意义,但是不能够被用作标识符。[3]通过“保留”这个术语,它们可以在Java的未来版本中补充,而不需要“破坏”旧的Java源代码。不像预定义函数、方法和子程序,保留字不能被程序员定义,而前面那些的名称通常被归类于标识符,而不是保留字。

语言间的比较编辑

不是所有的编程语言都有相同数量的保留字。例如,Java(以及其他C语言[4]派生的语言),具有相对较少的保留字,大约有50个。而COBOL则具有大约400个保留字。相反的极端则是Prolog,没有保留字。

一个语言具有的保留字数量与其功能“强大”程度没有必然聯繫。COBOL在20世纪50年代被设计成一种商业语言,它是一种自存档(self-documenting)、使用类似英语结构的元素(例如动词、子句、语句等)。而相反地,C语言被设计成一种在句法上较为简练的编程语言。例如,比较下列来自C语言和COBOL的两段计算单周收入的等价语句块:

// 使用C语言计算:if (salaried)        amount = 40 * payrate;else        amount = hours * payrate;
* 使用COBOL计算IF Salaried THEN        MULTIPLY Payrate BY 40 GIVING AmountELSE        MULTIPLY Payrate BY Hours GIVING AmountEND-IF.
* 另一个使用COBOL计算的例子IF Salaried         COMPUTE Amount = Payrate * 40ELSE        COMPUTE Amount = hours * payrateEND-IF.

上述例子中彩色的部分即是它们各自的保留字。

纯的Prolog语言使用关系式来表达,并通过询问这些关系触发处理方法。诸如循环的结构通过使用循环、递归的关系来实现。

虽然以上三個例子具有不同的保留字,但是它们都能胜任解决上述问题。程序的功能取决于它们对一系列图灵语言的归属。

一些跨语言的保留字编辑

微软.NET框架下的通用语言架构允许程序源代码以超过40种不同的编程语言混合编译,并生成一个解决方案。鉴于此,标识符、保留字的冲突可能会在一种语言写成的源代码试图处理另一种语言的源代码的过程中发生。例如,一个Visual Basic .NET库可能会包含这样一个类:

' Class Definition of This in Visual Basic.NET:Public Class this        ' This class does something...End Class

假设这一段源代码被编译,并被作为一个工具箱的一部分,那么一个C#[5]程序员在同一程序中定义this类的变量就会遇到问题,因为this是C#中的一个保留字,因此,下列的源代码将不能成功编译:

// Using This Class in C#:this x = new this();  // Won't compile!

类似的问题在访问成员、覆盖虚方法以及识别命名空间的情况中出现。

为了解决这个问题,语言说明允许C#程序员在保留字前面加上符号“@”,从而强制编译器将后面的保留字看成一般的标识符,而非保留字。[6]例如:

// Using This Class in C#:@this x = new @this();  // Will compile!

相反地,也可在 VB 中使用 [] 括起来以达到相似的目的:

//C#:public class Me{...}
//VB:Dim myMe As New [Me]()

为了保持连贯性,这样的用法也可以在非公有情况下使用,例如声明局部变量、参数名称以及私有成员。

另一例子是 SQL 中也可用 [] 括起数据库对象名(表、列等),而被括的不仅限于 SQL 保留字 / 关键字:

select [1st col] from [select]

这将选出名为“select”表中“1st col”列的数据。

参考文献编辑

  1. ^ The Java Language Specification, 3rd Edition, Section 3.9: Keywords. Sun Microsystems. 2000 [2009-06-17]. (原始内容存档于2012-02-13). The following character sequences, formed from ASCII letters, are reserved for use as keywords and cannot be used as identifiers[...] 
  2. ^ ISO/IEC 9899:TC3, Section 6.4.1: Keywords (PDF). International Organization for Standardization JTC1/SC22/WG14. 2007-09-07 [2011-09-28]. (原始内容存档 (PDF)于2018-01-11). The above tokens (case sensitive) are reserved (in translation phases 7 and 8) for use as keywords, and shall not be used otherwise. 
  3. ^ Java Language Keywords. Oracle. [2011-09-28]. (原始内容存档于2011-11-20). 
  4. ^ C++ Reference Material Keywords. Saint Mary's University. [2011-09-28]. (原始内容存档于2020-02-15). 
  5. ^ C# Keywords. MSDN. [2011-09-28]. (原始内容存档于2017-01-28). 
  6. ^ C# FAQ: What does at sign identifier mean. C# Online.NET. [2011-09-28]. (原始内容存档于2020-07-02). 
🔥 Top keywords: Baike: 首页Special:搜索九龍城寨之圍城胖猫跳江事件Energy (組合)淚之女王背着善宰跑逆天奇案2金智媛习近平郭葦昀金秀賢 (男演員)不夠善良的我們九龍寨城邊佑錫伍允龍春色寄情人劉俊謙 (香港)張書偉怪獸8號虽然不是英雄葉乃文謝坤達神耆小子六四事件我的婆婆怎麼那麼可愛排球少年!!角色列表唐振剛2024年湯姆斯盃Seventeen (組合)蕭景鴻排球少年!!WIND BREAKER—防風少年—安東尼·愛德華茲 (籃球運動員)ILLIT中华人民共和国中華民國BABYMONSTER與鳳行張文傑BOYNEXTDOOR彭丽媛笑看風雲日本母亲节习明泽金惠奫徐巧芯從Lv2開始開外掛的前勇者候補過著悠哉異世界生活德雷克 (歌手)搜查班長1958支配物种乘風2024張員瑛承欢记嚴爵香港梅龍高速公路塌陷事故柯建銘葬送的芙莉蓮迷宮飯轉生貴族憑鑑定技能扭轉人生~繼承弱小領土後,招募優秀人才打造最強領土~为人民服务 (2022年电影)黃道十二宮IVE (組合)草榴社区歐倩怡沒有秘密周雨彤柯佳嬿無職轉生~到了異世界就拿出真本事~謝京穎埃马纽埃尔·马克龙破墓周處除三害 (電影)許瑋甯Twitter五月天打天下2逆天奇案李主儐大谷翔平家族榮耀之繼承者胡子彤郭晉安毛泽东Baike: 分類索引沈伯洋白紙運動文化大革命城市猎人 (2024年电影)2024年花蓮地震(G)I-DLE城市猎人朴成焄郭宁宁2024年優霸盃哥吉拉-1.0汤姆斯杯