Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

Diskusia – Generovanie bludisko grafom v C # .NET

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
hanpari
Člen
Avatar
hanpari:18.12.2014 21:00

Ahoj,
nechci nikoho navádět k nepravostem :), jen by mne zajímalo, proč se tak obtěžovat například ve třídě Maze s vlastnostmi, tj. vypisovat gettery a settery, když se stejně nevyužívají?

Tento kód

private HashSet<Edge> edges = new HashSet<Edge>();
public HashSet<Edge> Edges
{
    get { return edges; }
    set { edges = value; }
}

nefunguje IMHO o nic méně bezpečněji než tento:

public HashSet<Edge> Edges = new HashSet<Edge>();

Ten druhý je ale přehlednější, kratší, rychleji napsaný a dělá totéž.

Jinak moc pěkný prográmek :)

Editované 18.12.2014 21:01
 
Odpovedať
18.12.2014 21:00
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovedá na hanpari
Jan Vargovský:18.12.2014 21:18

Snad v další verzi C#

public HashSet<Edge> Edges {get;set;} = new HashSet<Edge>();

Momentálně nejkratší verze je asi ta tvoje, ale měl bys to i tak napsat takhle

public HashSet<Edge> Edges {get;set;}

a pak vytvořit instanci. Bez vlastností bys nemohl bindovat (nic víc mě momentálně nenapadá), každopádně by tě to mohlo omezovat v budoucím vývoji a stejně bys to přepisoval.

Ale chápu, z velké většiny se tento styl používá jen díky konvencím .NETu. Btw, tu otázku si můžeš klást také u Javy, ta je ale v tomto směru daleko více ukecanější.

EDIT: http://www.itorian.com/…se-this.html tu máš pár dalších věcí proč je používat.

Editované 18.12.2014 21:21
 
Odpovedať
18.12.2014 21:18
Avatar
hanpari
Člen
Avatar
Odpovedá na Jan Vargovský
hanpari:18.12.2014 21:42

Já znám teorii, proč se dělají vlastnosti :)

chtěl jsem spíš trochu si ujasnit dvě věci.

1/ v tomhle případě prográmku ad-hoc IMHO mi přišlo, že je zbytečně rozvláčný a jen jsem chtěl znát názor ostatních a autora,
2/ dále, pokud se nepletu, mi nic nebrání vnitřní stav konkrétní vlastnosti změnit pomocí metod Hashsetu přímo, takže i kdyby nakrásně byl setter napsaný jaksepatří, ve skutečnosti tak jakoukoliv kontrolu obejdu.

Ale ten druhý bod je jen takový nezasvěcený náhled, zajímá mne názor lidé, co v Csharp dělají.

 
Odpovedať
18.12.2014 21:42
Avatar
martinsakra
Tvůrce
Avatar
Odpovedá na hanpari
martinsakra:18.12.2014 22:50

ja to Edges dokonce jednou používám :D , jinak ano v tomhle případě dost možná zbytečné, celkově u kolekci get/set nebo property nemusí být často ideal. Celkově dobrej zvyk mě naučil automaticky psát gettery/settery když dělám v jave nebo property pro C# i když hrozí že je nevyužiju, v tomhle případě kdy jsem ten algoritmus vytvářel za pochodu takže jsem napřed vytvořil maze a netušil co snim budu dělat.
Pak taky možná ty nodes/edge/maze na něco využiju a budu to mít předpřipravený

public HashSet<Edge> Edges {get;set;}

tohle se mi nelíbí rád v té tříde tu konkrétní proměnou vidim )nehledě na to že jakmile je v property potřeba cokoliv dělat/kontrolovat pak se stejně musí proměná dopsat

Odpovedať
18.12.2014 22:50
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
hanpari
Člen
Avatar
Odpovedá na martinsakra
hanpari:21.12.2014 7:55

Ahoj,

teď se probírám tvým kódem ze cvičebních důvodů. Doufám, že nevadí :)

Všiml jsem si jedné věci. Do svého bludiště Maze 2x přiřazuješ pomocí volání MazeLogic.getAc­tualMaze().

Tyhle řádky můžeš zakomentovat a celou tu metodu zrušit.

Do konstruktoru MazeLogic totiž dáváš referenci na své bludiště, takže pokud ho MazeLogic změní, změní se vnitřní stav tvého bludiště.

No, snad nevadí, že se v tom šťourám :)

 
Odpovedať
21.12.2014 7:55
Avatar
martinsakra
Tvůrce
Avatar
Odpovedá na hanpari
martinsakra:21.12.2014 17:26

Klidně se v kodu hrabej,ale zázrak programování to není.
Ano je tam reference tudíž to není potřeba, ale to víš jenom díky tomu že máš po ruce celej zdrojovej kod + víš že maze neni hodnotový typ, nebo immutable (možná ještě něco jinýho,ale kdo ví), být to jako knihovna/tys viděl jen interface, tak rozhodně používat getXXX a nespolíhat se na to uvnitř, a pak je z toho najednou zvyk

Odpovedať
21.12.2014 17:26
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!