2.3 标识符和关键字
在Swift程序中,标识符和关键字是最基本的构成元素之一。在本节的内容中,将详细讲解Swift标识符和关键字的基本知识,为读者步入本章后面知识的学习打下基础。
2.3.1 标识符
所谓标识符,是指为变量、函数和类以及其他对象所起的名称。但是这些名称不能随意命名,因为在Swift系统中已经预定义了很多标识符,这些预定义的标识符不能被用来定义其他意义。
在Swift语言中,标识符(Identifiers)可以由以下的字符开始。
大写或小写的字母A到Z。
下画线“_”、基本多语言面(Basic Multilingual Plane)中的Unicode非组合字符。
基本多语言面以外的非专用区(Private Use Area)字符。
在上述首字符之后,标识符允许使用数字和Unicode字符组合。
在Swift语言中,如果想使用保留字(reserved word)作为标识符,需要在其前后增加反引号“`”。例如,虽然class不是合法的标识符,但是可以使用`class`。反引号不属于标识符的一部分,`x`和x表示同一标识符。
注意:有关基本多语言面(Basic Multilingual Plane)的知识,请读者参阅维基百科中的“Unicode字符平面映射”。另外,在Swift的闭包(closure)中,如果没有明确指定参数名称,参数将被隐式命名为$0、$1、$2...这些命名在闭包作用域内是合法的标识符。
在Swift语言中,标识符需要遵循如下命名规则。
(1)所有标识符必须由一个字母“a~z”、“A~Z”或下画线“_”开头。
(2)标识符的其他部分可以用字母、下画线或数字“0~9”组成。
(3)大小写字母表示的意义不同,即代表不同的标识符,如前面的cout和Cout。
(4)在定义标识符时,虽然语法上允许用下画线开头,但是,最好避免定义用下画线开头的标识符,因为编译器常常定义一些下画线开头的标识符。
(5)Swift没有限制一个标识符中字符的个数,但是大多数的编译器都会有限制。在定义标识符时,通常无须担心标识符中字符数会不会超过编译器的限制,因为编译器限制的数字很大,例如255。
(6)标识符应当直观且可以拼读,可以望文知义。标识符最好采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把CurrentValue写成NowValue。
(7)命名规则尽量与所采用的操作系统或开发工具的风格保持一致。例如Windows应用程序的标识符通常采用“大小写”混排的方式,如AddChild。而Unix应用程序的标识符通常采用“小写加下画线”的方式,如add_child。不要将这两类风格混在一起使用。
(8)程序中不要出现仅靠大小写区分的相似的标识符。例如:
int x,X;
(9)程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但是这样会使人产生误解。
例如,identifier、userName、User_Name、_sys_val、“身高”等为合法的标识符,而2mail、room#和class为非法的标识符。其中,使用中文“身高”命名的变量是合法的。
Swift程序中的字母采用的是Unicode编码,Unicode被称作统一编码制,它包含了亚洲文字编码,如中文、日文、韩文等字符。甚至还包含在聊天工具中使用的表情符号,例如等。因为这些符号其实也是Unicode字符,而并非图片,所以可以在Swift程序中使用这些符号。另外,如果一定要使用关键字作为标识符,可以在关键字前后添加重音符号“`”。例如下面的代码都是合法的:
在上述代码中,“class”是Swift中的关键字,事实上重音符号“`”不是标识符的一部分,它也可以用于其他标识符,如π和`π`是等价的。在Swift程序中,使用关键字作为标识符是一种很不好的编程习惯。
2.3.2 关键字
在Swift程序中,不允许将被保留的关键字(keywords)作为标识符,除非被反引号转义。在Swift语言中,常用的关键字如下所示。
用作声明的关键字:class、deinit、enum、extension、func、import、init、let、protocol、static、struct、subscript、typealias、var。
用作语句的关键字:break、case、continue、default、do、else、fallthrough、if、in、for、return、switch、where、while。
用作表达和类型的关键字:as、dynamicType、is、new、super、self、Self、Type、_COLUMN_、_FILE_、_FUNCTION_、_LINE_。
特定上下文中被保留的关键字:associativity、didSet、get、infix、inout、left、mutating、none、nonmutating、operator、override、postfix、precedence、prefix、right、set、unowned、unowned(safe)、unowned(unsafe)、weak、willSet,这些关键字在特定上下文之外可以被用作标识符。
对于上述关键字来说,没有必要全部知道它们的具体含义。但是需要牢记的是:在Swift程序中,关键字是区分大小写的,因此class和Class是不同的,当然Class不是Swift的关键字。