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

c# - debugging contacts deletion

[es] :: .NET :: c# - debugging contacts deletion

Strane: 1 2

[ Pregleda: 5932 | Odgovora: 33 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion01.12.2013. u 23:32 - pre 126 meseci
Jel si brojao linije koda, ova aplikacija treba da radi unos novog clana, izmenu postojeceg, brisanje i pretragu postojecih clanova. Ovo sve se radi sa XML fajlom, jel si citao o OOP, to bi ti smanjilo broj linija koda i ostavilo mogucnost za dalje prosirenje programa. Napravio bih klasu User koja bi imala sva potrebna polja Name, LastName, DOB ... i metode za Novog korisnika, izmenu, brisanje i pretragu, svu interakciju bi radio sa tom klasom a ovo sa GUI elementima to je drugorazredno. Kazem ti citaj o OOP neces zazaliti.
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

tuolarips
Novi Sad

Član broj: 319492
Poruke: 74



+64 Profil

icon Re: c# - debugging contacts deletion01.12.2013. u 23:44 - pre 126 meseci
@AMD guy
Ne moras mi davati tu verziju ako ste problem resili.. Slucajno sam krenula da citam vasu temu, ucinilo mi se da ste otisli u pogresnom pravcu, pa sam htela da pomognem :)

@Cal Lightman
Po stilu pisanja koda se vidi da nisi dugo u ovoj prici. Evo ja cu napisati par stvari koje su mi upale u oko, cisto da znas za ubuduce :)

1. Ovo je AMD guy vec rekao, a evo i ja cu opet, jer malo bode oci. Pogledaj ovo parce koda:

Code:

Person person = new Person();
try { person = FindPerson(listView1.SelectedItems[0].Text); }


Ovim "Person person = new Person();" si napravio novi objekat i smestio ga u promenljivu person, a odmah nakon toga si u promenljvu person stavio rezultat izvrsavanja metoda FindPerson. Sto znaci da je jedan objekat uzaludno napravljen i odmah po nastanku je dat garbage collectoru na ciscenje. Posto s druge strane vidim da promenljivu person ne koristis van tela "try" naredbe, ja bih ovo parce koda napisala ovako:

Code:

try {Person person = FindPerson(listView1.SelectedItems[0].Text); }


2. Nikako mi se ne svidja usmeravanje toka izvrsavanja programa uz pomoc try catch naredbe.

Code:

try { person = FindPerson(listView1.SelectedItems[0].Text); }
catch { return; }


try/catch treba da se koristi iskljucivo za handle-ovanje situacija koje su stvarno izuzeci, a ne i za kontrolu toka izvrsavanja programa. To je uvek losa praksa. Ja bih FindPerson napravila tako da vraca null u slucaju da osoba nije pronadjena, tako da bi kod posle moje izmene izgledao ovako:

Code:

Person person = FindPerson(listView1.SelectedItems[0].Text);
if (person == null) { return; }


3. Uslov iz donjeg ifa nikad nece biti false. Nema potrebe za njim :)

Code:

if (listView1.SelectedItems.Count > 0)
            {
                try
                {
                    if (listView1.SelectedItems.Count == 0) return;
                    . . . 


4. Ovaj deo koda mozda ima pricu koju ne shvatam, ali trenutno mi deluje bespotrebno raditi to u svakoj iteraciji petlje:

Code:

listView1.Items[listView1.Items.Count - 1].Selected = true;


... dovoljno bi bilo uraditi jednom na kraju

5. Ovde je suvisno proveravati x.Name != null (pored toga postoji ista greska kao i u tacki 1).

Code:

Person person = new Person();
person = people[people.FindIndex(0, x => x.Name == listView1.SelectedItems[0].Text && x.Name != null)];


Takodje, malo je nebezbedno tek tako proslediti vrednost koju si dobio pozivanjem "FindIndex" metoda. Moze se desiti da FindIndex vrati -1, zbog toga sto iz nekog razloga nije nasao coveka sa tim imenom. Postoji elegantnije resenje, koriscenjem "Find"-a (kod sam na slepo kucala, i nisam proverila, ali trebalo bi da je tako):

PS za stringove se savetuje koriscenje Equals metode umesto ==

Code:

Person person = people.Find(x => x.Name.Equals(listView1.SelectedItems[0].Text));


6. Cini mi se da podatke u svoj xml cuvas samo pri zatvaranju forme.. Na taj nacin ne bi mogla da funkcionise nijedna ozbiljnija aplikacija. Praksa je ili da postoji neki "Save" button (gde prepustas odgovornost korisniku) ili da automatski pri svakoj izmeni cuvas podatke. Na taj nacin se osiguravas da nepredvidjenim prekidom rada aplikacije nece sav dotadasnji rad u njoj pasti u vodu..

Eto to su mojih par saveta :) Samo nemoj da pomislis da je to sto si uradio lose, daleko od toga.. Ovo su samo stvari koje sam ja naucila programirajuci i citajuci kojekakve tekstove.. Ja se nadam da ce ti ovo biti od koristi u daljem radu :)
"Time is a drug. Too much of it kills you." Terry Pratchett
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion02.12.2013. u 00:01 - pre 126 meseci
Citat:
PS za stringove se savetuje koriscenje Equals metode umesto ==


