Scegli gli approcci per aggiornare un oggetto

0

Supponiamo di avere un oggetto semplice creato dall'input dell'utente:

var input = { url: 'http://example.com/', path: 'abc', user: 'adam' };

E devo scrivere le funzioni che aggiornano le proprietà url e path in base ad alcune logiche di business, ci sono molti approcci:

A. funzionale

input.url = validate(input);
input.path = convert(input);

B. effetto collaterale

update(input);

C. crea un nuovo oggetto internamente

input = process(input);

Per javascript, è sempre meglio usare l'approccio funzionale, per facilitare il debug e la velocità? O un processo generale di riflessione sul decidere quale sia più appropriato.

    
posta bitinn 24.01.2015 - 11:29
fonte

1 risposta

1

Non definirei il primo approccio funzionale. Uno degli aspetti chiave del paradigma funzionale è quello di evitare lo stato mutabile. Quindi qualsiasi tipo di riassegnazione non è nello stile funzionale. Una volta definito input , non lo cambierai. Questo potrebbe essere più funzionale:

const validatedInput = {
    url: validate(input.url),
    path: convert(input.path),
    user: input.user
};

I vantaggi sarebbero codice più facile da ragionare. Sai cosa sono input e validatedInput e che non cambieranno dopo essere stati creati. Tuttavia, questo sarà più lento e utilizzerà più memoria rispetto agli altri approcci, utilizzando almeno oggetti JavaScript, quando viene creato un nuovo oggetto. È possibile che il cambiamento nelle prestazioni sia trascurabile in questo caso, ma è probabile che ci siano casi in cui non lo è.

Personalmente, andrei con un approccio funzionale ove possibile per garantire chiarezza e correttezza. Ma nei casi in cui ciò è probabile o dimostrato essere troppo lento, utilizzare alcune mutazione in un ambito molto limitato. Ad esempio, modificare una variabile solo all'interno di una determinata funzione. Ciò limiterà la probabilità di bug sottili causati da interazioni tra linee di codice distanti o in file diversi.

    
risposta data 25.01.2015 - 11:07
fonte

Leggi altre domande sui tag