Perché evitare gli operatori di incremento (“++”) e decremento (“-”) in JavaScript?


357

Uno dei suggerimenti per lo strumento jslint è:

++ e -
È noto che gli operatori ++ (incremento) e - (decremento) contribuiscono al cattivo codice incoraggiando l'eccessiva inganno. Sono secondi solo all'architettura difettosa nel consentire a virus e altre minacce alla sicurezza. Esiste un'opzione plusplus che vieta l'uso di questi operatori.

So che PHP costruisce come $foo[$bar++]potrebbe facilmente comportare errori off-by-one, ma non sono riuscito a trovare un modo migliore per controllare il loop di un while( a < 10 ) do { /* foo */ a++; }o for (var i=0; i<10; i++) { /* foo */ }.

Il jslint li sta evidenziando perché ci sono alcuni linguaggi simili che mancano della " ++" e " --" sintassi o la gestiscono in modo diverso, o ci sono altre motivazioni per evitare " ++" e " --" che potrebbero mancare?


59
Quindi si dovrebbe fare array [index = index + 1] invece di array [++ index] (se anche il primo è permesso!). Che carico di hooey.
Lawrence Dol,

34
Non ho visto Crockford fare index = index + 1. L'ho visto fare index + = 1. Penso che sia un'alternativa ragionevole. Ed è bello per quando vuoi cambiare il passo in qualcosa oltre a 1.
Nosredna,

124
Personalmente non sono un grande fan di Crockford. Sembra considerare malvagio tutto ciò che ha mai causato un bug nel suo codice.
Paolo Bergantino,

38
In JavaScript dovresti considerare ogni bug come un po 'malvagio, dal momento che non esiste una documentazione ufficiale né esiste un fornitore di certificati né apprendi correttamente JS nell'Università. Crockford e Firebug hanno riempito questi buchi nell'istruzione JavaScript.
Stevek,

40
++non causa bug. L'uso ++in modi "difficili" può portare a bug, specialmente se più di una persona mantiene la base di codice, ma questo non è un problema con l'operatore, è un problema con il programmatore. Non ho imparato JS all'università (perché non esisteva ancora), ma che importa? Ho fatto C, che ovviamente aveva ++prima, ma che ottiene anche un "e allora?" Non sono andato all'università per imparare una lingua specifica, ho imparato buone pratiche di programmazione che posso applicare a qualsiasi lingua.
nnnnnn

Risposte:


408

La mia opinione è di usare sempre ++ e - da soli su una sola riga, come in:

i++;
array[i] = foo;

invece di

array[++i] = foo;

Qualunque cosa oltre a ciò può essere fonte di confusione per alcuni programmatori e non ne vale la pena a mio avviso. I loop sono un'eccezione, poiché l'uso dell'operatore di incremento è idiomatico e quindi sempre chiaro.


3
Sì, è quello che faccio anche io. Difficile sbagliare e più facile per gli altri capire cosa stai facendo.
Nosredna,

65
Sembra essere al centro del problema e della mia confusione. Usato da solo, i ++; è cristallino. Nel momento in cui aggiungi altro codice attorno a quell'espressione di base, la leggibilità e la chiarezza iniziano a risentirne.
artlung

2
Accetto, ma non è solo relativo a JavaScript
Tobias,

5
Non dici se stai scrivendo C o C ++. Probabilmente dovresti usare l'operatore di incremento del prefisso in C ++, nel caso in cui la ivariabile diventi successivamente una classe composita, nel qual caso dovresti creare inutilmente un oggetto temporaneo. Trovo che l'operatore postfix sia esteticamente più piacevole.
Mc 0e,

2
Preferisco la versione a 1 riga. Ricorda un'operazione di stack. push è array [++ i] = pippo, pop è bar = array [i--]. (Ma con array basati su 0, array [i ++] = foo e bar = array [- i] sembrano ancora migliori). Un'altra cosa, lo odierei se qualcuno aggiungesse un codice aggiuntivo tra i ++; e array [i] = foo ;.
Florian F,

257

Sono francamente confuso da quel consiglio. Una parte di me si chiede se abbia più a che fare con la mancanza di esperienza (percepita o effettiva) con i programmatori javascript.

Vedo come qualcuno che semplicemente "hackerando" un po 'di codice di esempio potrebbe commettere un errore innocente con ++ e -, ma non vedo perché un professionista esperto li eviti.