jel po ovom savetu?
http://blogs.msdn.com/b/csharp...-when-should-i-use-equals.aspx
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon Re: c# - debugging contacts deletion02.12.2013. u 00:07 - pre 126 meseci
@AMD guy:

Nisam, skinuo sam neke knjige i počeo sa čitanjem prve pod nazivom "Microsoft C# Programming for Absolute Beginners" od autora Andy Harris-a. Knjiga ima preko 500 strana, ja sam otprilike prešao petinu, znači bukvalno sam počeo od HelloWorld programa i rađenja Console aplikacija. Definitivno je ovo trebalo da uradim pre upuštanja u posao. Elem, polako shvatam koncept ovog jezika i naravno i sam uviđam neke greške, tipa, negde sam mogao da upotrebljavam switch metodu umesto silnih "else if-ova" itd. Planiram da završim knjigu pa da onda lepo uredim program tj. da malo sredim kod. Btw, kod ima približno 1000 linija.

@tuolarips:

Hvala na ispravkama, imaću ih u vidu. Daleko od toga da zameram, svaka je dobrodošla! Ipak, potrudiću se da prvo shvatim o čemu se ispravke sastoje (da razumem problem i rešenje istog) pre nego što ih i unesem u kod.

@EDIT:

Aplikacija poseduje mogućnost biranja između više (jednostavnih) tema, a to se u suštini ogleda u menjaju izgleda button-a, form icons-a i picturebox-eva. To sam odradio tako što sam u Resources ubacio ogroman broj slika i to drastično uvećeva veličinu konačne verzije. Planiram to da promenim tako da se to obavlja po principu button1.BackColor = Color.FromArbg(r, b, g) i da tako aplikaciju značajno smanjim. Međutim, imam izvesne probleme:

Dakle, umesto ovoga:

Code (csharp):

 if (Properties.Settings.Default.Theme == "Purple")
            {
                foreach (var form in Application.OpenForms.Cast<Form>())
                {
                    form.Icon = Properties.Resources.Purple;
                }
                Main f1 = (Main)Application.OpenForms["Main"];
                Settings f2 = (Settings)Application.OpenForms["Settings"];
                f1.btn_Exit.Image = Properties.Resources.EXIT_purple;
            }
 

... pokušavam da napravim ovo:

Code (csharp):

if (Properties.Settings.Default.Theme == "Purple")
            {
                foreach (var form in Application.OpenForms.Cast<Form>())
                {
                    form.Icon = Properties.Resources.Purple;
                }

                Main f1 = (Main)Application.OpenForms["Main"];
                Settings f2 = (Settings)Application.OpenForms["Settings"];

                f2.Show();

                f1.button1.BackColor = Color.FromArgb(164, 57, 226);
                f2.button1.BackColor = Color.FromArgb(164, 57, 226);

                f2.pictureBox1.BackColor = Color.FromArgb(164, 57, 226);
            }
 


... ali bez željenih rezultata, buttons i picturebox se jednostavno ne menjaju. Verovatno nešto radim pogrešno, a i sam ću uvideti šta kada u knjizi stignem do dela o klasama. To mi pravi velike probleme, što ne znam kako da nešto što se nalazi na jednoj formi call-ujem iz druge forme - i otuda silno gomilanje koda - što AMD kaže - natrpavanje kutija.

[Ovu poruku je menjao Cal Lightman dana 02.12.2013. u 01:18 GMT+1]
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion02.12.2013. u 00:17 - pre 126 meseci
Nisi mogao da nadjes neku noviju knjigu, ta je iz 2002 uzmi barem iz 2008 ili 2010 godine.
C# je izasao 2001 pa ne bih bas uzimao knjigu iz 2002.

Sa kutijama sam hteo da objasnim koncept kreiranja objekata i njihovog cuvanja na stacku u memoriji. Ali to moze da bude malo naprednjiji koncept.
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon Re: c# - debugging contacts deletion02.12.2013. u 00:34 - pre 126 meseci
Haha, da, baš je old school.

Nego, sve što tamo piše mi je do sad "važilo" u VS 2013, je l' se nešto menjalo u međuvremenu? Mislim, ako jeste, da ne učim istoriju... Kad kažeš noviju, je l' postoji od istog autora novije verzije iste knjige ili si mislio da ujedno potražim i drugog autora?

Inače sviđa mi se kako je napisana knjiga i nekako sam krenuo po njoj i sve mi odgovara, baš će biti trulo ako se nešto menjalo.
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: c# - debugging contacts deletion02.12.2013. u 07:43 - pre 126 meseci
Citat:
PS za stringove se savetuje koriscenje Equals metode umesto ==
Ko li to savetuje?
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion02.12.2013. u 07:49 - pre 126 meseci
Head First C#
Microsoft Visual C# 2012 Step by Step
Illustrated C# 2012


