Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:5.2.2013 11:12

Aha. Takže ty do nějakého svého vzorece potřebuješ nějaké číslo, to číslo možná vůbec číslo není, .NET ti nabízí metodu Parse, která by ti normálně vyhodila výjimku, ale ne - ty musíš volat TryParse a pak si stěžuješ, že není napsaná stejně jako Parse. No, tak to vážně nevim, co ti poradit...

A teda když mi int.Parse vrátí -1 a já očekávám jen kladná čísla, tak to znamená, že int.Parse je napsané špatně, protože může vracet "chybový stav"? Zajímavé pojetí práce s cizím kódem, vskutku.

Přestaň Matesit a hoď odkaz na smysluplný zdroj, kde by se dalo dočíst, že TryParse vrací chybový stav, nebo že předávání paramterů referencí porušuje principy OOP.

 
Odpovědět
5.2.2013 11:12
Avatar
Odpovídá na David Hartinger
Luboš Běhounek Satik:5.2.2013 11:12

Nějaký odkaz na nějaký materiál, kde je to zmiňováno?

Při volání funkce ContainsKey a až pak vybrání hodnoty z kolekce bys ji prohledával dvakrát, nějaké jiné řešení?

Nahoru Odpovědět
5.2.2013 11:12
https://www.facebook.com/peasantsandcastles/
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Luboš Běhounek Satik
David Hartinger:5.2.2013 11:17

Zamysli se nad tou větou "vracení výstupu vstupem", na takovou blbost nemusí být materiál. Jiné řešení jsem ti také uvedl. Vaříš z vody.

Nahoru Odpovědět
5.2.2013 11:17
New kid back on the block with a R.I.P
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:5.2.2013 11:19

Spěchám do práce :)
V tom kódu jsem se upsal, smotal jsem dva kódy dohromady:

int number;
 if (!Int32.TryParse(str, out number))
     return; // pokud to není číslo a nechci ho použít v nějaké části kódu a nějak na něj reagovat
int number;
if (!Int32.TryParse(str, out number))
    number = 42;
// zpracování number s defaultní hodnotou 42

Jak můžeš vidět, nikde není žádná druhá proměnná.

Nahoru Odpovědět
5.2.2013 11:19
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:5.2.2013 11:20

TryParse nepoužívám. Kde jsi tento blud vyhrabal?

Když mi int.Parse vrátí -1, tak to znamená, že jsem obdržel hodnotu -1. Chybový stav to není, je to hodnota -1. Chybou se to stane až pokud se pokusím tuto hodnotu použít třeba jako index prvku v poli.

Nahoru Odpovědět
5.2.2013 11:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
lcet.m
Člen
Avatar
Odpovídá na David Hartinger
lcet.m:5.2.2013 11:21

Aha, takže ty dáš přednost dvojímu prohledávání kolekce před tím zlým zlým škaredým out? :)

Jak vůbec skalní odpůrci out řeší takovéhle kešování?

private Dictionary<string, string> _chineseTranslations = new Dictionary<string, string>();

private string GetChineseTranslation(string text)
{
   string translated;
   if (!_chineseTranslations.TryGetValue(text, out translated))
   {
      translated = TranslatorServerClient.Current.TranslateToChinese(text);
      _chineseTranslations.Add(text, translated);
   }

   return translated;
}

Opravdu bys to přepsal na try - catch, ačkoliv je jasné, že ty výjimky se tam budou sypat každou chvíli? A co kurnik global warming - víš co výkonu ti ty výjimky požerou? :) A víš co je úplně nejlepší? Že ty to TryGetValue vůbec používat nemusíš a můžeš zůstat prasátkem - C# má to out navíc, nesetkal jsem se s případem, kdy by to bez něj nešlo.

 
Nahoru Odpovědět
5.2.2013 11:21
Avatar
lcet.m
Člen
Avatar
Odpovídá na David Hartinger
lcet.m:5.2.2013 11:22

