Javaが直交しているかどうか、もしそうなら、それを直交させる機能は何ですか。言語が直交しているかどうかをどのように判断できますか? たとえば、いくつかの Web サイトで、C++ は直交していないことを発見しましたが、説明はありません。他のどの言語が直交していますか? このトピックに関する情報はインターネット上にほとんどないため、助けてください。
ありがとう
Javaが直交しているかどうか、もしそうなら、それを直交させる機能は何ですか。言語が直交しているかどうかをどのように判断できますか? たとえば、いくつかの Web サイトで、C++ は直交していないことを発見しましたが、説明はありません。他のどの言語が直交していますか? このトピックに関する情報はインターネット上にほとんどないため、助けてください。
ありがとう
The Art of UNIX Programming, Chapter 4. Modularity, Orthogonality, Page 89:
直交性
直交性は、複雑な設計をコンパクトにするのに役立つ最も重要な特性の 1 つです。純粋な直交設計では、操作に副作用はありません。各アクション (API 呼び出し、マクロ呼び出し、または言語操作のいずれであっても) は、他に影響を与えることなく 1 つのことだけを変更します。制御しているシステムの各プロパティを変更する方法は 1 つだけです。
プログラミング言語の語用論、第 6 章、228 ページ:
直交性とは、特徴を任意の組み合わせで使用できること、組み合わせがすべて意味を成すこと、および組み合わせた他の特徴に関係なく、特定の特徴の意味が一貫していることを意味します。
Lisp では、5.2 直交性:
直交言語とは、少数の演算子をさまざまな方法で組み合わせることで、多くのことを表現できる言語です。
直交プログラミング言語は、各機能の副作用が最小限またはまったくない言語であり、その使用が他の機能にどのように影響するかを考えずに使用できると思います。これは、直交 API の定義から借りています。
Javaでは、たとえば、識別子で同時に使用すると互いに影響を与える可能性のあるキーワード/構造の組み合わせがあるかどうかを評価する必要があります。たとえば、 メソッドにpublic
とstatic
を適用する場合、これらは互いに干渉しないため、これら 2 つは直交しています (キーワードの意図以外の副作用はありません)。
直交性を証明するには、すべての機能に対してそれを行う必要があります。それはそれについて行く1つの方法です。この問題についても、直交している、または直交していないという明確なカットは存在しないと思います。
直交プログラミング言語という用語を使用するのは珍しいことです。通常、コンピューターサイエンスでは、直交命令セットについて実際に話している. ただし、意味を言語の文法に拡張する場合:
「...つまり[言語]には、比較的少数の基本的な構成要素と、それらの構成要素を結合するための一連の規則があります。すべての構成要素には、それに関連付けられた型があり、それらの型に制限はありません....」 ALGOLを参照してください
次に、言語のすべての命令がすべてのデータ型で機能しない場合、非直交性が生じると想定できます。ただし、これは逆が真であることを意味するわけではありません。つまり、すべての言語命令がすべてのデータ型で機能する場合、その言語が直交しているとは限りません。
より正式には、直交言語には、特定の操作を実行する方法が 1 つだけあります。非直交言語には、同じ効果を達成する方法が複数あります。
最も簡単な例:
for loop; vs. while loop;
for と while は非直交です。
直交性は、言語に依存しない設計の機能です。確かに、システムの直交設計を容易にする言語もありますが、システムの設計を可能な限り直交に保つために特定の言語に焦点を当てるべきではありません。
一部の言語には直交性を促進する機能 (注釈、組み込み AOP など) がありますが、直交性は実際には言語機能そのものではありません。Java の直交性について: log4j を例として使用して、これに関する小さなケース スタディを書きました: 「Orthogonality By Example」 - これは役に立つかもしれません。