跳转到内容

Io 编程/初学者指南/Io 程序的基本组成部分

来自维基教科书,开放的书籍,为开放的世界

Io 程序的基本组成部分

[编辑 | 编辑源代码]

要编写有效的 Io 程序,您需要熟悉一些基本组成部分。

关键字

[编辑 | 编辑源代码]

严格来说,Io 没有关键字。但是,它确实有一个语法糖层,就所有意图和目的而言,它给了它一些关键字。整个语言中只有三个这样的非真正关键字。我们已经看到一个了。

;
分号用于分隔计算机应该执行的不同操作。您不会经常使用它,但有时它会非常方便。
=
等号用于 *更新已存在的* 变量。但是,如果我们还没有声明变量怎么办?输入......
:=
此赋值运算符(读作“变为”)用于 *创建新的* 变量(如果它碰巧已经存在,它也会更新它)。·

我们现在还不会深入研究这些非完全关键字如何影响 Io。现在,让我们假装它们是真正的关键字。

字符串

[编辑 | 编辑源代码]

字符串实际上是 *字符的字符串*。这些是包裹在引号中的文本块,如下所示

Io> "Hello world!"
==> "Hello world!"

有时,将换行符、制表符甚至响铃(但不是哨子)也放入文本中非常方便。我们使用 *转义序列* 来做到这一点。迄今为止,您最常使用的 #1 转义序列是 \n。此特定转义序列表示换行符,相当于按下回车键。如果您只是在这个字符串中间按下了回车键,它会使 Io 困惑。

我提到了“这种”字符串,因为这最终成为一个大问题,以至于最终实现了一种新的类型(借鉴自 Python)。这就是现在著名的 *三引号* 字符串。它们看起来像这样

Io> """Hello world!"""
==> "Hello world!"

有什么区别?三引号字符串 *允许* 您直接在中间键入 ENTER 键

Io> """Dear sir,
"->
"-> I must admit, I really like your suggestion
"-> to learn Io.  Thank you for the kind words.
"->
"-> Sincerely,
"->
"->
"-> Robert.
"-> """
==> Dear sir,

I must admit, I really like your suggestion
to learn Io.  Thank you for the kind words.

Sincerely,


Robert.

返回值

[编辑 | 编辑源代码]

您通常不会在大多数书籍中将函数和过程产生的结果列为语言元素。但是,Io 不同——它是一个 *非常* 真实的语言元素,您 *必须* 处理它。这相当令人不祥,不是吗?

在 Io 中,与许多函数式编程语言一样, *您在 Io 中所说或所做的任何事情都是表达式*。这是“花哨的计算机科学术语”,意思是 *您所说或所做的任何事情都会产生某种结果,该结果可以由程序的后续部分使用*。现在您知道为什么我们更喜欢计算机科学的方式而不是用简单英语表达它!

让我们更深入地分解一下。一个 *表达式* 是任何产生某种 *值* 的东西。值可以是字符串、数字、布尔值(真/假)东西,任何东西。示例

Io> 4+4
==> 8
Io> 15 - 150
==> -135
Io> "Hi!"
==> Hi!

好的,因此我们刚刚证明了 Io 是一个美化的计算器。就其本身而言,这完全没有意思。但是,使表达式有用的原因是,我们可以 *对* 结果做一些事情,然后再实际给出最终结果。

Io> "There are " .. (8*10)+19 .. " bottles of beer on that very wall, over there."
==> There are 99 bottles of beer on that very wall, over there.

在这里,我们使用 .. 运算符将事物 *连接* 到一起,形成一个单一值。在这种情况下,我们正在将 (8*10)+19 的 *结果* 附加到字符串“There are”,得到“There are 99”。然后,将“ bottles of beer...." 附加到其中,得到我们上面看到的結果。

如果 Io 对表达式的结果无事可做,它会打印 ==> 箭头和结果,并假设您关心它。当然,通常情况下,您确实关心,否则,您一开始就不会让结果在没有进一步处理的情况下继续!

如果某些计算或操作无法返回任何有用的结果,则返回 nil。正如我们之前在使用 writeln 玩耍时所看到的,我们注意到它 *返回* 了 nil 值。这是因为它实际上并没有为我们计算任何东西;它是一个纯粹的动作。

数字基本上与您预期的一样。整数和实数都以相同的方式处理(实际上,目前,它们总是转换为双精度浮点数表示以保持一致)。以下是一些数字的示例

Io> 45
==> 45
Io> 4.5e+2
==> 450
Io> 4.5e+38
==> 4.500000e+38
Io> -15360.263823
==> -15360.263823

使用 C 风格的语法 0x 和十六进制数字,十六进制值也是允许的

Io> 0xDEAD
==> 57005
Io> 0xBEEF
==> 48879
Io> 0xDEADBEEF
==> 3.735929e+09
Io> 0xDEADBEEFFEEDFACE
==> 4.294967e+09

最后一个数字向我们展示了一些有趣的东西——它显然对于如此大的十六进制数字来说太小了!事实证明,在将十六进制数转换为其内部表示时,只保留了 32 位的精度。如果十六进制数大于此,则改为使用最大的 32 位整数。

有些人可能会说这是 Io 中的错误。也许吧;但这本书不做判断。但是,如果您打算操作超过 32 位精度的十六进制值,则需要先将其手动转换为十进制表示法。

其他一些语言支持复数、无限精度数等概念。Io 并不使用语言解释器提供的基本一组基元来支持这些概念。但是,这些可以通过外部插件或通过 Io 本身来添加。

令人惊讶的是——Io 是一种面向对象的语言,即使我们直到现在才介绍它。

华夏公益教科书