From 978ab1b9e22a8eead541e2a417e372fe35cf2724 Mon Sep 17 00:00:00 2001 From: Zhanming Qi Date: Tue, 16 Apr 2013 16:09:29 +0800 Subject: [PATCH] add 04.3.md translate for ch 4.3 with original english. --- eBook/04.3.md | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 eBook/04.3.md diff --git a/eBook/04.3.md b/eBook/04.3.md new file mode 100644 index 0000000..6b585a7 --- /dev/null +++ b/eBook/04.3.md @@ -0,0 +1,152 @@ +#4.3 常量 +( ***译者注:由于 Go 语言版本更替,本节中的相关内容经原作者同意将被直接替换而不作另外说明*** ) + +A constant const contains data which does not change. + +常量 const 用于存储不能改变的数据。 + + +This data can only be of type boolean, number (integer, float or complex) or string. + +常量的数据类型只能是布尔型,数值型(整型,浮点型或复数型)或字符串型。 + + +It is defined as follows: `const identifier [type] = value` , for example: `const Pi = 3.14159` + +像如下定义:`const identifier [type] = value` ,例如:`const Pi = 3.14159` + +The type specifier `[type]` is optional, the compiler can implicitly derive the type from the value. + +类型说明符 `[type]` 是可选项,编译器可以从值中隐式推导出类型。 + +Explicit typing example: `const b string = "abc"` +Implicit typing example: `const b = "abc"` + +显示类型定义例子: `const b string = "abc"` +隐式类型定义例子: `const b = "abc"` + +A value derived from an untyped constant becomes typed when it is used within a context that requires a typed value (otherwise formulated: an untyped constant takes the type needed by its context): + +当一个值在一个要求有类型值的上下文中,它需要从无类型推导出类型(规定:一个无类型的常量从上下文中确定其类型) + + var n int + f(n + 5) // untyped numeric constant “5” becomes typed as int + +Constants must be evaluated at compile time; a const can be defined as a calculation, but all the values necessary for the calculation must be available at compile time. + +常量必须在编译时能够被推导出;一个常量可以用一个计算定义,但是所有需要计算的值在编译期必须可用。 + +So this is ok: `const c1 = 2/3` +this is NOT: `const c2 = getNumber() // gives the build error: getNumber() used as value` + +所以这样是正确的: `const c1 = 2/3` +这样是**错误**的: `const c2 = getNumber() // 得到构建错误: getNumber() used as value` + +Numeric constants have no size or sign, can be of arbitrary high precision and do no overflow: + +数字常量没有大小和符号的,可以是任意精度而且不会溢出: + + const Ln2= 0.693147180559945309417232121458\ + 176568075500134360255254120680009 + const Log2E= 1/Ln2 // this is a precise reciprocal + const Billion = 1e9 // float constant + const hardEight = (1 << 100) >> 97 + +As demonstrated `\` can be used as a continuation character in a constant. + +如上例证明 `\` 可以被用作常量的连字符。 + +In contrast to numeric variables of different types, with constants you don’t have to worry about conversions: they are like ideal numbers. + +相比于数字变量的不同类型,使用常量你不必担心转型:他们就像是理想中的数字。 + +Constants can overflow only when they are assigned to a numeric variable with too little precision to represent the value, this results in a compile error. Multiple assignment is allowed, like in: + +常量会溢出,只有当他们被分配的数字变量精度太少,这将导致一个编译错误。多重赋值是允许的,比如: + + const beef, two, c = “meat”, 2, “veg” + const Monday, Tuesday, Wednesday, Thursday, Friday, Saturday = 1, 2, 3, 4, 5, 6 + const ( + Monday, Tuesday, Wednesday = 1, 2, 3 + Thursday, Friday, Saturday = 4, 5, 6 + ) + +Constants can be used for enumerations: + +常量可以用作枚举: + + const ( + Unknown = 0 + Female = 1 + Male = 2 + ) + +Unknown, Female, Male are now aliases for 0, 1 and 2. They can in effect be used to test for these values, like in a switch / case construct (§ 5.3). + +Unknown, Female, Male 现在是 0, 1 和 2 的别名. 他们可以使用去测试实际值,比如使用一个 switch / case 结构 (§ 5.3). + +In such cases, the value iota can be used to enumerate the values: + +在这个例子中,`iota` 可以被用作枚举值: + + const ( + a = iota + b = iota + c = iota + ) + +The first use of iota gives 0, whenever iota is used again on a new line, its value is incremented by 1; so a=0, b=1, c=2. This can be shortened to: + +第一个 `iota` 等于 0,无论 `iota` 是否在新的一行使用,它的值都会自动加 1;所以 `a=0, b=1, c=2` 。可以简写为: + + const ( + a = iota + b + c + ) + +iota can also be used in an expression, like iota + 50. A new const block or declaration initializes iota back to 0. + +`iota` 也可以用在表达式中,如 `iota + 50`。一个新的常量块或声明将 `iota` 重新初始化为 0。 + +Of course, the value of a constant cannot change during the execution of the program; doing so is prevented by a compiler error: cannot assign to value, where value is the value of the constant. + +当然,常量的值在程序的执行过程中不能被改变;这么做是为了避免编译错误:当一个值是常量,他不能被赋值。 + +An example from the time package: the names for the days of the week: + +`time`包的一个例子:一周的每天的名称: + + const ( + Sunday = iota + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + ) + +You can give the enumeration a type name like in this example: + +你可以给枚举一个类型名,像这个例子: + + type Color int + const ( + RED Color = iota // 0 + ORANGE // 1 + YELLOW // 2 + GREEN // .. + BLUE + INDIGO + VIOLET // 6 + ) + +Remark: There is a convention to name constant identifiers with all uppercase letters, like: `const INCHTOwCM = 2.54`; this improves readability and can be used as long as it is not in conflict with the Visibility Rule of §4.2 + +备注:有一个约定:常量标识符全部使用大写字母,如:`const INCHTOwCM = 2.54`;这增强了可读性并且不会与 §4.2 描述的可见性规则冲突。 + +##链接 +- [目录](directory.md) +- 上一部分:[Go 程序的基本结构和要素](04.2.md) +- 下一节:[变量](04.4.md)