Просмотр исходного кода

Merge pull request #9 from zhanming/master

add 04.3.md translate for ch 4.3
Joe Chen 13 лет назад
Родитель
Сommit
143c0816c3
1 измененных файлов с 152 добавлено и 0 удалено
  1. 152 0
      eBook/04.3.md

+ 152 - 0
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)