Zamysli se nad tou větou "vracení výstupu vstupem", na takovou blbost nemusí být materiál. Jiné řešení jsem ti také uvedl. Vaříš z vody.

Jo. Out se to jmenuje, protože je to vstup.

 
Nahoru Odpovědět
5.2.2013 11:22
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:5.2.2013 11:23

Jenže pokud použiji int.Parse, nepotřebuji ani první proměnnou a nemusím tam mít ani if. Pokud očekávám na vstupu číslo a je tam něco jiného, je to chyba a je nutné s ní tak i zacházet.

Nahoru Odpovědět
5.2.2013 11:23
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:5.2.2013 11:25

Všechny parametry funkce jsou vstupem. Výstupem je výraz za klíčovým slovem "return".

Nahoru Odpovědět
5.2.2013 11:25
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na David Hartinger
Luboš Běhounek Satik:5.2.2013 11:26

Nevykrucuj se a pošli mi ten odkaz, že argumenty funkce mají být jen vstupní.

S tím TryGetValue bylo jen ukázáno, že některý věci se dají třeba řešit efektivněji s out než bez něj, kdy musíš celou kolekci projet dvakrát...

Nahoru Odpovědět
5.2.2013 11:26
https://www.facebook.com/peasantsandcastles/
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:5.2.2013 11:27

Ale ty jsi napsal, že ti TryParse vadí, protože jeho hodnotu chceš dosazovat do nějakého vzorce. A já ti říkám, že .NET opravdu nemůže za to, že ty chceš, aby byl napsaný jinak.

 
Nahoru Odpovědět
5.2.2013 11:27
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:5.2.2013 11:28

Tak pravil Kit. Ostatní mohou mít jiný názor.

 
Nahoru Odpovědět
5.2.2013 11:28
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:5.2.2013 11:31

Skalní odpůrci "out" v uvedeném případě raději použijí databázi.

Nahoru Odpovědět
5.2.2013 11:31
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:5.2.2013 11:35

Né vždy máš data v DB.
Aha, počkat, Kit má vždy vše v DB, tak to pak ano :) .

Nahoru Odpovědět
5.2.2013 11:35
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:5.2.2013 11:35

TryParse mi vadí, protože nezapadá do funkcionálního stylu programování, který používám. Proto místo něj používám Parse, které touto nectností netrpí.

Nahoru Odpovědět
5.2.2013 11:35
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na lcet.m
David Hartinger:5.2.2013 11:35

Ne, Out se to jmenuje protože to mění vstup na výstup, je to modifikátor.

Nahoru Odpovědět
5.2.2013 11:35
New kid back on the block with a R.I.P
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:5.2.2013 11:36

