Citat:
dusty: Hmmm, cekaj malo. Kako sam ja shvatio & je obicno logicko I, tako da if zapravo vrsi samo jednu proveru, uprosteno:
Napravi razliku izmedju operacije i provere. & je operacija, rezultat te operacije se "proverava", isto vazi i za &&. Jedina razlika je sto && radi po "short-circuit" rezimu tj. da uprostim po tvom algoritmu:
Code:
bool b1 = (data.Create() != ERRORS.OK);
if (b1 == true) {
bool b2 = (data.Populate() != ERRORS.OK);
if (b2 == true) { ....}
}
"isto" sto i:
if (data.Create() != ERRORS.OK && data.Populate() != ERRORS.OK) { ....}
U cemu je najveca razlika? U tome sto data.Populate nece uopste biti pozvan ako je b1 false. U slucaju da Populate zahteva da se Create izvrsio kako treba, ili (najcesce u praksi) ako je Populate funkcija koja oduzima puno vremena/resursa, sa && se optimizuje i skracuje vreme "provere" if izraza.
Razliku u performansama izmedju & i && mozes da dobijes samo ako je drugi operand funkcija ili property. U & i && nad dve bool varijable ili konstante nema neke razlike.
Citat:
jablan: Evo ja se ne slažem. (UBR: Ja lično kodiram već duže u C# a nisam znao za & operator.) Ne kažem da ne treba znati i koristiti specifičnosti jezika,
...
U tom smislu, bolje napisati koju liniju koda više (naravno, pod pretpostavkom da performanse nisu ugrožene), nego razmišljati da li će neko ko sutra bude radio na tom kodu znati suptilnu razliku između & i &&.
Hmm, kako covek da odgovori na ovo

. Mislim da vec svi znaju da sam ja elitista, i da mislim da programiranje nije za svakog. To sto ti tvrdis moze lepo da se prevede u "ja imam auto servis i opravio sam stotine stojadina, naravno da mogu da popravim Audi A8"

. Ja se apsolutno slazem da je potrebna jasnoca koda, ali zrtvovati funkcionalnost samo zato sto neki buduci programer nece znati razliku izmedju & i &&, hmmm, ja kazem nek otvori knjigu i zagreje stolicu i nauci sta je & a sta && (ili nek pita u ovom forumu

). Neznanje nije opravdanje.
Da se vratimo na & i &&, razlika uopste nije suptilna. && uvek daje bolje performanse (manje ili vise) kad su operanti nepoznati u trenutku prevodjenja. Zakaceno na ovu poruku su klasa i IL prikaz dve funkcije koje koriste & i &&. && ima dve linije koda manje u ILu i zauzima jedan slot manje na steku (ovo bez uzimanja u obzir koliko dugo se P2 izvrsava). Dalje, JIT kompajler lakse optimizuje dobro projektivane if statemente nego nestovanu strukturu koja radi isti posao, cak najbolje radi sa "kobasicama"

, prosto i jednostavno zato sto mu je scope za optimizaciju limitiran na sam if statement.
Zadrzavajuci se samo na & i &&, u ovom primeru (diss.txt) && verzija je cak 6 instrukcija kraca. Verzija koja simulira && preko if je sporija zato sto JIT kompajler nije optimizavao pozive accessora (u && ih zove direktno, u "if" verziji preko vTable, sto je i meni cudno posto je C# kompajler napravio identican IL kod za oba).
Rekord koji sam ja postigao je 20% ubrzanja u aplikaciji koja radi 2,5 miliona simulacija za reosigranje, tako sto sam zamenio mesta operandima i zamenio OR sa ORELSE.

I to u kodu koji je napisao covek koji pise lep kod ali ne zna specificnosti jezika koji koristi. Ne tvrdim ja da sam savrsen i da znam sve specificnosti svih jezika koje znam, ali pred svaki veci projekat u nekom jeziku potrudim se da saznam sta je specificno i sta mi moze pomoci da napravim brzu/kracu/lepsu aplikaciju. To po meni cini progamera dobrim. A u surovoj konsultantskoj areni preplavljenoj "programerima", svaka prednost cini razliku izmedju vrha i dna.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić