最初の問題は、オブジェクト指向と機能を混在させることができないという誤解だと思います。JavaScript、ActionScript、Python、C#、F#の両方として、少なくともWikipediaで説明されている言語の簡単なリスト。
2番目の問題は、一流の関数の定義のようです。たとえば、C#がそれらを持っていると考えないのはなぜですか。
私は関数型言語の専門家ではないので、間違っている場合はコメントで修正してください。しかし、私の理解では、一流の関数を含めること自体が、言語が関数型パラダイムをサポートするかどうかを定義するということです。
本当の質問は何ですか?
だから、オブジェクト指向言語も機能的であり、これらの言語にはファーストクラスの機能が含まれていることを理解すると、なぜあなたが探している質問は、オブジェクト指向言語にファーストクラスの機能が含まれないのですか?
関数のオーバーロード
この主な理由の1つは、言語が関数のオーバーロードをサポートすることを選択した場合に、ファーストクラス関数を定義するのが難しいことです(Javaの例)。
public int dispatchEvent(Event event);
public int dispatchEvent(String event, Object data);
dispatchEvent
変数はどの関数を参照しますか?
クラスベースのプログラミング
クラスベースのプログラミングは、言語がファーストクラスのオブジェクトをサポートすることを妨げませんが、より混乱させたり、答えられる質問を追加したりできます。
例えば、ActionScriptは、ECMAScript言語として、JavaScriptのようなはるかに機能的なパラダイムで始まりました。関数は本質的にオブジェクトにバインドされていませんでした。実行時のスコープであるため、基本的にどのオブジェクトでも呼び出すことができました。
(動的ではない)クラスを追加すると、クラス自体だけでなく、本質的にインスタンスにバインドされている関数があります。これは、Function.apply
私が正直に彼らがそれをどのように扱ったかを見つけるために掘り下げていないという仕様にいくつかのしわを投げます。