Sakra, tys mě normálně rozsekal bravurní argumentací. Co si teď jenom počnu? Můj svět postavený na Dictionary se zhroutil - ona se místo něj používá databáze :(

 
Nahoru Odpovědět
5.2.2013 11:36
Avatar
Odpovídá na David Hartinger
Luboš Běhounek Satik:5.2.2013 11:38

A na co mění vstup ref? Na vstupovýstup?

Nahoru Odpovědět
5.2.2013 11:38
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:5.2.2013 11:39

Databáze je hodně široký pojem. Na takové záležitosti často používám NoSQL databáze. Některé z nich pracují v operační paměti a jsou rychlejší než kolekce.

Nahoru Odpovědět
5.2.2013 11:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:5.2.2013 11:41

Někteří lidé pracují v týmech a nemůžou si věci řešit po svém a používat na všechno databázi a jsou nuceni používat třeba kolekce.
Ti mají smůlu :( .

Editováno 5.2.2013 11:41
Nahoru Odpovědět
5.2.2013 11:41
https://www.facebook.com/peasantsandcastles/
Avatar
lcet.m
Člen
Avatar
Odpovídá na David Hartinger
lcet.m:5.2.2013 11:41

No tím jsem chtěl Kitovi naznačit, že asi nemá smysl řešit, že metoda vrací výstup vstupem. Teď už je to ale jedno. Jsem rozsekanej a jdu si nainstalovat na Netduino SQL Server, abych se zbavil těch ošklivých Dictionary. Nebo mi tam líp poběží Oracle? Kluci, nevíte někdo?

 
Nahoru Odpovědět
5.2.2013 11:41
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Luboš Běhounek Satik
David Hartinger:5.2.2013 11:41

Tato doporučení se v softwaru nazývají "best practices", měl by ses na nějaké podívat, určitě najdeš takovou i co se týče argumentů funkcí.

Nahoru Odpovědět
5.2.2013 11:41
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Luboš Běhounek Satik:5.2.2013 11:44

Proto stále čekám na nějaký odkaz, kde něco takovýho najdu, nic o argumentech jsem nenašel (byť jsem googlil jen velmi krátce), kromě zmínky, že se mám snažit, aby jich bylo co nejméně.

Editováno 5.2.2013 11:45
Nahoru Odpovědět
5.2.2013 11:44
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:5.2.2013 11:47

Když se nad tím zamyslíš, tak přijdeš na to, že každý běžný slovník v databázi na disku se při běžné práci nacachuje do RAM. Na běžném stroji (Atom 330) tak mohu přeložit cca 200 000 slov za sekundu. To bych neviděl jako moc velkou ztrátu výkonu.

Nahoru Odpovědět
5.2.2013 11:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:5.2.2013 11:50

Kristepane, šlo o příklad. Snažíš se stočit konverzaci úplně mimo původní téma, což bývá ve fórech považováno za neslušnost.
_____________­_______
Navíc pořád nevím, jak to udělám na tom Netduinu.

 
Nahoru Odpovědět
5.2.2013 11:50
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:5.2.2013 11:52

U velkého množství dat si nemůžeš dovolit pokaždé všechno natahovat ze souboru do kolekce, protože to dlouho trvá a často se to tam ani nevejde. Taková data prostě musíš uložit do databáze.

Nahoru Odpovědět
5.2.2013 11:52
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:5.2.2013 12:00

Na Netduinu ti dobře poběží například SQLite.

Nahoru Odpovědět
5.2.2013 12:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Luboš Běhounek Satik
David Hartinger:5.2.2013 12:04

Koukni třeba sem na MSDN: http://msdn.microsoft.com/…s182131.aspx

"Library architects who design for a general audience should not expect users to master working with out or ref parameters."

:) Další tuny názorů máš na různých fórech, koukni třeba sem:

http://stackoverflow.com/…-a-parameter

Najdi si nějaké dobré praktiky, určitě se ti budou hodit, náhodně jsem něco našel třeba tady: http://excalibur.apache.org/…actices.html . Dále návrhové vzory a metodiky vývoje softwaru.

Nahoru Odpovědět
5.2.2013 12:04
New kid back on the block with a R.I.P
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:5.2.2013 12:07
Na Netduinu ti dobře poběží například SQLite.

No, to víš že jo :) Nevadí že nevím o čem je řeč, hlavně něco říct, že?

 
Nahoru Odpovědět
5.2.2013 12:07
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:5.2.2013 12:14

Netduino jsem se snadno vyhledal Googlem. Nechápu, jak na tom chceš provozovat .NET, ale SQLite na tom poběží.

Nahoru Odpovědět
5.2.2013 12:14
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
lcet.m
Člen
Avatar
lcet.m:5.2.2013 12:19

Nepoběží. Netduino je to proto, že je to Arduino pro .NET.

 
Nahoru Odpovědět
5.2.2013 12:19
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:5.2.2013 12:45

Hmm, nějak jsem to přehlédl. Myslel jsem si, že je to jen kus HW, na který se dá nainstalovat cokoli. Máš bod.

