Fed*_*oca 34
来自Eric S. Raymond的"UNIX编程艺术"
正交性是最重要的特性之一,可以帮助使复杂的设计紧凑.在纯粹的正交设计中,操作没有副作用; 每个动作(无论是API调用,宏调用还是语言操作)只改变一件事而不影响其他动作.有一种方法可以改变您控制的任何系统的每个属性.
tim*_*dev 11
从广义上讲,正交性是两种事物之间的关系,它们对彼此的影响很小.
该术语来自数学,其中两个向量如果它们以直角相交则是正交的.
想想典型的二维笛卡尔空间(您使用X/Y轴的典型网格).绘制两条线:x = 1,y = 1.两条线是正交的.您可以通过更改x来更改x = 1,这对另一条线路没有影响,反之亦然.
在软件中,该术语可以适用于您谈论系统的两个部分彼此独立的情况.
如果你有一组结构.如果语言允许程序员自由地混合这些结构,则称该语言是正交的.例如,在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)
大部分答案都long之以鼻,甚至晦涩难懂。关键是:如果工具是正交的,则可以添加,替换或删除它,以便使用更好的工具,而无需拧紧其他所有工具。
这是木匠用锤子和锯子(可用于锤打或锯切),或用某种新型的锤子/锯子组合(用来锯木,然后将其锤打在一起)之间的区别。两种方法都可以进行锯切,然后将其锤打在一起,但是如果您完成了一些需要锯切而不是锤打的任务,那么只有正交工具可以使用。同样,如果您需要拧紧而不是锤打,则不需要扔掉锯子,只要它与锤子正交(不与锤子混合)即可。
经典示例是unix命令行工具:您拥有一个用于获取磁盘内容(dd)的工具,另一个用于从文件(grep)过滤行的工具,另一个用于将这些行写入文件(cat)的工具,等等。可以随意混合和匹配。
| 归档时间: |
|
| 查看次数: |
37152 次 |
| 最近记录: |