NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Generování bludiště grafem v C# .NET

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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 :)

Editováno 18.12.2014 21:01
 
Odpovědět
18.12.2014 21:00
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá 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.

Editováno 18.12.2014 21:21
 
Odpovědět
18.12.2014 21:18
Avatar
hanpari
Člen
Avatar
Odpovídá 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í.

 
Odpovědět
18.12.2014 21:42
Avatar
martinsakra
Tvůrce
Avatar
Odpovídá 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

Odpovědět
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
Odpovídá 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 :)

 
Odpovědět
21.12.2014 7:55
Avatar
martinsakra
Tvůrce
Avatar
Odpovídá 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

Odpovědět
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.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.