Nahoru Odpovědět
5.2.2013 12:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:5.2.2013 14:40

Proč bych do kolekce ze souboru natahoval něco, co už tam celou dobu mám?

Nahoru Odpovědět
5.2.2013 14:40
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na David Hartinger
Luboš Běhounek Satik:5.2.2013 15:07

První odkaz:
"...the correct application of out and ref parameters requires intermediate design and coding skills. Library architects who design for a general audience should not expect users to master working with out or ref parameters."

  • hodně volný překlad: "...použití out a ref vyžaduje střední znalosti návrhu a kódění, nemáme od běžného publika očekávat zvládnutí práci s out a ref parametry" - nic o tom, že by se to používat nemělo, jen že není vhodný to vytahovat před začátečníkama, protože to nejspíš nechápou.

"Methods that implement the Try<Something> pattern, such as Int32TryParse, do not raise this violation"

  • asi netřeba překládat / komentovat

Druhý odkaz: "... but in any given instance ref and out are OK."

Třetí odkaz: tam jsem nic k tématu ref / out nenašel.

Nahoru Odpovědět
5.2.2013 15:07
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:5.2.2013 15:24

Při startu programu v kolekcích žádná data nejsou, proto je tam musíš natáhnout buď ze souboru nebo z databáze. To může být u velkého objemu zdržující a je lepší natahovat z disku jen data, která jsou v daný okamžik potřebná.

Nahoru Odpovědět
5.2.2013 15:24
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:5.2.2013 15:30

Tohle už záleží případ od případu - někdy stačí načítat všechna data ze souboru, někdy tahat je lepší je tahat z už běžící databáze, ale jsme už zase koukám někde úplně mimo téma. :)

Nahoru Odpovědět
5.2.2013 15:30
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:5.2.2013 16:13

Kdo si začal o natahování kolekcí, když už je tam má a přitom nemá?

Nahoru Odpovědět
5.2.2013 16:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:5.2.2013 16:39

Databáze a pak i kolekce jsi začal tahat ty.

Nahoru Odpovědět
5.2.2013 16:39
https://www.facebook.com/peasantsandcastles/
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Luboš Běhounek Satik
David Hartinger:5.2.2013 18:11

Chlape, poslal jsem ti dokument přímo od Microsoftu, kde píší, že se to nemá používat. Kód, který nedoporučuje používat Microsoft, bude asi nějakým způsobem závadný. Psát kód tak, aby byl srozumitelný jen pro experty, je špatné. Už nevím, co víc pro tebe mohu udělat, pokud neumíš prohrávat, tak s tím ti nepomohu :)

Nahoru Odpovědět
5.2.2013 18:11
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Luboš Běhounek Satik:5.2.2013 18:33

Prohrávat umím, ale nebudu to dělat, když mám pravdu.
Nebo alespoň zatím nikdo nepodal žádný argument, který by potvrzoval, že ji nemám.

  • Je to doporučení jen pro public / protected ("Cause: A public or protected method in a public type has an out parameter.", odkaz: http://msdn.microsoft.com/…s182131.aspx)
  • Např. metody typu TryParse to neporušují ("Methods that implement the Try<Something> pattern, such as Int32TryParse, do not raise this violation.", odkaz http://msdn.microsoft.com/…s182131.aspx)
  • Přímo na webu MS je zmínka, že v určitých případech bys měl zvážit jejich použití ("When you work with parameters that are large structures, the additional resources that are required to copy these structures could cause a performance effect when you pass by value. In these cases, you might consider using ref or out parameters.", odkaz: http://msdn.microsoft.com/…s182146.aspx )
Nahoru Odpovědět
5.2.2013 18:33
https://www.facebook.com/peasantsandcastles/
Avatar
David Hartinger
Vlastník
Avatar
Nahoru Odpovědět
5.2.2013 18:46
New kid back on the block with a R.I.P
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 41 zpráv z 91.