Quali vantaggi oggettivi concreti hanno le funzioni concatenate rispetto a un parametro opzioni per l'inizializzazione dell'oggetto?
Che cosa intendo? Come esempio, esiste una libreria chiamata dat.GUI che utilizza lo stile di funzione concatenato per impostare le cose. Ad esempio un cursore a intervallo semplice ha 4 o 5 parametri.
/**
* @param {object} object The object with a property you want a GUI for
* @param {string} property The name of the property to make a GUI for
* @param {number} min The minimum value
* @param {number} max The maximum value
* @param {number} [step] An optional step
*/
gui.add(object, property, min, max, opt_step)
Ma poi ci sono diverse impostazioni opzionali. Li imposti chiamando le funzioni concatenate. Ad esempio name(someName)
imposta l'etichetta mostrata sulla GUI. Il valore predefinito è il nome della proprietà. onChange(fn)
imposta un callback quando il valore cambia. listen()
indica alla GUI di controllare le modifiche alla proprietà.
Quindi, se vuoi impostare tutti quelli che potresti scrivere
gui.add(someObject, 'someProp', 10, 20).name('foo').onChange(someFunc).listen();
Dove come gui.add
ha preso un oggetto opzioni come input potresti scrivere qualcosa come
gui.add({
target: someObject,
property: 'someProp',
min: 10,
max: 20,
name: 'foo',
onChange: someFunc,
listen: true,
});
Questo è un 6 di una mezza dozzina di un altro tipo di situazione, in quanto in entrambi gli stili va bene o uno stile ha vantaggi concreti rispetto all'altro.
In cima alla mia testa
-
le funzioni concatenate sono più concise ma il parametro delle opzioni è più leggibile. Vedo
min: 10
e so che 10 èmin
e nonwidth
osize
onumItems
ecc. Al contrario devo specificare tutti i parametri. -
i parametri delle opzioni sembrano più flessibili. Può più facilmente fare qualcosa come
gui.add(Object.assign({}, globalOptions, localOptions));
-
Il completamento del codice sembra un disastro.
Se esistono definizioni sia per le funzioni che per i tipi di parametri incluso il parametro options, allora sembra che sia simile? Vedere tutte le opzioni potrebbe essere utile ma il completamento dopo
gui.add(...).
dovrebbe mostrare tutte le funzioni concatenabili in modo che sia probabilmente la stessa? -
I parametri delle opzioni sono più probabili?
Con questo intendo se
giu.add
richiede 5 parametri in un ordine specifico, se in seguito risulta che il parametro # 3 non è importante ma # 4 è quindi troppo tardi, non è possibile scambiare facilmente l'ordine e fare quale era il parametro n. 3 in quanto tutti gli utenti dovevano cambiare il loro codice mentre con i parametri delle opzioni si può? -
In un linguaggio strongmente tipizzato se ci sono molte opzioni allora l'oggetto options stesso potrebbe diventare grande e complicato (molta inizializzazione per tutti i campi) mentre con le funzioni concatenate si creano solo le cose necessarie. Ma questo non si adatta a JavaScript, quindi non è un vantaggio lì?
-
Le funzioni concatenate possono essere richiamate successivamente individualmente
In altre parole
const control = gui.add(...); ...20 seconds later... control.name('foo');
Per lo stile di opzioni avresti bisogno di qualcosa come
setOptions(options)
metodo che potrebbe non essere cattivo ma potrebbe avere strane limitazioni come certe opzioni possono essere specificate solo al momento della creazione.
Qualcos'altro che mi manca? C'è una ragione oggettiva per scegliere l'una rispetto all'altra come in "se la situazione X usa funzioni concatenate, se la situazione Y usa un oggetto opzioni" o è principalmente solo un problema di stile?