:sneer:
Printable View
:sneer:
è una questione di prestazioni e consumi; es: se aggiungo una birra in piu nel mio carrello della spesa eseguo un birra++, questo perchè ho altre cose da fare nell'arco della giornata ed inoltre ho il terrore della fila alla cassa, dall'altra parte la cassiera eseguirà un birra = birra +1 in quanto devo essere sicura dello scarico a magazzino, quest'ultima preferisce la sicurezza alle prestazioni.
Resta il fatto che la scelta è solo una questione di prestazioni, ogni singolo source deve contenere una buone dose di commenti(//), i quali lo rendono leggibile.
Si, ma attenzione, la domanda parlava di istruzione "più comunemente usata", non più performante, il che mi avrebbe portato a segnare la risposta "C) Fatti uno studio statistico se vuoi saperlo, io sono un ingegnere, non ti rispondo a caso" :nod:
Dilbert owna :bow:
mi sfugge come sia più performante, è solo una questione di forma - ordine del codice.
infatti, in linguaggio macchina è la stessa identica istruzione:rain:
Tecnicamente, la differenza è la stessa tra queste due righe
++val corrisponde a val = val + 1;
val++ corrisponde a tmp = val; val = val + 1; return tmp;
Il POST-incremento, e bada bene solo quello, crea una variabile di copia perchè deve ritornare il vecchio valore della variabile, che non è più disponibile dopo l'incremento. Il postincremento quindi fa un'operazione di copia che, se non è esplicitamente richiesta, non è da utilizzare, da qui la risposta val = val+1.
Detto questo però, molti compilatori moderni, come ad esempio il gcc, possono capire dal contesto quando sia effettivamente necessario un postdecremento ed eventualmente sostituire il codice. Ecco ad esempio l'assembler delle due operazioni di pre e post incremento su MinGW-GCC 3.4.4:
x=++y;
x=y++;Code:0x004012e6 <pre+6>: lea 0xc(%ebp),%eax
0x004012e9 <pre+9>: incl (%eax)
0x004012eb <pre+11>: mov 0xc(%ebp),%eax
0x004012ee <pre+14>: mov %eax,0x8(%ebp)
Questo chiaramente solo per i tipi base.Code:0x00401316 <post+6>: mov 0xc(%ebp),%edx
0x00401319 <post+9>: lea 0xc(%ebp),%eax
0x0040131c <post+12>: incl (%eax)
0x0040131e <post+14>: mov %edx,0x8(%ebp)
:banana:
EDIT: Al mio esame di Fondamenti di Informatica si veniva bocciati dicendo che le due cose sono identiche
Beh ma la seconda è usata ovunque, quello che voglio dire io è che se ci sono 5 milioni di programmatori che usano la prima perchè sono comodi così e 1 milione di programmatori che usano la seconda perchè sono comodi così, indipendentemente da quali linguaggi usano e indipendentemente da quale sia più performante, la risposta alla domanda "Quale espressione per l'incremento e' comunemente utilizzato dai programmatori e Web developers?" è ovviamente la prima, ma deriva da uno studio statistico che la persona che deve rispondere alla domanda dubito che abbia a disposizione (e credo che non lo abbia nemmeno quello che ha fatto la domanda).
Ok sono pignolo e stracciacazzi, però a me ste domande così stupide fanno infervorare :nod: in che modo una domanda del genere può darti informazioni sulle capacità dell'esaminato?
No, questo conferma che ho letto ora il tuo reply perchè, dato che ovviamente sto lavorando e c'ho messo un po' a scrivere il mio, poi quando l'ho postato è apparso dopo il tuo, nonostante io non l'avessi letto :nod:
Aggiungo anche che questo conferma che tu non hai letto il mio reply, perchè non sto parlando affatto di performance ma del significato della domanda fatta. :)
al mio esame di fondamenti di informatica studi i fondamenti dell'informatica non i compilatori :sneer:
capito, hai ragione, la "colpa" è di come ci insegnano a programmare, se mi azzardo a fare un system.out.println(x++) per risparmiare una riga di codice mi tirano la testa contro il muro, il ++ lo ho sempre usato in sostituzione dell'assegnamento e bona sinceramente avevo trascurato la differenza tra pre e post (e meno male che lo avevo scritto sopra pure :sneer: ).
tanek, nel momento in cui consideri il post incremento come un caso particolare dell'incremento allora vai a dire che l'incremento classico è il più comune. Di fatto però il ++ viene di solito usato come semplice abbreviazione di caratteri e qui è statistica.
ribadisco come fondamenti di informatica io studi tutt'altra roba è_é
ma si fa in fondamenti A la differenza tra ++val e val++ -.-°