返回介绍

7.2 欢迎来到 名/值 数据的世界

发布于 2024-12-15 23:01:46 字数 1505 浏览 0 评论 0 收藏 0

此前我们讨论到,所有的数据最终都可以被抽象为数组,或者说我们此前讨论的所有数据类型都可以视为数组类型的转义。我们也讨论到,如果一个数组能确定长度,则它总能在运行前被顺序存储;如果它不能确知长度,也可以通过指针来保证在运行中实现顺序存储。

但是我们似乎多了一个题设。我们需要设问:顺序存储是必须的吗?

顺序存储的必要性在于:

  • 运算器需要通过一种简单的方法来找到数据;
  • 可以通过地址的余量来确知存储的占用情况,进而给程序员控制它的可能。

但是这两项条件都是与机器实现有关的,前者是运算器寻址的需求,后者是存储器容量的限制。而这些——我们必须强调在思想上要突破所有的限制——不是“计算”所必须的。换言之,一个计算过程仅仅是 需要数据 ,并没有限制 用何种手段来获得数据

据此,只要其抽象结果不会影响计算过程,我们就可以将数据的那些 仅仅应用于具体语言实现的 抽象概念一一抽离。仍以下面的代码为例:

1
2
  var
    Number aNum = 100;

这一句代码(的语法),对应着四个语义:

  • 有一个标识,记为 aNum
  • 其数据类型为 Number
  • 标识所指代的数据,其值是可变的(即,变量 var );
  • 该数据当前值为 100。

当我们把“值可变”与“当前值”这两个——由存储问题推导出来的——概念抽离之后,一个数据就只有三个普遍含义了:

  • 名字,即标识: aNum
  • 值,即数据: 100
  • 类型,即数据类型: Number

此前我们也提到过,顺序存储中我们可以将所有数据类型都视为数组的转义,因此我们也可以把“数据类型”从这样的系统抽象中抽离——当一个事物不存在类别含义时,也就无需识别它了。这样,这个数据抽象系统就只剩下了 1

aNum = 100

现在,我们来到了 “名/值”(name/value pair) 数据的世界。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文