in linguaggio dinamico come javascript come fai a sapere qual è l'argomento?

7

In Java o Scala se ho un argomento configuration: Conf , posso cercare Conf class/trait/case class e vedere il suo costrutto in modo da sapere quali argomenti passare.

Recentemente ho iniziato a trattare con JavaScript, vedo una funzione come questa:

function init(conf) {
  some body // as external developer to init I should not mess 
            // with the internals here I just use init, proper design.
 }

Cosa sono curioso di sapere, come è possibile che io sappia cosa inviare esattamente in conf ? documentazione? esempi? annusare l'implementazione di init ? sembrano tutte pessime alternative per me, non ben formate, a seconda della scrittura dello sviluppatore o non della documentazione che fornisce o meno degli esempi. non c'è un modo strict più formale per farmi sapere cosa significa conf?

Devo dire che nel mio lavoro quotidiano con i linguaggi tipizzati staticamente non ho bisogno di quasi nessuna documentazione, guardo solo le funzioni dei tipi che ricevono e so cosa devo passare nella maggior parte dei casi.

    
posta Jas 25.01.2016 - 10:37
fonte

4 risposte

5

Non lo fai. Questo è il problema. Quando i tipi non sono dichiarati sugli argomenti di un metodo e non c'è un commento sul codice che dice cosa si aspetta di ricevere, ci sono solo due modi per capire cosa si aspetta che tu passi. Esaminare la funzione stessa e vedere cosa sta facendo con l'input, o guardare la documentazione. (Oppure codice di esempio, che è davvero un'altra forma di documentazione.)

Sfortunatamente, osservare il codice, anche se è "una piccola, ben scritta funzione", potrebbe non essere facile come suggerisce David Arno nella sua risposta. Molte funzioni piccole e semplici consistono in nient'altro che passare gli argomenti a una o più chiamate di funzione, riorganizzando le cose per adattarle in modo più conveniente. Poi si finisce con sempre più codice da scavare. A seconda di quello che stai facendo, potresti dover fare una dozzina di livelli prima di raggiungere il codice che effettivamente fa qualcosa. (Questo è fastidiosamente comune nel codice di accesso al database, per esempio.) E se uno qualsiasi dei metodi lungo la strada chiama metodi di tipi sconosciuti, il tuo lavoro diventa ancora più confuso.

TLDR: nel codice non banale, se non si dispone di una buona documentazione corretta , è spesso molto difficile sapere cosa passare a un argomento non tipizzato. Questo è uno dei motivi principali per cui raramente si vedono progetti grandi e complessi scritti in linguaggi dinamici.

    
risposta data 28.01.2016 - 14:39
fonte
6

Questo non è un problema esclusivo di JavaScript o anche solo delle lingue dinamiche. Ad esempio, potresti avere il codice Java equivalente:

void init(Configuration conf) {
    ...
}

e poi scopri che Configuration è una classe final senza costruttori pubblici e non ti resta che cercare come ottenere un'istanza di quella classe.

In genere, osservare il codice è la prima cosa da fare, supponendo che la fonte sia disponibile. La fonte è l'unica documentazione ufficiale, aggiornata e garantita per ciò che fa la funzione. Se si tratta di una funzione piccola e ben scritta, calcolare ciò che conf deve essere dovrebbe essere un compito facile.

Se la libreria / framework in questione ha una documentazione di accompagnamento, potresti essere in grado di usarla per capire come usare la funzione.

Infine, specifico per JavaScript, se vuoi la digitazione statica, usa TypeScript , che è un'estensione tipizzata in modo statico libera, open-source in JavaScript.

    
risposta data 25.01.2016 - 13:51
fonte
-1

Digitato dinamicamente o no, è meglio consultare la documentazione e / o esempi.

Anche se sai cosa è tipo un parametro, spesso è più rapido e sicuro basare il tuo codice su un esempio, con una documentazione più dettagliata a portata di mano, piuttosto che presumere di sapere cosa stai facendo in base al tipo di parametro.

Altrimenti, stai solo facendo delle supposizioni e sperimentando comunque. E se questa è la tua preferenza - bene, buona fortuna , prima di tutto. Ma, se vuoi davvero lavorare su ipotesi (o forse stai lavorando con una biblioteca nera senza documenti, miniata, nera), puoi anche iniziare con il minimo numero di assunzioni possibili: dargli un null e vedere quale errore (s ) torni.

    
risposta data 25.01.2016 - 19:02
fonte
-2

Errore di prova.

In realtà, dubito che ci sia una risorsa senza una documentazione adeguata. Se davvero non riesci a trovare cosa va dove, puoi digitare il nome della funzione senza parentesi nella console live di Chrome, quindi, se la functiom non è una funzione nativa, stampa la sorgente della funzione.

    
risposta data 25.01.2016 - 10:50
fonte