7
Buon punto Jon B. Ecco perché mi ha infastidito così tanto. Crockford è un programmatore di carriera (degno di decenni), abituato a parlare con più lingue per decenni e fondamentalmente lavora con JavaScript sin dal suo inizio. Non credo che il suo consiglio provenga da "Sono un hacker inesperto pigro e distratto" - ecco perché sto cercando di capire da dove provenga.
artlung

14
@artlung Forse ha più a che fare con "Un hacker pigro e disattento inesperto" probabilmente incasinerà questo codice e non voglio confonderlo.
Chris Cudmore,

9
Non sono completamente d'accordo con la tua risposta. Secondo me, non si tratta di "Ho abbastanza esperienza per usarlo?" - ma "È più chiaro o no?" Se all'interno di un ciclo for, o da solo, è cristallino - tutti lo capiranno senza alcun danno. Il problema si presenta quando si inserisce ++un'espressione più contorta in cui ++ x è diverso da x ++, risultando in qualcosa di non facile da leggere. L'idea di Crockford non riguarda "posso farlo?" si tratta di "come posso evitare errori?"
ArtoAle,

1
È la preferenza personale in quale punto la chiarezza è più importante per te della compattezza. Questo va oltre l'essere abbastanza esperti da capire il codice. Vedi altre risposte per esempi in cui è più un problema che un valore.
Frug

1
Sono totalmente d'accordo. Perché handicap te stesso non usando parte della lingua? Trovo buoni motivi per usare sia i pre-incrementi che i decrementi. Per me, una linea come questa è chiara e concisa ... if (--imagesLoading === 0) start (); Se ritieni che il tuo codice non sia chiaro, usa i commenti!
xtempore,

69

C'è una storia in C nel fare cose come:

while (*a++ = *b++);

per copiare una stringa, forse questa è la fonte dell'eccessivo inganno a cui si sta riferendo.

E c'è sempre la domanda su cosa

++i = i++;

o

i = i++ + ++i;

davvero. È definito in alcune lingue e in altre non c'è garanzia su cosa accadrà.

A parte questi esempi, non penso che ci sia qualcosa di più idiomatico di un ciclo for che usa ++per incrementare. In alcuni casi potresti cavartela con un ciclo foreach o un ciclo while che controllava una condizione diversa. Ma contorcendo il tuo codice per cercare di evitare l'uso dell'incremento è ridicolo.


104
i = i ++ + ++ i; mi ha fatto un po 'male agli occhi - :)
Hugoware il

3
Anche il mio. Anche se non fossero tutte le stesse variabili, supponiamo che avessi x = a ++ + ++ b; - quella combinazione rende istantaneamente x, aeb più difficili da tenere nella mia testa. ora, se ciascuno di essi fosse istruzioni separate su righe separate, come in - a ++; ++ b; x = a + b; sarebbe più facile da capire a prima vista.
artlung

10
Purtroppo, (a ++; b ++; x = a = b) non è lo stesso valore di (a ++ + ++ b).
Thomas L Holaday,

8
@Marius: x = a+++b-> x = (a++)+b-> x = a + b; a++. Il tokeniser è goloso.
Callum Rogers,

14
Per una maggiore sicurezza sul lavoro, rimuovere gli spazi nel tuo ultimo esempio.
Mc 0e,

48

Se leggi JavaScript The Good Parts, vedrai che la sostituzione di Crockford per i ++ in un ciclo for è i + = 1 (non i = i + 1). È abbastanza pulito e leggibile, ed è meno probabile che si trasformi in qualcosa di "difficile".

Crockford ha fatto del divieto di autoincrement e autodecrement un'opzione in jsLint. Scegli se seguire i consigli o meno.

La mia regola personale è di non fare nulla in combinazione con l'autoincremento o l'auto-miglioramento.

Ho imparato da anni di esperienza in C che non ottengo sovraccarichi del buffer (o indice di array fuori limite) se continuo a usarlo in modo semplice. Ma ho scoperto che ottengo sovraccarichi del buffer se cado nella pratica "eccessivamente complicata" di fare altre cose nella stessa affermazione.

Quindi, per le mie regole, l'uso di i ++ come incremento in un ciclo for va bene.


