web-dev-qa-db-ja.com

「列挙可能」とはどういう意味ですか?

私の数学のバックグラウンドは非常に貧弱です(つまり、最後に取得した関連する数学のクラスは2年前に高校の三角法でした-別の時代の別の話)。私は「Javascript:The Definitive Guide」を読んでいますが、それは繰り返し使用されている用語であり、私はそれをちょっと試してみました。しかし、私は章(第6章-オブジェクト)に来ました。プログラミング/ OOPでの用語とそのアプリケーションの理解の欠如が学習プロセスに有害になり始めています。オンライン辞書は役に立たないので、誰かがより説明的な定義や例を示しますか?

8
gr33kbo1

数学的には、列挙可能とは「自然数と1対1で対応できる」という意味です。コンピューティングにおけるほとんどの表現は、ビットの文字列で構成されているため列挙可能であり、ビットの文字列はバイナリシステムの数値を表すものと見なすことができます。

ただし、一部のデータ表現は列挙可能とは見なされません。たとえば、浮動小数点数はビットで構成されますが、実数の近似値として扱います。バイナリレベルでは、連続する浮動小数点数を「カウント」できますが、通常、これは数値アプリケーションには関係ありません。

他のいくつかの状況では、列挙が可能ですが、an列挙については合意がありません。たとえば、ランタイムイメージ内のすべてのオブジェクトは有限のセットを構成し、列挙することができます。ガベージコレクターは、ライブオブジェクトをウォークスルーするときにそれを行います。ただし、アプリケーションは、タイプやモジュールの境界に関係なく、すべてのオブジェクトのセットをそのように列挙するわけではありません。同じ種類の、または関連する小さいオブジェクトを列挙します。

通常、列挙が正式に存在する場合、すべての当事者による合意があります。ここに値のセットがあります。これが最初です。それが後継者などです。

一部のプログラミング言語では、列挙型が存在します。コンパイラによって一意の整数値にマップされる名前付きシンボリック定数を定義するためのいくつかの統制された方法です。そのような型が強く型付けされている場合、これらの定数は、対応する型の変数(列挙型と呼ばれる)にのみ格納できます。たとえば、タイプmonthのユーザー定義の列挙は、januaryからdecemberまでの値のみを取ることができます。これらは値0から11に減らされ、successor(january)のような算術、februaryの生成、または配列のインデックスとして列挙型を使用する可能性を許可する場合があります。配列の定義days[january..december] どこ days[january]は、たとえば31です。したがって、列挙型の目的は、自然数のサブセットとして機能し、他の名前とは区別され、意味を明確にすることです(名前は使用されます)数値定数の代わりに)と型チェック:red列挙からの色colormonth型列挙に割り当てることはできません。

動詞enumerateは、APIにクエリを実行してオブジェクトのリストを取得するという概念を示すためにも使用されます。通常、段階的に、ネットワークインターフェイスを列挙し、ディレクトリ内のファイルを列挙します。オブジェクトが他のいくつかのオブジェクトと1:Nで対応している場合は常に、それらの兄弟オブジェクトをウォークスルーしたり、リストとして取得したりできる列挙APIをサポートする可能性があります。用語は少しあいまいです。たとえば、場合によっては、要素が特定の順序でなくても、すべて繰り返しなくてもアクセスできる場合でも、それは列挙です。ハッシュテーブルなどの一部の動的セットデータ構造は、特定の順序を提供せず、それらが拡大および縮小するときにそれ自体を再編成できるため、挿入および削除が実行されるときに実際の順序が変化します。 ABの前に来ることができますが、Cを挿入すると、内部再編成が行われたため、BAの前に来るようになりました。

15
Kaz

私はJavaScript:The Definitive Guideのコピーを取り出し、第6章に切り替え、セクション6.5 Enumeratng Propertiesをすばやく読みました。さて、私も数学の専門家ではないので、これが理にかなっているといいのですが。

具体的には、「列挙可能」とは、そのセット/シーケンス/コレクション(またはJavaScript:The Definitive Guide、オブジェクト)。

本で読んでいるものにそれを適用するために、クラスを拡張するプロパティがenumerableであると著者が言ったとき、彼は単にあなたがオブジェクトに追加するプロパティ(それらではなく)継承されます)を繰り返すことができます。したがって、オブジェクトobjを次のように作成すると、

var obj = {a: 1, b: 2, c: 3};

...次のループで繰り返します(ここでは説明的な変数名を使用しています)。

for (prop in obj) {
    console.log(prop);
}

... JSコンソールに記録された3つのアイテムが表示されます。

  • a
  • b
  • c

これは、オブジェクトobjのプロパティがキーab、およびcによって列挙であることを示しています。

11
nesv

Enumerableは、列挙可能なオブジェクトです。 「列挙型」とは、セット/コレクション/カテゴリのメンバーを1つずつカウントすることを意味します(通常、順番に、通常は名前で)。

列挙可能なオブジェクトは、他の一連のオブジェクトを1つずつ処理できるオブジェクトです。

9
Telastyn