[解決済み】「ファーストクラス」オブジェクトとは何ですか?
質問
あるプログラミング言語において、オブジェクトやその他の何かがファーストクラスであると言われるのはどのような場合か、またその理由は?また、そうでない言語とどのように違うのでしょうか?
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では、すべてをファーストクラスにすることを目指しています。 あなたの発言をした人の意図はファーストクラスという意味だと思います。
関連
-
Pythonコンテナのための組み込み汎用関数操作
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python カメの描画コマンドとその例
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] Pythonのsuper()は多重継承でどう動くのか?
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python string splicing.join()とsplitting.split()の説明
-
PythonはWordの読み書きの変更操作を実装している
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み] データ型が理解できない
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】ValueError: xとyは同じサイズでなければならない