什么比喻最能描述“价值”与“类型”之间的关系?

时间:2018-11-27 19:10:25

标签: types language-agnostic glossary

我正在尝试准确地画出解释“价值”和“类型”的漫画,但我遇到了一个主要问题:人们到处使用“类型”一词而不是“价值”,这让我很生气。 。我不断阅读各种隐喻中的定义:

  1. “类型”是一个空的属性外壳,而“值”是填充它的内容。

  2. “类型”是从中构建“值”的工厂。

  3. “类型”是创建“值”的工厂的蓝图

  4. “类型”是一本规则书,讲述了“值”可以做什么。

  5. “类型”是已经内置了固有属性的“值”的标识标签。

  6. “类型”是一个组织室,“值”在被召唤到程序中之前就已经存在。

更糟糕的是,我会不断听到“ Type”被用作形容词“ Typed”吗,这让我更加困惑:不是输入名词吗?另外,每当有人使用此术语时,就好像有多个定义和上下文一样。我觉得如果没有人们对细节的精打细算,就无法解释什么是“类型”。

我不知道在哪里真正问这个问题,但是我已经连续阅读了好几天没有任何合理的答案。我应该如何可视化“类型”,以及它与“价值”的关系?在我的6种解释中,人们最挑剔的是哪一种?我的头真的好痛...

我的漫画将解释Python中的概念,但是根据答案,我可以尝试以与语言无关的方式来解释编程概念。

2 个答案:

答案 0 :(得分:1)

一种类型就像一支运动队,一种价值就像它的一名球员。纽约尼克斯队只是一个标志,一件球衣,一套颜色和一个名字。需要一名球员穿上那件球衣并代表那支球队才能使尼克斯成为有价值的东西(双关语)。如果尼克斯是一种类型,帕特里克·尤因(Patrick Ewing)就是其中之一。

答案 1 :(得分:0)

  

我应该如何可视化“类型”以及它与“价值”的关系?

真的很简单。

您知道数学中的集合。

Wikipedia

  

在数学中,集合是不同对象的集合,   本身就是一个对象。

集合的名称如ColorPeople等,类型的名称如ColorPeople

集合具有值,类型具有值。

一组Colors
   类型:Color
   值:BlueRed

一组Integers
   类型:Integer
   值:01

  

一个隐喻

People think of sets but programmers think of types.

或这个Dilbert漫画中的图片

You say Set I think Type.
I say Type you think Set.

还有什么需要补充的吗?


编辑

来自评论。

  

向我解释,在我看到的6个隐喻中,每个人都描述了类型。

类型的概念不是直觉的,因此设置类比很有帮助。将集合用作类比是一个过分的简化,因此通过遍历六个隐喻可以区分集合和类型不同的地方。

  1. “类型”是一个空的属性外壳,而“值”是填充它的内容。

首次输入类型或设置名称时,它为空。然后,向其中添加值以填充它。它可以没有值,并且仍然有效。

  1. “类型”是建立“值”的工厂。

“类型”可用于构造新值,但是集合不会构造新值。在数学中,他们使用set build notation

  1. “类型”是创建“值”的工厂的蓝图

对此,“蓝图”一词与abstract type的关联更多。除了set build notation以外,我不知道类似的方法。

  1. “类型”是一本规则手册,用于说明“值”可以做什么。

Object-oriented programming中,类型具有方法。如果狗是一种类型,那么它将运行一个方法。然后,您可以告诉狗跑步。

如果是纯函数式编程,则可以创建独立于类型的运算符,然后让该运算符处理该值。

集合(AFAIK)没有方法,但是数学具有operators可以处理值,并且运算符仅限于其处理的集合。因此,在编程中,运算符处理值,而在数学运算符中处理值。

  1. “类型”是已经内置了固有属性的“值”的标识标签。

当您给出没有类型的值时,它只是一个值,但是一旦您说出该值是什么类型,则该类型的所有属性和方法都可以与该值一起使用。

关于布景,如果我说5,那是什么?整数,自然数,实数,虚数的一部分,长度等。如果我说5具有整数类型,那么您知道可以加,减,而5的后继者是6,而5的后继者是5是4。如果我说5具有素数类型,那么您知道5的后继者是7,而5的前继者是3。

  1. “类型”是一个组织室,“价值”在被召唤到程序中之前就已经存在。

大声笑。真的有人写的。这样简单的看法。如果您在具体的世界中思考,那么值将是一个具体的实体,一个小室将是一个具体的容器。从这个意义上说,您必须将其物理移出容器才能使用。在这两种类型和集合中,您都不必移动它们即可使用它们。它们是抽象的,您可以引用它们或按值标识。

  

此外,作为形容词“ Typed”。那对我有很大帮助。

在Python中,变量没有类型(duck typing),直到您将值放入变量中,然后变量才能获得与之关联的类型。将值放入变量的动作是动词,因此名词变成动词,因此是“ Typed”,在X中被键入为Integer。

  

我从没听说过像这样使用术语“集合”。

我之所以只使用它,是因为它过于简单了,可以将您的治疗潜入您可以联系的事物。当我想到类型时,它与集合有很大的不同。