Che cosa significa "enumerabile"?

7

Il mio background in matematica è molto scarso (vale a dire l'ultima lezione di matematica pertinente presa era la Trigonometria delle scuole superiori due anni fa - un'altra storia per un'altra volta). Sto leggendo 'Javascript: The Definitive Guide' ed è un termine che viene ripetutamente utilizzato e che ho appena eseguito con esso. Ma sono arrivato a un capitolo (Capitolo 6 - Oggetti) in cui la mia mancanza di comprensione del termine e della sua applicazione in programmazione / OOP sta iniziando a diventare dannosa per il processo di apprendimento. I dizionari online non aiutano, quindi qualcuno ha una definizione più spiegabile e / o un esempio da mostrare?

    
posta gr33kbo1 28.05.2013 - 02:42
fonte

3 risposte

14

Matematicamente, i mezzi enumerabili "possono essere inseriti in una corrispondenza uno a uno con i numeri naturali". La maggior parte delle rappresentazioni nel calcolo sono enumerabili perché sono costituite da stringhe di bit e possono essere prese stringhe di bit per indicare i numeri nel sistema binario.

Tuttavia alcune rappresentazioni di dati non sono considerate enumerabili. Ad esempio, un numero in virgola mobile è composto da bit, ma lavoriamo con esso come un'approssimazione di un numero reale. A livello binario possiamo "contare" attraverso numeri consecutivi in virgola mobile, ma di solito questo non è rilevante nelle applicazioni numeriche.

In alcune altre situazioni, l'enumerazione è possibile, ma non c'è accordo sull'enumerazione an . Ad esempio, tutti gli oggetti nella tua immagine runtime costituiscono un insieme finito e possono essere enumerati. Il garbage collector lo fa quando cammina attraverso gli oggetti live. Ma l'applicazione non enumera l'insieme di tutti gli oggetti in quel modo senza riguardo per i limiti del tipo o del modulo; enumera oggetti più piccoli dello stesso tipo o correlati.

Di solito, dove esiste un'enumerazione formale, c'è un accordo tra tutte le parti. Ecco un insieme di valori. Questo è il primo Quello è il suo successore, e così via.

In alcuni linguaggi di programmazione esistono tipi enumerati: un modo disciplinato di definire costanti simboliche denominate che sono mappate dal compilatore a valori interi univoci. Se tali tipi sono strongmente tipizzati, queste costanti possono essere memorizzate solo in variabili del loro tipo corrispondente, chiamato un tipo enumerato . Ad esempio, un'enumerazione definita dall'utente di tipo month può assumere solo i valori da january a december . Questi sono ridotti ai valori da 0 a 11 e possono consentire l'aritmetica, come successor(january) che produce february , o la possibilità di usare l'enumerazione come indice di matrice: definire un array days[january..december] dove days[january] è, per esempio , 31. Lo scopo di un tipo enumerato , quindi, è di servire come un sottoinsieme dei numeri naturali, con altri nomi che sono distinti e forniscono chiarezza di significato (i nomi sono usati al posto delle costanti numeriche) e verifica del tipo: il colore red da un'enumerazione color non può essere assegnato a un'enumerazione del tipo month .

Il verbo enumerate viene anche usato per indicare il concetto di interrogare un'API per recuperare un elenco di oggetti, solitamente in modo graduale: enumerare le interfacce di rete, enumerare i file in una directory, e così sopra. Ogni volta che un oggetto si trova in una corrispondenza 1: N con altri oggetti, è suscettibile di supportare un'API di enumerazione che ci consente di attraversare tali oggetti o di recuperarli come elenco. La terminologia è un po 'torbida; per esempio in alcuni casi, anche se gli elementi non sono in un ordine particolare, ma possono essere tutti visitati senza ripetizione, è ancora un'enumerazione. Alcune strutture di dati del set dinamico come le tabelle hash non forniscono un ordine particolare e possono riorganizzarsi man mano che vengono ingrandite e ridotte, in modo che l'ordine effettivo vari quando vengono eseguiti gli inserimenti e le delezioni. A può arrivare prima di B , ma quando inseriamo C , ora B arriva prima di A perché si è verificata una riorganizzazione interna.

    
risposta data 28.05.2013 - 04:51
fonte
10

Ho appena estratto la mia copia di JavaScript: The Definitive Guide , capovolto nel capitolo 6, e ho letto velocemente la sezione 6.5 Enumeratng Properties . Ora, dovrei aggiungere che non sono una persona di matematica particolarmente strong, quindi spero che questo abbia un senso:

In particolare, "enumerable" significa che c'è una sorta di schema di ordinamento che si svolge, in modo da poter rapidamente / facilmente indirizzare gli elementi in quel set / sequenza / collezione (o, in quella sezione di JavaScript: The Guida definitiva , l'oggetto).

Per applicarlo a ciò che stai leggendo nel libro, quando l'autore dice che le proprietà con cui estendi una classe sono enumerabili , sta semplicemente dicendo che ogni proprietà che aggiungi a un oggetto (non quelli che sono ereditati) possono essere ripetuti. Quindi, se crei un oggetto obj in questo modo:

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

... quando lo si itera sopra con il seguente ciclo (sto usando i nomi delle variabili descrittive qui):

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

... vedrai tre elementi registrati nella tua console JS:

  • a
  • b
  • c

Questo ti dice che le proprietà nell'oggetto obj , sono enumerate dalle chiavi a , b e c .

    
risposta data 28.05.2013 - 03:02
fonte
9

Un enumerabile è un oggetto che può essere enumerato. "Enumerato" significa contare i membri di un insieme / collezione / categoria uno per uno (di solito in ordine, di solito per nome).

Un enumerabile è quindi un oggetto che può scorrere una serie di altri oggetti uno per uno.

    
risposta data 28.05.2013 - 02:57
fonte

Leggi altre domande sui tag