Un punto eccellente sull'opzione "plusplus" è proprio questa, un'opzione. Sulla base della tua e di altre risposte penso di avere la sensazione che ++ da solo o un for-loop non siano di per sé confusi. Nel momento in cui combini quel ++ in un'altra istruzione, la tua dichiarazione diventa più difficile da leggere e comprendere nel contesto.
artlung

6
tutti ricevono buffer overflow. Perfino OpenSSH con il loro open source e i loro numerosi comitati di revisione
Eric,

11
@Eric Rivisitare il tuo commento di cinque anni: oh, come avevi ragione!
mercoledì

27

In un ciclo è innocuo, ma in un'istruzione di assegnazione può portare a risultati imprevisti:

var x = 5;
var y = x++; // y is now 5 and x is 6
var z = ++x; // z is now 7 and x is 7

Lo spazio bianco tra la variabile e l'operatore può portare anche a risultati imprevisti:

a = b = c = 1; a ++ ; b -- ; c; console.log('a:', a, 'b:', b, 'c:', c)

In una chiusura, anche i risultati imprevisti possono essere un problema:

var foobar = function(i){var count = count || i; return function(){return count++;}}

baz = foobar(1);
baz(); //1
baz(); //2


var alphabeta = function(i){var count = count || i; return function(){return ++count;}}

omega = alphabeta(1);
omega(); //2
omega(); //3

E innesca l'inserimento automatico di punti e virgola dopo una nuova riga:

var foo = 1, bar = 2, baz = 3, alpha = 4, beta = 5, delta = alpha
++beta; //delta is 4, alpha is 4, beta is 6

la confusione preincremento / postincremento può produrre errori singoli che sono estremamente difficili da diagnosticare. Fortunatamente, sono anche inutili. Esistono modi migliori per aggiungere 1 a una variabile.

Riferimenti


13
Ma non sono "inattesi" se capisci l'operatore. È come non usarlo mai ==perché non capisci la differenza tra ==e ===.
Greg84,

1
Esattamente. C'è una domanda C # che sminuisce i presupposti falsi.
Paul Sweatte,

Penso che il punto di Crockford sia che la maggior parte dei programmatori non "capisce completamente l'operatore" anche quando pensa di farlo; quindi, c'è il pericolo di usarli perché il potenziale di incomprensione è alto. Vedi il commento di @ Paul su false assunzioni che rafforza l'argomento secondo cui le persone generalmente fraintendono il modo in cui gli operatori di prefisso e postfisso funzionano effettivamente. Detto questo, ammetto che mi piace usarli, ma per il bene degli altri cerco di limitare il loro uso a casi idiomatici (vedi la risposta di cdmckay ).
Gfullam,

Il tuo link agli spazi bianchi sembra essere rotto.
Ruslan,

Cosa c'è di complicato nel tuo esempio di "spazio bianco"? Ottengo un risultato semplice di a: 2 b: 0 c: 1. Non vedo nulla di strano o inaspettato nel primo esempio ("istruzione di assegnazione").
Ken Williams,

17

Considera il seguente codice

    int a[10];
    a[0] = 0;
    a[1] = 0;
    a[2] = 0;
    a[3] = 0;
    int i = 0;
    a[i++] = i++;
    a[i++] = i++;
    a[i++] = i++;

poiché i ++ viene valutato due volte l'output è (dal debugger vs2005)

    [0] 0   int
    [1] 0   int
    [2] 2   int
    [3] 0   int
    [4] 4   int

Ora considera il seguente codice:

    int a[10];
    a[0] = 0;
    a[1] = 0;
    a[2] = 0;
    a[3] = 0;
    int i = 0;
    a[++i] = ++i;
    a[++i] = ++i;
    a[++i] = ++i;

Si noti che l'output è lo stesso. Ora potresti pensare che ++ ie i ++ siano uguali. Non sono

    [0] 0   int
    [1] 0   int
    [2] 2   int
    [3] 0   int
    [4] 4   int

Infine considera questo codice

    int a[10];
    a[0] = 0;
    a[1] = 0;
    a[2] = 0;
    a[3] = 0;
    int i = 0;
    a[++i] = i++;
    a[++i] = i++;
    a[++i] = i++;

L'output è ora:

    [0] 0   int
    [1] 1   int
    [2] 0   int
    [3] 3   int
    [4] 0   int
    [5] 5   int

Quindi non sono gli stessi, mescolando entrambi si ottiene un comportamento non così intuitivo. Penso che per i loop vada bene con ++, ma fai attenzione quando hai più simboli ++ sulla stessa riga o sulla stessa istruzione


