Domanda

NEWBIE DYNY DYPIING QUI, sperando in alcune parole avvolte di saggezza.

Sono curioso di sapere se esiste una serie di migliori pratiche là fuori per affrontare gli argomenti della funzione (e siamo onesti, variabili in generale) in linguaggi digitati dinamicamente come JavaScript. Il problema in cui mi sono imbattuto spesso è per quanto riguarda la leggibilità del codice: sto guardando una funzione che ho scritto qualche tempo fa e non ho idea di quale sia effettivamente la struttura delle variabili dell'argomento. Di solito va bene al momento dello sviluppo del nuovo codice: tutto è fresco nella mia testa, ogni variabile e parametro ha senso perché li ho appena scritti. Una settimana dopo? Non così tanto.

Ad esempio, dì che sto cercando di sgretolare un sacco di dati sulle sessioni degli utenti su un sito Web e ottenere qualcosa di utile:

var crunchSomeSessionData = function(sessionsMap, options) {
    [...]
}

Ignorare il fatto che il nome della funzione non sia utile - questo ovviamente è un grosso problema - in realtà non so nulla di ciò che è la struttura di sessioni o opzioni. Ok .. Ho K/V coppia l'oggetto SessionSmap, dal momento che si chiama mappa, ma il valore è primitivo, un array, un altro hash di roba? Cosa sono le opzioni? Un array? Una stringa separata da spazi bianchi?

Ho alcune opzioni:

  • Chiarire la struttura esattamente nell'intestazione dei commenti per la funzione. Il problema è che ora devo mantenere il codice in due posti.
  • avere il più utile di un nome possibile. Ad esempio UseridToaryOfTimestampsMap o addirittura avere una sorta di dialetto pseudo-ungarico per la denominazione variabile che solo io parlo che spiega quali sono i tipi e come sono nidificati. Questo porta a un codice davvero verboso, e sono un fan di mantenere le cose sotto gli 80 colon.
  • Abbattere le funzioni fino a quando non passerò mai solo primitivi o raccolte di primitive. Immagino che potrebbe funzionare, ma probabilmente finirei con micro-funzioni che hanno una o due righe al massimo, funzioni che esistono solo ai fini della leggibilità. Ora devo saltare su tutto il file e ricomporre la funzione nella mia testa, il che ha peggiorato la leggibilità.
  • Alcune lingue offrono la distruzione, che in una certa misura può quasi essere considerata una documentazione extra per ciò che il tipo di argomento conterrà.
  • Potrebbe creare una "classe" per il tipo specifico di oggetto, anche se non farebbe un'enorme differenza in un linguaggio prototipo come JS e probabilmente aggiungerebbe più sovraccarico di manutenzione del necessario. In alternativa, se disponibile, si può provare a utilizzare i protocolli, forse qualcosa sulla falsariga del defrecord di Clojure, ecc.

Nel mondo tipizzato staticamente questo non è così tanto un problema. In C# per esempio ottieni un:

public void DoStuff(Dictionary<string, string> foo) {[...]};

Ok, facile, so esattamente cosa sto ottenendo, non c'è bisogno di leggere l'intestazione della funzione o tornare al chiamante e capire cosa sta inventando ecc.

Qual è la soluzione qui? Tutte le persone si sviluppano in linguaggi tipizzati in modo dinamico continuamente sbalorditi da quali tipi stanno ottenendo le loro subroutine? Ci sono strategie di mitigazione?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top