Ove knjige preporucujem, procitao sam.
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

tuolarips
Novi Sad

Član broj: 319492
Poruke: 74



+64 Profil

icon Re: c# - debugging contacts deletion02.12.2013. u 08:22 - pre 126 meseci
@AMD guy, ravni

Equals i == rade isti posao, te taj savet nije suvise bitan (koliko jeste za ostale referentne tipove). Medjutim, negde je presudno koristiti Equals zajedno s StringComparison parametrom. Naime, u mom timu se desio bug kog su jedva skontali (jer se nije reprodukovao na svim racunarima), a odnosio se na to sto kad se u windowsu postavi jezik na srpski, zarezi pri pisanju brojeva su se tretirali kao tacke a tacke kao zarezi. Da smo koristili Equals zajedno sa StringComparison parametrom, to se ne bi desilo.
Pretpostavila sam da ce neko nesto iskomentarisati za taj moj komentar (kao sto sam i ja iskomentarisala kad su meni prvi put rekli da koristim equals bez jakih argumenata) :D :)
"Time is a drug. Too much of it kills you." Terry Pratchett
 
Odgovor na temu

tuolarips
Novi Sad

Član broj: 319492
Poruke: 74



+64 Profil

icon Re: c# - debugging contacts deletion02.12.2013. u 08:24 - pre 126 meseci
Sto se knjiga tice, za kraj (posle svih koje je AMD guy naveo) bih predlozila Effective C# (Second edition) od Bill Wagner-a. :)
"Time is a drug. Too much of it kills you." Terry Pratchett
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: c# - debugging contacts deletion02.12.2013. u 13:00 - pre 126 meseci
Citat:
...negde je presudno koristiti Equals zajedno s StringComparison parametrom...
Sasvim u redu.
Citat:
...koliko jeste za ostale referentne tipove...
A sta se desava sa ostalim referentnim tipovima. Zar je == stvarno toliki promasaj?
 
Odgovor na temu

tuolarips
Novi Sad

Član broj: 319492
Poruke: 74



+64 Profil

icon Re: c# - debugging contacts deletion02.12.2013. u 13:17 - pre 126 meseci
Zavisi sta ocekujes da ti rezultat bude. Equals i == imaju skroz drugaciju svrhu. == poredi objekte po referenci. Recimo da imas ovaj slucaj

Code:

Person person1 = new Person("Jovan", "Jovanovic");
Person person2 = person1;
Person person3 = new Person("Jovan", "Jovanovic");


Kada uradis person1 == person2, dobices true. Medjutim kad uradis person == person3, dobices false, iako je sadrzaj ta dva objekta isti (iste stvari smo prosledili konstruktoru). Dvostruko jednako se nikad ne treba override-ovati, iako to c# dozvoljava. I treba se koristiti iskljucivo kada je potrebno poredjenje po referenci.

S druge strane Equals je pozeljno override-ovati. Po default-u Equals takodje poredi po referenci, ali bilo koje ozbiljnije third party biblioteke ce u svojim klasama override-ovati equals. Ako pretpostavimo da je u klasi Person Equals adekvatno override-ovan, ona cemo i za slucaj person1.Equals(person2) kao i za slucaj person1.Equals(person3) dobiti true.

Zakljucak: == se koristi za poredjenje referenci, dok se Equals koristi za poredjenje sadrzaja objekta. Vise mozes procitati u knjizi koju sam navela iznad (Item 6: Understand the Relationships Among the Many Different Concepts of Equality)

Sad smo malo odlutali od teme, ali dobro.

[Ovu poruku je menjao tuolarips dana 02.12.2013. u 14:44 GMT+1]
"Time is a drug. Too much of it kills you." Terry Pratchett
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: c# - debugging contacts deletion03.12.2013. u 07:32 - pre 126 meseci
Citat:
za stringove se savetuje koriscenje Equals metode umesto ==... taj savet nije suvise bitan (koliko jeste za ostale referentne tipove)... Zakljucak: == se koristi za poredjenje referenci, dok se Equals koristi za poredjenje sadrzaja objekta
Onda, zapravo onaj savet i nije neki savet?
 
Odgovor na temu

tuolarips
Novi Sad

Član broj: 319492
Poruke: 74



+64 Profil

icon Re: c# - debugging contacts deletion03.12.2013. u 14:13 - pre 126 meseci
Zar nije to upravo ono sto sam ja rekla u delu kog si citirao?

Citat:
tuolarips taj savet nije suvise bitan


Nije lose koristiti Equals kako bi uvek razmotrio da li i sta staviti za StringComparison, ali nije presudno...
"Time is a drug. Too much of it kills you." Terry Pratchett
 
Odgovor na temu

[es] :: .NET :: c# - debugging contacts deletion

Strane: 1 2

[ Pregleda: 5932 | Odgovora: 33 ] > FB > Twit

Postavi temu Odgovori

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