3
Grazie per aver fatto questo esperimento. Codice particolarmente "semplice", ma diventa difficile trattenere il mio cervello molto rapidamente. Sicuramente rientra nella categoria "difficile".
artlung

28
Mi sono fermato dopo il primo esempio. Hai detto "Considera il seguente codice". No, nessuno scrive quel codice. È l'idiota che scrive che è imperfetto, non un costrutto linguistico.
Sam Harwell,

4
Hai dimostrato che due diversi pezzi di codice producono un output diverso e questo dimostra che è male?
Nickf

7
la conclusione è "fai attenzione quando hai più simboli ++ sulla stessa riga o sulla stessa istruzione". Non credo che tu l'abbia letto
Eric,

1
"poiché i ++ viene valutato due volte" - sbagliato! La modifica di una variabile due volte tra i punti della sequenza e anche l'utilizzo di essa non è valida in C ++ e comporta un comportamento indefinito. Quindi il compilatore può fare quello che vuole. I risultati qui presentati sono casuali dell'implementazione del compilatore.
tbleher,

16

La natura "pre" e "post" degli operatori di incremento e decremento può tendere a confondere chi non li conosce; questo è un modo in cui possono essere difficili.


29
Concordato; tuttavia, un professionista con esperienza non deve essere confuso.
Nate,

1
Penso che questo sia simile alla guida per evitare di rendere tutto statico o globale. Non c'è nulla di intrinsecamente sbagliato in esso come costrutto di programmazione, ma un uso eccessivo ignorante può portare a codici errati.
Joel Martinez,

6
La domanda non è se un buon programmatore possa "farsi strada" attraverso la logica - un buon codice idealmente non richiede alcun lavoro per capire. Penso che il punto di McWafflestix sia solo che non dovresti scrivere codice che dopo una breve ispezione potrebbe portare all'aggiunta di bug in due settimane o due anni. So di essere stato colpevole di aver aggiunto il codice a una routine che non avevo capito del tutto :)
Mike,

1
@ Mike: yah, nota come non ho specificato se gli operatori possono essere difficili per l'autore originale del codice o per i manutentori successivi. Generalmente, cerchiamo di presumere che i programmatori originali non usino costrutti con cui non hanno familiarità / familiarità (purtroppo, questo è spesso un presupposto errato); tuttavia, tale familiarità non si estende certamente ai manutentori (e, come detto tra parentesi sopra, non può nemmeno estendersi all'autore originale).
Paul Sonier,

Provo a scrivere il mio codice per la lettura di altri programmatori, ma non provo a scriverlo per i principianti.
Luca H,

16

A mio avviso, "L'esplicito è sempre meglio che implicito". Perché ad un certo punto, potresti essere confuso con questa dichiarazione di incrementi y+ = x++ + ++y. Un buon programmatore rende sempre più leggibile il proprio codice.


1
Non c'è nulla di implicito in x ++ o ++ y.
Florian F,

1
Questa cosa leggibile del codice è complicata ... Penso che ci sia una linea di base per quanto deve essere semplice il tuo codice, e noi, come comunità, dobbiamo prosperare un po 'ed essere in grado di leggere ciò che ora non è leggibile, come una riga con ternari nidificati, in modo da consentire a più cose di
entrare

14

La logica più importante per evitare ++ o - è che gli operatori restituiscano valori e causino effetti collaterali allo stesso tempo, rendendo più difficile ragionare sul codice.

Per motivi di efficienza, preferisco:

  • ++ i quando non si utilizza il valore restituito (nessun temporaneo)
  • i ++ quando si utilizza il valore restituito (nessuna stallo della pipeline)

Sono un fan del signor Crockford, ma in questo caso non sono d'accordo. ++iè il 25% in meno di testo da analizzare di i+=1 e probabilmente più chiaro.


13

Ho visto il video di Douglas Crockford su questo e la sua spiegazione per non usare l'incremento e il decremento è quella

  1. È stato usato in passato in altre lingue per rompere i limiti degli array e causare tutti i modi di cattiveria e
  2. Che gli sviluppatori JS siano più confusi e inesperti non sanno esattamente cosa faccia.

Innanzitutto gli array in JavaScript hanno dimensioni dinamiche e quindi, perdonami se sbaglio, non è possibile rompere i limiti di un array e accedere ai dati a cui non si dovrebbe accedere utilizzando questo metodo in JavaScript.

