1. ホーム
  2. パイソン

[解決済み】「ファーストクラス」オブジェクトとは何ですか?

2022-04-04 18:25:08

質問

あるプログラミング言語において、オブジェクトやその他の何かがファーストクラスであると言われるのはどのような場合か、またその理由は?また、そうでない言語とどのように違うのでしょうか?

Pythonのように「すべてがオブジェクトだ」と言うとき、それは本当に「すべてがファーストクラスだ」という意味なのでしょうか?

どうすれば解決するの?

要するに、そのオブジェクトの使用に制限がないということです。と同じです。 他のオブジェクトと同じです。

第一級オブジェクトは、動的に生成、破壊、関数に渡す、値として返すことができ、プログラミング言語の他の変数が持つすべての権利を持つ実体です。

<ブロッククオート

言語によって、これは以下のようになります。 を意味する。

  • 匿名リテラル値として表現可能であること
  • 変数に格納可能
  • データ構造で保存可能であること
  • 本質的な同一性を持つ(任意の名前に依存しない)。
  • 他のエンティティと同等に比較可能であること
  • プロシージャ/関数のパラメータとして渡すことができる。
  • プロシージャ/関数の結果として返せること
  • 実行時に構築可能であること
  • 印刷可能
  • 可読性
  • 分散したプロセス間で転送可能であること
  • 実行中のプロセスの外部で保存可能であること

ソース .

しかし、C++では、関数そのものはファーストクラスのオブジェクトではありません。

  • 演算子「()」をオーバーライドすることで、ファーストクラスであるオブジェクト関数を持つことができます。
  • 関数ポインタはファーストクラスです。
  • boost bind, lambda, function はファーストクラス関数を提供します。

C++では、クラスはファーストクラスのオブジェクトではありませんが、そのクラスのインスタンスはファーストクラスのオブジェクトです。 Pythonでは、クラス は第一級のオブジェクトです。 (参照 この答え は、オブジェクトとしてのクラスについての詳細です)。

Javascriptのファーストクラス関数の例です。

// f: function that takes a number and returns a number
// deltaX: small positive number
// returns a function that is an approximate derivative of f
function makeDerivative( f, deltaX )
{
    var deriv = function(x)
    { 
       return ( f(x + deltaX) - f(x) )/ deltaX;
    }
    return deriv;
}
var cos = makeDerivative( Math.sin, 0.000001);
// cos(0)     ~> 1
// cos(pi/2)  ~> 0

ソース .

第一級オブジェクトでないエンティティは第二級オブジェクトと呼ばれる。 C++の関数は、動的に生成できないので二級です。

編集について。

EDIT 人が "すべてはと言うとき オブジェクト" (Pythonのように)ですか? という意味です。 first-class"?

オブジェクトという言葉はゆるやかに使うことができ、ファーストクラスであることを意味するものではありません。 また、概念全体を「ファーストクラスの実体」と呼ぶ方がより理にかなっているかもしれません。 しかし、Pythonでは、すべてをファーストクラスにすることを目指しています。 あなたの発言をした人の意図はファーストクラスという意味だと思います。