プログラミング設計における直交性(オーソゴナリティ)とは、システムの各部分が独立して動作するように構築することを意味します。あるコンポーネントを変更しても、他のコンポーネントの動作や状態を予期せず変更してはなりません。これにより、隠れた副作用が減り、プログラムは理解しやすく、テストしやすく、保守しやすくなります。
Pythonでは、多くの言語機能は概ね直交的ですが、完全ではありません。例えば、`list`は要素の順序を保持し、重複を許可します。一方、`set`は重複を削除し、順序を保持しません。どちらも組み合わせて使うことはできますが、振る舞いが異なるため、特定の式が同じ結果になるとは限りません。
`list`や`dict`、またはカスタムクラスのインスタンスのようなオブジェクトを扱う場合、直交性を保つことはより難しくなります。関数が引数として渡されたミュータブル(可変)なオブジェクトを変更すると、関数の外側にある元のオブジェクトも変更される可能性があります。これは、関数と呼び出し元が同じオブジェクトへの参照を共有しており、コピーではないために起こります。
JavaScriptでも同様の動作があります。JavaScriptのオブジェクトや配列もミュータブルであり、参照によって渡されます。関数が渡されたオブジェクトや配列を変更すると、そのオブジェクトを参照しているプログラムの他の部分もその変更を受け取ります。このような共有された可変状態は、コンポーネントが完全に独立していないため、直交性を弱めます。
オブジェクトは状態を表すため、直交性を理解する上で重要です。オブジェクトの振る舞いや、関数やメソッドがその状態にどのような影響を与えるかを理解することは、意図しない相互作用を減らし、バグを見つけやすく修正しやすいコードを書くために不可欠です。