In secondo luogo, dovremmo evitare cose che sono complicate, sicuramente il problema non è che abbiamo questa funzione ma il problema è che ci sono sviluppatori là fuori che affermano di fare JavaScript ma non sanno come funzionano questi operatori ?? È abbastanza semplice. value ++, dammi il valore corrente e dopo l'espressione aggiungine uno, ++ value, incrementa il valore prima di darmelo.

Espressioni come a ++ + ++ b, sono semplici da capire se ricordi solo quanto sopra.

var a = 1, b = 1, c;
c = a ++ + ++ b;
// c = 1 + 2 = 3; 
// a = 2 (equals two after the expression is finished);
// b = 2;

Suppongo che devi solo ricordare chi deve leggere il codice, se hai una squadra che conosce JS a fondo, allora non devi preoccuparti. In caso contrario, commentalo, scrivilo in modo diverso, ecc. Fai quello che devi fare. Non credo che l'incremento e il decremento siano intrinsecamente cattivi o che generano bug o creano vulnerabilità, forse solo meno leggibili a seconda del pubblico.

A proposito, penso che Douglas Crockford sia comunque una leggenda, ma penso che abbia causato molta paura su un operatore che non se lo meritava.

Vivo per essere smentito però ...


10

Un altro esempio, più semplice di alcuni altri con un semplice ritorno di valore incrementato:

function testIncrement1(x) {
    return x++;
}

function testIncrement2(x) {
    return ++x;
}

function testIncrement3(x) {
    return x += 1;
}

console.log(testIncrement1(0)); // 0
console.log(testIncrement2(0)); // 1
console.log(testIncrement3(0)); // 1

Come puoi vedere, nessun post-incremento / decremento dovrebbe essere usato nell'istruzione return, se vuoi che questo operatore influenzi il risultato. Ma return non "cattura" gli operatori post-incremento / decremento:

function closureIncrementTest() {
    var x = 0;

    function postIncrementX() {
        return x++;
    }

    var y = postIncrementX();

    console.log(x); // 1
}

Solo una delle tue funzioni riceve x come parametro
Calimero100582

8

Penso che i programmatori dovrebbero essere competenti nella lingua che stanno usando; usalo chiaramente; e usalo bene. Io non credo che dovrebbero artificialmente paralizzare la lingua che stanno utilizzando. Parlo per esperienza. Una volta ho lavorato letteralmente accanto a un negozio Cobol dove non usavano ELSE "perché era troppo complicato". Reductio ad absurdam.


@downvoter Fascinating. Non pensi che i programmatori dovrebbero essere competenti nella lingua? Pensi che dovrebbero paralizzare artificialmente la lingua? Cos'è questo? Nessuna terza scelta qui.
Marchese di Lorne,

1
e un voto positivo per quell'esempio di COBOL, mi rende ancora più felice che COBOL si sia spento per lo più prima di entrare in programmazione
Mark K Cowan,

1
@MarkCowan Non vedo perché. Il mio punto riguarda la restrizione arbitraria, non la lingua. L'aneddoto non indica nulla di sbagliato in Cobol. Ciò che doveva estinguersi era quel negozio di programmazione, e lo fece. Visita le viscere di qualsiasi grande banca e scoprirai che Cobol è vivo e vegeto.
Marchese di Lorne,

2

Come menzionato in alcune delle risposte esistenti (di cui non sono fastidioso commentare), il problema è che x ++ ++ x valuta valori diversi (prima rispetto a dopo l'incremento), il che non è ovvio e può essere molto confuso - se viene utilizzato quel valore. cdmckay suggerisce abbastanza saggiamente di consentire l'uso dell'operatore di incremento, ma solo in modo tale da non utilizzare il valore restituito, ad esempio sulla propria riga. Includerei anche l'uso standard all'interno di un ciclo for (ma solo nella terza istruzione, il cui valore di ritorno non viene utilizzato). Non riesco a pensare a un altro esempio. Essendo stato "bruciato" da solo, consiglierei la stessa linea guida anche per altre lingue.

Non sono d'accordo con l'affermazione che questa rigidità eccessiva è dovuta alla mancanza di esperienza di molti programmatori JS. Questo è il tipo esatto di scrittura tipico dei programmatori "troppo intelligenti", e sono sicuro che sia molto più comune nei linguaggi più tradizionali e con gli sviluppatori JS che hanno un background in tali linguaggi.


1
Grazie per la risposta. Per commentare avrai bisogno di un valore di reputazione pari o superiore a 50. Vedi: stackoverflow.com/faq
artlung

1
@artlung: ne sono consapevole e della logica alla base. Stavo solo dicendo che è fastidioso :)
Vicino a Privman il

