2010-07-13 12 views
13

Eventuali duplicati:
Why avoid increment (“++”) and decrement (“--”) operators in JavaScript?perché non dovremmo usare ++ in javascript?

ho sentito in alcuni posti che non si consiglia di utilizzare ++ & - in javascript, e noi dovrebbe usare + = 1 o - = 1 invece. Qualcuno può chiarire il motivo per me?

+4

Sono interpretati come la stessa cosa. Dove hai * sentito * questo? –

+2

JSLint si lamenterà di Jason. – tbranyen

+2

Crockford, quasi certamente. –

risposta

36

Perché Douglas Crockford ha le sue opinioni su come qualcosa di confusione può o non può essere. Funzionano bene, JSLint sta semplicemente proiettando le sue opinioni.

+0

OK, questo ha senso, e sembra essere il consenso anche qui, quindi continuerò a usare ++. Javascript ha alcuni modi strani di fare le cose ogni tanto ed è difficile dire quando una raccomandazione è una cosa personale o qualcosa di basato sulle prestazioni. –

+1

Mi sono piaciute molto le Good Parts, ma sono rimasto molto deluso dal suo fondamento logico per aver dichiarato l'incremento unilaterale e il decremento come una brutta parte. Certo, possono essere utilizzati in modi - come parti di sadici/masochistici per loops - ma ciò vale per molte caratteristiche linguistiche. Potrebbe valere per tutti se si spende abbastanza tempo creando esempi folli. –

+1

Sigh. Crockford ha un * molto * a cui rispondere, vorrei che la gente non prendesse la sua opinione come gospel così tanto ... – annakata

2

L'unica buona ragione per cui posso pensare è la chiarezza. Non devi preoccuparti per la seguente situazione:

var result = ++i; 

Oppure:

var result = i++; 
+6

Non usare mai cose che non capisci. Per favore usa le cose che tu * fai * capisci! (La stessa cosa vale per 'break',' continue', Delphi's 'with' e tutte le altre cose che abbiamo discusso a SO nelle ultime settimane.) –

+0

@Andreas, cose del genere _sound_ buone, ma in realtà, quanti professionisti può permettersi di imparare a vedere attraverso ogni livello di astrazione e capire un sistema dalla fisica quantistica alla GUI? Credo che tutti dovrebbero sforzarsi di apprendere i dettagli del modello operativo dello strato di astrazione a cui lavorano. Dico "sforzarmi" perché in generale non c'è modo di sapere quando capisci veramente ogni dettaglio del modello operativo di un livello di astrazione. –

+0

@Andreas c'è un principio più forte - non usare mai cose che potrebbero essere fraintese, da soli o da altri. La differenza tra '++ i' e' i ++ 'è un ottimo esempio. –

16

Chiunque pensi di fare il suggerimento opposto ...?

Utilizzare gli operatori di incremento (++) e decremento (-) quando possibile. Molto più semplice. (Ed è quello per cui sono lì.)

+1

concordato. Perché * non dovrei * usiamo alcuni degli elementi di linguaggio più convenienti che rendono la sintassi di C così bella in primo luogo? – Robusto

+1

non che mi interessi '++'/'--', li uso sempre. però. non sono sicuro che posso * davvero * chiamarli molto più semplici. considera 'var c = a ++ + b' e' var c = a + ++ b'. * tutte e tre le variabili * avranno valori diversi a seconda di dove si posizionano gli spazi, qui, che si apre per la possibilità di interpretare erroneamente 'var c = a +++ b' –

+2

@David Hedlund - true. C'è una potenziale confusione. Tuttavia, l'operatore di incremento è MEANT per incrementare. Il suo scopo è tanto semplice quanto diventa. Usare '+ = 1' o' = var + 1' mi sembra fare x + x quando vuoi raddoppiare qualcosa invece di x * 2. Codifica cosa intendi. – froadie

4

L'unico motivo per cui posso pensare è che il tuo Javascript ha più probabilità di essere modificato da un idiota rispetto a qualsiasi altro codice che scrivi (html ??).

Quindi, per un noob,

x=x+1 ; 

è più leggibile rispetto

x++; 

Quando si tratta di programmatori esperti, in realtà non importa.

7

L'unica volta che ho visto questi operatori scoraggiati era nel libro Douglas Crockford'sJavaScript: The Good Parts.

Citando le "parti cattive" Appendice:

L'incremento e decremento operatori permettono di scrivere in uno stile estremamente conciso. In linguaggi come C, che permettono di scrivere battute che potrebbero fare le copie di stringhe:

for (p = src, q = dest; !*p; p++, q++) *q = *p; 

Hanno anche incoraggiare uno stile di programmazione che, a quanto pare, è avventato. La maggior parte dei bug di sovraccarico del buffer che creavano terribili vulnerabilità di sicurezza erano dovuti a codice come questo.

Nella mia pratica, ho osservato che quando ho usato ++ e --, il mio codice tendeva a essere troppo stretto, troppo criptico. Quindi, per questioni di disciplina, non li uso più. Penso che, di conseguenza, il mio stile di codifica sia diventato più chiaro.

Inoltre, citando il JSLint documentation (lo strumento qualità del codice che ha scritto):

Il ++ (incremento) e -- operatori (decremento) sono stati conosciuti per contribuire alla cattiva codice incoraggiare l'eccessiva ingannevolezza. Sono seconde solo all'architettura difettosa nel consentire virus e altre minacce di sicurezza. C'è un'opzione plusplus che vieta l'uso di questi operatori.

Davvero non ha voglia di questi operatori ... Ma dai! Penso che possiamo ancora utilizzare gli operatori ++ e senza scrivere codice criptico. Li uso e mi piacciono. Tutti li usano.

Si noti che sebbene JSLint abbia l'opzione per disabilitare questi operatori, questa opzione non è abilitata per impostazione predefinita.

+6

Ben detto. Mi sembra che Crockford incolpi la pistola per il buco nel suo piede. O forse è stato proprio quell'uomo di paglia a farlo ... – annakata

+0

La maggior parte dei bug di sovraccarico del buffer che creavano terribili vulnerabilità di sicurezza erano dovute al fatto che le stringhe C sono terminate con null. –

7

La ragione per cui Crockford et al. scoraggia l'uso di ++/-- è che introducono effetti collaterali. Non c'è praticamente alcun motivo per utilizzare i+=1; invece di i++; perché entrambe sono istruzioni singole, ma ci sono molti motivi per cui una dichiarazione fa una sola cosa e ++ rende facile violare quella regola.

L'uso scoraggiante di ++ significa che non dobbiamo mantenere la distinzione tra i++ e ++i nelle nostre teste. Significa che siamo meno propensi a cercare di usarli in modi intelligenti ma confusi. È buona norma non usarli, imo, per queste ragioni.

0

utilizzare il ++, è standard e ha una buona situazione di essere lì.

3

L'utilizzo di ++/-- può limitare le opzioni di mins js, poiché il loro significato è molto sensibile agli spazi bianchi. A seconda del minificatore, potrebbe persino introdurre errori nel codice di lavoro. Crockford spiega (nella sezione Attenzione) here.

+1

Non utilizzare un minificatore che non capisca il codice che riduce. –

Problemi correlati