D 入门指南/基础/D 的结构
本节假设您已经阅读了关于编程的一般介绍,并且了解什么是程序以及什么是源代码。
从根本上说,计算机程序是计算机执行的一系列指令。 从文本编辑器到 3D 游戏,一切都是如此。 在其最低级别(中央处理器),计算机有一组它可以执行的指令。 虽然这组指令是一种编程语言,但它有一些问题,使其难以用于普通编程。 正因为如此,有编程语言更具表现力,并为程序员提供了更轻松的编写程序的方式,例如 D。 编译器是一种程序,它将用这种编程语言编写的代码转换为计算机可以使用的语言(称为机器码)。
包括 D 在内的许多编程语言都以一系列指令的形式表达,这些指令按顺序执行。 这一概念对计算机和人类来说都很容易理解。 在 D 中,这些指令称为语句。
语句是对计算机的(可能是非常复杂的)指令。 单个语句以 ';'(分号)结尾,并且可以将任意数量的语句直接放在彼此之后,只要它们都以 ';'(分号)结尾即可。 因此,语句序列 'a'、'b'、'c' 写成
a; b; c;
这段代码将使程序按顺序执行假设指令 'a'、'b' 和 'c'。
语句有很多类型,每种语句都有不同的用途。
程序能够存储信息非常重要。 在 D(以及大多数编程语言)中,用于存储信息的存储位置称为变量。 变量有几种类型,使用哪种类型取决于变量应该存储哪种信息。
要使用变量,您首先必须声明它。 声明变量只是指定用于存储它的空间,并将您提供的名称与该空间关联起来。 变量声明是一个语句,其中包含要声明的变量的类型和名称。 所有类型的变量将在后面的部分中介绍; 目前只介绍两种
类型 | 它是什么 |
int | 一个数字,例如 1、2、3、0、-4、-3 等。 不能有小数,例如 1.1、2.025。 |
float | 一个数字,例如 1.1、2、3.141、0、-4.15、-3 等。 |
要声明一个名为 'foo' 的类型为int的变量,使用以下语句
int foo;
当然,这可以针对任何类型或名称进行更改,其通用格式为
type name;
如果您不能在其中存储任何东西,那么变量就不太有用。 在变量中存储值称为赋值该值给变量。 变量只能在声明之后才能为其赋值,如上所述。 以下语句将值 5 赋值给变量 'foo'
foo = 5;
任何变量都可以通过这种方式被赋值任何值,其通用格式为
variable = value;
D 中的数学很简单。+用于加法,-用于减法,/用于除法,并且*用于乘法。 要将两个数字相加,只需在它们之间放置一个+即可,例如
2 + 2
运算顺序与数学中的相同。 也就是说,*和/在+和-之前完成。 因此,2 + 2 * 2为 6,而不是 8。您可以通过使用(和)(括号)来改变这一点。 括号内的任何内容都将在括号外的任何内容之前完成; 同样,如正常数学。 当2 + 2 * 2为 6 时,(2 + 2) * 2为 8。
这种数学可以在大多数可以使用简单值的地方使用,包括在赋值中
foo = 2 + 2;
上面的代码将值 4 赋值给变量 'foo'。
此外,与代数一样,您可以在数学中使用变量名而不是数字。 如果存在一个名为 'bar' 的变量,'foo' 可以通过以下方式被赋值 'bar' 的值加 2
foo = bar + 2;
上面提到的类型之间的差异会导致除法产生意外结果。 如果两个数字(操作数)都是int,则结果值也将是int。 例如,如果您编写以下除法
1 / 2
则结果将是int。 结果向下取整,因此结果不是 0.5,而是 0!
要避免这种情况,您可以强制一个值成为float:
1 / 2.0
。 由于包含小数点,因此 2.0 被解释为float,因此整个运算现在被计算为float并得到 0.5 的结果。
任何非平凡的程序都应该像任何其他非平凡的任务一样,被细分为小块。
洗车可以细分为首先清洁引擎盖,然后清洗窗户,清洁轮辋等等。 您可能需要不同的工具、技术和清洁剂来进行每个子清洁,并且您可能需要进一步细分其中一些任务,因为它们太复杂了。 从根本上说,计算机非常愚蠢:它们必须由人类完成所有这些细分和指令,以供它们使用。 人类大脑会为相当复杂的任务几乎自动执行此任务细分。
从技术上讲,D 中的函数封装了一组语句,以执行比单个语句可以执行的更抽象的任务。 这些语句中的一个或多个可以反过来是函数调用(函数的使用)。
函数有助于组织程序。 在洗车示例中,您可以为清洁汽车窗户编写一个函数,而在编写它时,您不必考虑汽车的其他部分。
稍后,当您在另一个函数中调用(使用)它来清洁整辆车时,您不必记住清洁窗户的详细方法,因为“清洁窗户”函数已经“知道”这些细节了。
函数和调用的实际结构将在后面的章节中讨论。
[TODO:压缩此节] 要讨论的最后一个主题是注释。 注释是您告诉 D 编译器忽略的源代码文件的一部分。 它们很有用,因为它们可以让您在代码本身中记录您的代码,或者为了测试目的删除代码的一部分(称为注释掉代码)。 D 有三种基本类型的注释:行注释、非嵌套块注释和嵌套注释。
行注释非常简单。 它们以两个斜杠开头 (//) 并在一行的末尾结束。 它们主要用于记录或注释掉单个代码行。 非嵌套块注释以斜杠和星号开头 (/*) 并以星号和斜杠结尾 (*/)。 它们可以跨越多行,但不能嵌套,也不允许多个级别,这意味着即使您有多个/*注释开启符,它只需要一个*/注释更接近于关闭所有注释。这些注释主要用于记录代码的整个部分。最后一种类型的注释,嵌套注释,与块注释的工作方式相同,只是它们确实嵌套,并以斜杠和加号 (/+) 和加号和斜杠 (+/) 分隔。以下示例旨在展示注释的功能,不应将其视为最佳使用示例。
number = 5; //Number is set to 5 //number = 6; //We don't want number set to 6 /* The next section of code subtracts one from number and assigns that value to number2 */ number2 = number - 1; //The following lines demonstrate nesting vs. non-nesting comments: /+ This type of comment /+ Can /+ nest +/ ... +/ still in comment +/ /* This type cannot /* nest */ number = 7; //number is now set to 7