Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Gde je greska ....

[es] :: .NET :: Gde je greska ....

[ Pregleda: 3966 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dusty
Predrag Glumac
Zemun, Srbija

Član broj: 15383
Poruke: 549
213.137.127.*

Sajt: www.mika.rs


+6 Profil

icon Gde je greska ....01.06.2005. u 20:52 - pre 229 meseci
Code:
if(data.Create() != DataProvider.ERRORS.OK &&
    data.Populate() != DataProvider.ERRORS.OK)
{
    Debug.WriteLine("Shit hits the fan");
    MessageBox.Show("Poruka:\n" + data.GetLastErrorMessage, "Greska !", MessageBoxButtons.OK,
    MessageBoxIcon.Error);
    //TODO: exit ????
}


U metodi Populate() se nalazi Debug.WriteLine("Bummer"); na pocetku metode. Kada izvrsim ovo, ni jedan Debug.Writeline() se ne pozove, a takodje ni breakpoint unutar if-a i metode Populate().

Da li sam ja prosto lud ili bih trebao da odem na jedan duzi godisnji odmor ?
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
 
Odgovor na temu

Java Beograd
Novi Beograd

Član broj: 11890
Poruke: 9446
82.117.206.*



+10242 Profil

icon Re: Gde je greska ....02.06.2005. u 08:44 - pre 229 meseci
Logično. Ukoliko je prvi deo:

(data.Create() != DataProvider.ERRORS.OK ) =false

runtime mašina nema potrebe da izvršava drugi deo if upita, jer je u ptianju AND funkcija koja daje false ako je bilo koji operand false. Dakle, sasvim je u redu da ne udje u funkciju data.Populate().

Mali savet ( ... poslušaj zato savet, što će ti čiča dati ...). Izbegavaj ovakve Ce-olike ifove. Može to mnogo, mnogo preglednije i lepše da se iskodira. Zapamti, 80% vremena ida na održavanje (izmene i dorade softvera) a samo 20% na izradu.

Uzgred, ovaj moj zaključak je sasvim proizvoljan, nikad nemoj da kalkulišeš kako radi kompajler ili run-time mašina, i na osnovu tih zaključaka da pišeš kod. Možda se sutra pojavi neki runime koji će if uslov da ispituje (da izvineš na izrazu) od pozadi.
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Gde je greska ....02.06.2005. u 08:56 - pre 229 meseci
Drugim rečima, nemoj stavljati više od jedne akcije u if uslov. Štaviše, i jedna je previše. Sve se to u krajnjoj liniji prevodi prvo kao poziv funkcije i smeštanje rezultata u promenljivu (registar, svejedno), pa tek onda ide provera njenog sadržaja.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Gde je greska ....02.06.2005. u 13:10 - pre 229 meseci
Malo ste otisli u C++ vode i nepredvidive algoritme za optimizaciju bool-a, tako nesto ne postoji u .NETu, algoritmi su unapred poznati. Problem ovde je u operatoru &&. Ovo je conditional logical operator koji se ponasa kao sto ste opisali, proveri prvi, pa drugi samo ako je prvi true.

Ubaci operator & (unconditional operator) umesto && i oba operanda ce se izvrsiti bez obzira na njihove pojedinacne rezultate. Ovo je po standardu (u VB.NETu adekvatni operatori su AND i ANDALSO, tj OR i ORELSE) te ce shodno tome raditi na svakoj CLS implementaciji.



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ć
 
Odgovor na temu

dusty
Predrag Glumac
Zemun, Srbija

Član broj: 15383
Poruke: 549
213.137.127.*

Sajt: www.mika.rs


+6 Profil

icon Re: Gde je greska ....02.06.2005. u 22:24 - pre 229 meseci
Sada mi je mnogo jasnije (i lakse . I was blind, but now I see.

Do sada sam izbegavao da pozivam vise metoda iz if-a, vise zbog citljivosti jer obicno metode imaju gomilu argumenata .... koji su obicno rezultati drugih metoda ili property-a

Citat:
Ubaci operator &


Odlicno ! To mi nije palo na pamet.


Pozdrav i hvala ljudi
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
 
Odgovor na temu

Java Beograd
Novi Beograd

Član broj: 11890
Poruke: 9446
82.117.206.*



+10242 Profil

icon Re: Gde je greska ....03.06.2005. u 08:39 - pre 229 meseci
Citat:
dusty: Pozdrav i hvala ljudi :)

Pozdrav i tebi, ostaj nam zdravo, i uvek kodraj lepo, i pametno. Poslušaćeš dobar savet mmix-a, naravno, ali se trudi da izgradiš stil kodiranja, pa kad sutra moraš da odradiš bilo šta u Javi, C-u, Pyton-u ili Rubi-ju sve prođe glatko i bez problema.
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Gde je greska ....03.06.2005. u 14:53 - pre 229 meseci
Prijatelje, nema potrebe za cinizmom.
Stil kodiranja, da bi uopste vredeo nesto, mora biti direktno vezan za jezik. Samo zato sto je C# slican Javi ne cini ga Javom, shodno tome stil programiranja koji je najbolji za Javu nije najbolje resenje za C#. I ne slazem se da je bolje razvijati dogmatski uniformisani still programiranja nego nauciti specificnosti jezika u kojem radis.

U .NETu se zna unapred da ce boolean izraz biti racunat sa leva na desno, i da nece biti "short circuited" osim ako se eksplicitno to ne zahteva. Samim tim, taj Java i C++ stil programiranja, koji sluzi da se sprece bagovi koje je dusty nehotice iskusio ne znajuci razliku izmedju & i &&, ne vazi za .NET jezike.
U njegovom slucaju, njegov originalni kod je bio sasvim OK, pretpostavljam da nema potrebe da poziva Populate ako je Create vratio gresku (ne zelim da spekulisem zasto insistira na tome, ali to je njegovo pravo). Cak i sa & redosled ce uvek biti Create,Populate, sve se zna unapred i nema potrebe da se if/then/else struktura duplicira, nestuje i sta sve ne radi sa njom da bi se ostvario zeljeni redosled dogadjaja.

Da se razumemo i dalje smatram losim, u najbolju ruku neukusnim, praviti "kobasice" od if statementa, ali nisam sklon ni "simuliranju" bool aritmetike preko programskih struktura kad za to nema potrebe...


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ć
 
Odgovor na temu

Java Beograd
Novi Beograd

Član broj: 11890
Poruke: 9446
82.117.206.*



+10242 Profil

icon Re: Gde je greska ....03.06.2005. u 15:00 - pre 229 meseci
Zašto misliš da sam ciničan ? Najiskrenije, ni trunke cinizma nema. Tvoj savet je bio sasvim ok, i valja ga poslušati, a posebno u konkretnom slučaju.
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Gde je greska ....03.06.2005. u 15:27 - pre 229 meseci
Citat:
mmix: Stil kodiranja, da bi uopste vredeo nesto, mora biti direktno vezan za jezik.

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, ali smatram da treba insistirati na jasnoći i nedvosmislenosti programa kadgod je to moguće (u to ubrajam i razumljivost programa poznavaocima drugih sličnih jezika). Niti smo se mi rodili sa znanjem C#, niti ćemo ceo život u njemu raditi. Takođe, velika je verovatnoća da će naše programe dalje razvijati drugi programeri, možda baš sveže migrirani sa nekog drugog C-olikog 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 &&.
 
Odgovor na temu

dusty
Predrag Glumac
Zemun, Srbija

Član broj: 15383
Poruke: 549
213.137.127.*

Sajt: www.mika.rs


+6 Profil

icon Re: Gde je greska ....03.06.2005. u 21:59 - pre 229 meseci
Hmmm, cekaj malo. Kako sam ja shvatio & je obicno logicko I, tako da if zapravo vrsi samo jednu proveru, uprosteno:
Code:

bool b1 = (data.Create() != ERRORS.OK);
bool b2 = (data.Populate() != ERRORS.OK);
bool b3 = b1 & b2;    // obicno logicko I :)
if(b3 == true){ ....}


E, sada, da li je bolje kada bih pisao ovakav kod, ili sve sabijeno u jedan if ? Po meni ovo gore je konfuzn(ije) Treba koristiti svaku prednost koju jezik pruza...

Citat:
Zašto misliš da sam ciničan ? Najiskrenije, ni trunke cinizma nema.


Ma, samo je neobicno videti


It was hard to write the code, it should be hard to read !

America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Gde je greska ....04.06.2005. u 17:59 - pre 229 meseci
Pazi, dusty,

Sve zavisi od toga šta hoćeš da uradiš. Ako hoćeš da ti se populate izvrši samo pod uslovom da je create prošlo kako treba, onda ne može ovako kao što si ti naveo.

Ja bih lično uradio ovako:
Code:

bool allOk = false;
if (create() == errors.ok)
{
  // create succeeded
  if (populate() == errors.ok)
  {
    allOk = true;
  }
}

if (!allOk)
{
  ...
}

BTW, čini mi se da nisi najbolje razumeo razliku između & i &&.
 
Odgovor na temu

dusty
Predrag Glumac
Zemun, Srbija

Član broj: 15383
Poruke: 549
213.137.127.*

Sajt: www.mika.rs


+6 Profil

icon Re: Gde je greska ....04.06.2005. u 22:08 - pre 229 meseci
Citat:
Sve zavisi od toga šta hoćeš da uradiš. Ako hoćeš da ti se populate izvrši samo pod uslovom da je create prošlo kako treba, onda ne može ovako kao što si ti naveo.


Nisi me razumeo, govorio sam kako funcionise & Inace ovo sto si naveo gore se postize sa && sto je bio moj problem od samog pocetka.

Citat:
BTW, čini mi se da nisi najbolje razumeo razliku između & i &&.


Naprotiv Bash sam sada pogledao u C# secification i kazu istu stvar za &&.

BTW najezim se kada vidim ovako ugnjezdene if-ove jedan ispod drugog. Meni je preglednije da vidim jedno &&.
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Gde je greska ....06.06.2005. u 13:36 - pre 229 meseci
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ć
Prikačeni fajlovi
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Gde je greska ....06.06.2005. u 14:15 - pre 229 meseci
Citat:
Ja se apsolutno slazem da je potrebna jasnoca koda, ali zrtvovati funkcionalnost samo zato sto neki buduci programer nece znati razliku izmedju & i &&,

Svakom od nas bi najviše odgovaralo da programe nasleđuje isključivo od boljih programera ali u stvarnosti je nažalost priča obično drugačija.

Moja poenta je bila samo ta da gomilanje akcija u if uslovu em umanjuje čitljivost programa, em predstavlja potencijalne zamke kad se ukombinuje sa operatorima koji možda rade, a možda i ne rade kompletnu evaluaciju izraza.

I dalje tvrdim da je razlika između & i && suptilna upravo iz sledećeg razloga: u jako malom broju slučajeva bi se program ponašao drugačije kad bismo jedan operator zamenili drugim, tj. procentualno je jako mali broj mesta gde je zaista bitno da li smo stavili jedan ili drugi operator. Tvoj primer sa 2.5 miliona simulacija ili dustyjev sa dve funkcije u if uslovu su prilično ekstremni primeri (naravno, upravo takvi primeri prave razliku između "vrha i dna", kako si ti to lepo primetio).
Citat:
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.

Ovo ne razumem baš najbolje.
 
Odgovor na temu

dusty
Predrag Glumac
Zemun, Srbija

Član broj: 15383
Poruke: 549
213.137.127.*

Sajt: www.mika.rs


+6 Profil

icon Re: Gde je greska ....06.06.2005. u 19:32 - pre 228 meseci
Citat:
& je operacija, rezultat te operacije se "proverava", isto vazi i za &&.


Tja, pokusavam to i da kazem ali mi, izgleda, neshto ne ide od ruke
Pogledao sam posle disasesembly i && ima jedan jump equal posle izvrsenja prve metode, dok se kod & proverava tek posle izvrsavanja obe metode, kao rezultat AND-a obe metode.

Citat:
Tvoj primer sa 2.5 miliona simulacija ili dustyjev sa dve funkcije u if uslovu su prilično ekstremni primeri.


Znaci, ako ne treba da optimizujes kod, onda treba da pises kod koji ne koristi specificnosti jezika ?! A, bulova algebra i nije specificnost. Ako coveku koji treba da odrzava kod posle mene treba da razvodnim if, onda ne treba da gleda kod dalje
Zbog sebe cu se truditi da odrzavam kod razumljivim, jer cu ga, mozda, gledati ponovo posle 6 meseci, ali to 'univerzalno - da ceo svet razume' programiranje, po meni, je lose programiranje ... it leads to the dark side
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Gde je greska ....07.06.2005. u 08:04 - pre 228 meseci
Citat:
dusty: 'univerzalno - da ceo svet razume' programiranje, po meni, je lose programiranje ...

Obrazloži.
 
Odgovor na temu

dusty
Predrag Glumac
Zemun, Srbija

Član broj: 15383
Poruke: 549
213.137.127.*

Sajt: www.mika.rs


+6 Profil

icon Re: Gde je greska ....15.06.2005. u 19:23 - pre 228 meseci
Iz principa (;
Ako se smatras programerom u C#, onda treba da znas C#, jel ?! Onda treba koristiti sve prednosti koje kompajler i .Net framework daju.
Ne mogu ni da zamislim sta moze da ne zna covek posle mene. Cemu onda uproscavanje ?!
Razvodnjavanjem koda desava se da kompajer napravi duzi kod, pogotovo kada je branch-ovanje.
Naravno, treba imati stil pisanja koda koji je lako razumljiv da ljudi iza tebe mogu da se snadju, ali to nema veze sa tim da treba da im razlazem.
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
 
Odgovor na temu

Čarli
BG

Član broj: 38963
Poruke: 6
*.wireless.org.yu.



Profil

icon Re: Gde je greska ....20.06.2005. u 07:54 - pre 228 meseci
Treba koristiti strukturu kondicionalnog AND-a ( && ) zbog :

- svih ušteda prethodno navedenih ;
- zbog ispitivanja izraza 2, ako, i samo ako, je izraz 1 ostvaren --- što bi ispitivali izraz 2, ukoliko izraz 1 nije zadovoljen, tj. ukoliko ne evaluira ka 'true' ? ;
- jednostavnosti samog operatora --- funkcionalnost mu je u 'Help-u' objašnjena jednom rečenicom ;
- za preglednost i jasnoću koda postoje komentari koji bi trebali biti upotrebljeni uz svaki iole sofisticiraniji metod, tako da će stvar biti jasnija kako drugima, tako i samom sebi pri naknadnom pregledanju koda ;
- 'kobasice' a & b i a && b se baš nešto mnogo ne razlikuju u vizuelnom smislu, ali u funkcionalnom da.
 
Odgovor na temu

[es] :: .NET :: Gde je greska ....

[ Pregleda: 3966 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.