2012-01-14 22 views
7

Sto cercando un modo descrittivo per documentare le strutture dati utilizzate nella mia applicazione JavaScript. Trovo difficile ottenere questo risultato a causa del carattere dinamico di JavaScript.Come documentare le strutture dati JavaScript/CoffeeScript

Per esempio, quello che potrebbe essere un buon modo per dire, che l'usato variabile distanza è una matrice bidimensionale con lunghezza ieje memorizza i numeri compresi tra -1 e MAX_INT. Potrei pensare a qualcosa di simile:

distance[i][j] = -1 <= n <= MAX_INT 

Che dire di un oggetto che viene usato come un mappa/dizionario per alcuni tipi di dati, che dire di un array bidimensionale in cui il primo elemento di un array definisce altro dati quindi il resto, ecc.

Ovviamente, è sempre possibile documentare queste cose in un testo, ho pensato, forse c'è un modo ben noto e usato per farlo in modo semiformale.

risposta

3

Anche se non è troppo ampiamente adottato (ancora?), C'è un draft standard for JSON schema. Sto imparando da solo, ma si potrebbe scrivere uno schema per l'array bidimensionale (avvolto all'interno di un oggetto) come:

{ 
    "description":"Two dimensional array of numbers", 
    "type":"object", 
    "properties":{ 
     "two-d-array":{ 
      "description":"columns", 
      "type":"array", 
      "items":{ 
       "description":"rows", 
       "type":"array", 
       "items": { 
        "description":"values", 
        "type":"number", 
        "minimum":-1, 
        "maximum":Number.MAX_VALUE 
       } 
      } 
     } 
    } 
} 

o semplicemente:

{ 
    "type":"array", 
    "items":{ 
     "type":"array", 
     "items": { 
      "type":"number", 
      "minimum":-1, 
      "maximum":Number.MAX_VALUE 
     } 
    } 
} 

Non v'è alcuna implementazione CoffeeScript che io sappia, ma c'è un elenco di diversi validatori JavaScript here. Sto giocando con quello che è stato scritto dagli autori delle specifiche chiamato (semplicemente abbastanza) json-schema e mi piace abbastanza chiamarlo da CoffeeScript.

+0

Nota: Number.MAX_VALUE non è supportato da json-schema. Dovrai espanderlo per i tuoi scopi. Tendo a limitare i miei veri "INT" a 2^32-1, perché gli operatori bit a bit funzionano solo su numeri così grandi, ma tecnicamente in JavaScript qualsiasi numero la cui mantissa rientra in 2^53 è considerata valida. –

1

Quello che tendo a fare nel mio JavaScript quando sto replicando un sacco di modelli di dati è quello di scrivere quale sarebbe la loro definizione di classe nei commenti. Non sono sicuro se questo è ciò che intendevi con la tua domanda.

// JavaScript Class jsHomeLocation 
// jsHomeLocation{ 
// string name 
// string address 
// } 

var jsHomeLocation = {}; 
jsHomeLocation.name = "Travis"; 
jsHomeLocation.address = "California"; 

Si potrebbe anche usare oggetti JavaScript per tenere traccia delle informazioni di esempio, una matrice bidimensionale

var distanceData = {}; 
distanceData.type = "two-dimensional array"; 
distanceData.length = i * j; 
distanceData.min = -1; 
distanceData.max = MAX_INT;