🕘

プログラミングにおける直交性とは

2023/01/13に公開

簡単に直交性とは

ある関数やメソッドが、他の関数やメソッドに影響しているかどうか

英名

Orthogonality(直交性)

もう少し詳しく直交性とは何か

Art of UNIX programmingという本でEric S.Raymondは直交性を以下のように説明しています。

直交性 は、複雑な設計でもコンパクトにするのに役立つ最も重要な特性の1つです。
純粋に直交する設計では、操作に副作用はありません。
各アクション(API呼び出し、マクロ呼び出し、言語操作のいずれであっても)は、他のアクションに影響を与えることなく、1つのことだけを変更します。制御しているシステムの各プロパティを変更する方法は1つだけです。

// 以下原文
Orthogonality is one of the most important properties that can help make even complex designs compact.
In a purely orthogonal design, operations do not have side effects; each action (whether it’s an API call, a macro invocation, or a language operation) changes just one thing without affecting others.
There is one and only one way to change each property of whatever system you are controlling.

つまり、
関数やメソッドが他の関数やメソッドに影響がない時に、直交性があると言います。
または、直交しているとも言います。

直交性の高い低いとは

直交性の度合いを"高い/低い"で表されることもあるようで、以下のようになっています。

コードが独立していて疎結合の場合 = 「直交性が高い」
コードが絡みあっていて密結合の場合 = 「直交性が低い」

まとめ

コードを修正した時に、変更した箇所以外に影響がない直交性があるコードを日々書いていきましょう。

参照

https://www.freecodecamp.org/news/orthogonality-in-software-engineering/
https://cs.stackexchange.com/questions/131005/is-c-considered-a-language-with-high-or-low-orthogonality

Discussion