2

Nella mia esperienza, ++ i o i ++ non hanno mai causato confusione se non quando si è appreso per la prima volta come funziona l'operatore. È essenziale per i più elementari per i cicli e mentre i cicli sono tenuti da qualsiasi corso di scuola superiore o college tenuto in lingue in cui è possibile utilizzare l'operatore. Personalmente trovo che fare qualcosa di simile a ciò che è sotto per guardare e leggere meglio di qualcosa con un ++ sia su una linea separata.

while ( a < 10 ){
    array[a++] = val
}

Alla fine è una preferenza di stile e non di più, ciò che è più importante è che quando lo fai nel tuo codice rimani coerente in modo che altri che lavorano sullo stesso codice possano seguire e non debbano elaborare la stessa funzionalità in modi diversi .

Inoltre, Crockford sembra usare i- = 1, che trovo più difficile da leggere di --i o i--


2

Il mio 2 centesimi è che dovrebbero essere evitati in due casi:

1) Quando si dispone di una variabile che viene utilizzata in più righe e la si aumenta / diminuisce sulla prima istruzione che la utilizza (o l'ultima, o, peggio ancora, nel mezzo):

// It's Java, but applies to Js too
vi = list.get ( ++i );
vi1 = list.get ( i + 1 )
out.println ( "Processing values: " + vi + ", " + vi1 )
if ( i < list.size () - 1 ) ...

In esempi come questo, puoi facilmente perdere il fatto che la variabile viene auto-incrementata / decrementata o addirittura rimuovere la prima istruzione. In altre parole, usalo solo in blocchi molto brevi o in cui la variabile appare nel blocco solo su un paio di istruzioni vicine.

2) Nel caso di più ++ e - circa la stessa variabile nella stessa istruzione. È molto difficile ricordare cosa succede in casi come questo:

result = ( ++x - --x ) * x++;

Esami e test professionali fanno domande su esempi come sopra e in effetti mi sono imbattuto in questa domanda mentre cercavo la documentazione su uno di essi, ma nella vita reale non si dovrebbe essere costretti a pensare così tanto a una singola riga di codice.


1

Fortran è un linguaggio simile al C? Non ha né ++ né -. Ecco come si scrive un ciclo :

     integer i, n, sum

      sum = 0
      do 10 i = 1, n
         sum = sum + i
         write(*,*) 'i =', i
         write(*,*) 'sum =', sum
  10  continue

L'elemento index i viene incrementato dalle regole della lingua ogni volta attraverso il ciclo. Se si desidera incrementare di qualcosa di diverso da 1, contare all'indietro per due ad esempio, la sintassi è ...

      integer i

      do 20 i = 10, 1, -2
         write(*,*) 'i =', i
  20  continue

Python è C-like? Utilizza la comprensione di intervalli ed elenchi e altre sintassi per aggirare la necessità di incrementare un indice:

print range(10,1,-2) # prints [10,8.6.4.2]
[x*x for x in range(1,10)] # returns [1,4,9,16 ... ]

Quindi, sulla base di questa rudimentale esplorazione di esattamente due alternative, i progettisti del linguaggio possono evitare ++ e - anticipando i casi d'uso e fornendo una sintassi alternativa.

Fortran e Python sono in particolare meno una calamita dei bug rispetto ai linguaggi procedurali che hanno ++ e -? Non ho prove.

Sostengo che Fortran e Python sono simili a C perché non ho mai incontrato qualcuno che parla fluentemente in C che non è riuscito con una precisione del 90% a indovinare correttamente l'intento di Fortran o Python non offuscato.


1
Sì, IFortran è degli anni '50, mentre C è degli anni '70, quindi forse no perché Fortran è C-like. L'esempio di Python che manca di qualcosa come l'operatore plusplus è interessante. L'iterazione su strutture di dati è gestita più chiaramente in Python, essendo Python JavaScript "diverso" orientato agli oggetti. Forse il consiglio di Crockford è di usare più sintassi simile a OO per l'iterazione.
artlung
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.