什么是"正交性"?

Ahm*_*gle 120 language-agnostic terminology lexicon

在谈论编程语言时,"正交性"意味着什么?

什么是正交性的例子?

C. *_*oss 253

正交性是指"改变A不会改变B"的属性.正交系统的一个例子是无线电,其中改变电台不改变音量,反之亦然.

非正交系统就像直升机,其中改变速度可以改变方向.

在编程语言中,这意味着当您执行指令时,除了该指令之外什么都不会发生(对于调试非常重要).

在引用指令集时还有一个特定的含义.

  • 我打赌直升机的例子来自“务实程序员”:) (3认同)
  • 那么函数式编程是完全正交的吗? (2认同)

Fed*_*oca 34

来自Eric S. Raymond的"UNIX编程艺术"

正交性是最重要的特性之一,可以帮助使复杂的设计紧凑.在纯粹的正交设计中,操作没有副作用; 每个动作(无论是API调用,宏调用还是语言操作)只改变一件事而不影响其他动作.有一种方法可以改变您控制的任何系统的每个属性.


Mar*_*ett 14

想想它能够改变一件事而不会对另一部分产生看不见的影响.


tim*_*dev 11

从广义上讲,正交性是两种事物之间的关系,它们对彼此的影响很小.

该术语来自数学,其中两个向量如果它们以直角相交则是正交的.

想想典型的二维笛卡尔空间(您使用X/Y轴的典型网格).绘制两条线:x = 1,y = 1.两条线是正交的.您可以通过更改x来更改x = 1,这对另一条线路没有影响,反之亦然.

在软件中,该术语可以适用于您谈论系统的两个部分彼此独立的情况.


Ara*_*raK 9

如果你有一组结构.如果语言允许程序员自由地混合这些结构,则称该语言是正交的.例如,在C中你不能返回一个数组(静态数组),在这种情况下C被认为是无法识别的:

int[] fun(); // you can't return a static array.
// Of course you can return a pointer, but the langauge allows passing arrays.
// So, it is unorthognal in case.
Run Code Online (Sandbox Code Playgroud)

  • 它只是说返回和数组放在一起时更复杂:你不能在不考虑它们之间的交互的情况下使用数组返回.理想情况下,你会知道返回意味着什么,以及数组是什么,所以你会知道返回数组会做什么,但实际上,它比这更复杂,因为C公开了关于数组的实现细节(并返回). (2认同)
  • 这是关于编程上下文中正交性的“更正确”的答案。“正交性”意味着编程结构可以与任何其他结构混合,并且其语义仍将保持不变。 (2认同)

Lee*_*e B 5

大部分答案都long之以鼻,甚至晦涩难懂。关键是:如果工具是正交的,则可以添加,替换或删除它,以便使用更好的工具,而无需拧紧其他所有工具。

这是木匠用锤子和锯子(可用于锤打或锯切),或用某种新型的锤子/锯子组合(用来锯木,然后将其锤打在一起)之间的区别。两种方法都可以进行锯切,然后将其锤打在一起,但是如果您完成了一些需要锯切而不是锤打的任务,那么只有正交工具可以使用。同样,如果您需要拧紧而不是锤打,则不需要扔掉锯子,只要它与锤子正交(不与锤子混合)即可。

经典示例是unix命令行工具:您拥有一个用于获取磁盘内容(dd)的工具,另一个用于从文件(grep)过滤行的工具,另一个用于将这些行写入文件(cat)的工具,等等。可以随意混合和匹配。