Dva programátorské přístupy

Tomáš Herceg       10.07.2008       C#, VB.NET       11811 zobrazení

Dneska se v diskusi vyrojilo mnoho dotazů, nejvíc mě zaujal problém Převod čísla na textový řetězec. Otázka zní, jak se dá číslo doplnit nulami tak, aby mělo 3 číslice. Zdejší fóra jsou při rozumném dotazu velice rychlá, když vám tady nikdo týden neodpoví, znamená to, že váš dotaz je divný, nesrozumitelný, anebo není podaný zábavně.

Velmi rychle se vyrojily 3 odpovědi. První byla na 10 řádků, číslo se převedlo na String, zjistila se délka tohoto stringu a pro každou možnou délku se doplnil příslušný počet nul.

Druhé řešení bylo mazanější - číslo se převedlo na String, před to se flákly 3 nuly, a z toho celého se vzaly poslední 3 znaky.

Třetí řešení páně Linharta samozřejmě použilo formátovací funkce v .NET frameworku, stačí totiž zavolat číslo.ToString("000") a tím se číslo zformátuje na trojciferný zápis a doplní se případnými nulami.

Tady jsou krásně vidět dva různé přístupy:

Umím programovat, tak stačí trochu přemýšlet a napíšu si to sám.

Ano, na běžné vstupy to fungovat bude, ale krajní případy už neošetříte a když to budete v aplikaci potřebovat na 100 místech, budete to tam mít stokrát. Navíc za čas zjistíte, že to jde udělat jednodušeji, a buď štábní kulturu zachováte, nebo budete mít každou půlku projektu psanou jinak.

Mám .NET Framework a nebojím se ho použít

V .NETu máme funkce skoro na všechno a zrovna formátování je velmi dobré naučit se, protože se používá velice často a ušetří mnoho práce. Pro zformátování čísel a datumů by se opravdu používat měly, jednak je ten zápis bezkonkurenčně nejkratší a druhak je elegantní a přehledný - prakticky bez přemýšlení je vidět, co kód dělá. Proč věc, která se dá napsat jednou funkcí, budeme mít na řádků 10, anebo budeme kvůli tomu vytahovat funkce ze starých verzí Visual Basicu, které by měly už raději zůstat zapomenuty?

Neříkám, že první způsob je vždy špatný, občas na to prostě funkci nemáme (v takovém případě je dobré si napsat svoji funkci a mít ji naimplementovanou jen na jednom místě). Ale často člověk vynalézá kolo, a navíc ho ještě odflákne, takže se na první výmolu musí opravit. Jenomže těch kol už je vyrobených 1000 a jsou všude po celé aplikaci, ppravovat je všechny dá spoustu práce.

Proto je dobré se naučit a vědět, co nám .NET framework nabízí. Je jasné, že trvá, než se to člověk všechno naučí, i já občas zjistím, že jsem to kolo někde znovuobjevil taky, a to dělám s .NET frameworkem prakticky od jeho první verze.

Na Matfyzu nám říkali, že programování je hlavně o teorii a algoritmech, že jazyk nebo technologii se už naučíme za týden. S tím bych si dovolil polemizovat, základy .NET frameworku se za týden pochytit dají, pokud člověk má obecné programátorské znalosti, ale aby člověk programoval pořádně a elegantně, musí mít s touto technologií alespoň půl roku zkušeností. Jinak pořád znovuobjevuje kola a není se čemu divit, .NET framework obsahuje tisíce tříd, nelze je znát všechny, natožpak za týden. Proto zkuste použít Google vždy, když si říkáte: "Sakra, tohle se mi psát nechce, to už by ten .NET mohl umět."

 

hodnocení článku

1 bodů / 1 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

Diskuse: Dva programátorské přístupy

Niektoré riešenia možno aplikovať vo viacerých jazykoch. Príklad prevodu čísla na pole 3 znakov (resp. String) doplnene nulami pekne ilustruje, že je dobré sa učiť techniku. To či nejaký jazyk má alebo nemá funkciu ktorá to urobí elegantne je dobré ale o pár rokov presedláte na nový jazyk a ten danú funkciu nebude mať respektíve ju nezistíte ihneď. Čo teraz? Budete stratený alebo chápete princípu a vytvorite si vlastnú funkciu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

První přístup (napsat si vše sám) dělá skoro každý, když s novou technologií začíná. Druhý přístup, to je takový další level, zvládnete po čase, když získáte zkušenosti. Neznám nikoho, kdo by znal všemožné funkce .NET frameworku, ale neuměl si je sám napsat. Kdo .NET framework umí používat pořádně, tedy druhým způsobem, kdysi dávno prošel tím prvním, takže si ty funkce napsat umí.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Keď sa niekto pýta na to ako má zmeniť číslo na trojmiestny reťazec tak asi nebude kategória ten druhý level a mal by si osvojiť - pochopiť princíp. Apropo "druhý level" je to hlúpy pohľad keď prekonáte túto úroveň tak dospejete do "levelu tri" kde "Viem, že nič neviem"

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Nechápu, co tady řešíte. Převedení integeru na string je velice triviální záležitost, nehledě na to, že prakticky ve všech jazycích na tohle funkce je. Nechápu, proč by si tohle někdo psal sám, troufám si tvrdit, že jazyk, který tento převod neumí, je nepoužitelný.

Co se týče levelu 3 "vím, že nic nevím", to platí skoro všude, jen ne v programování. .NET Framework obsahuje desítky tisíc tříd, takže je naprosto nemyslitelné znát je všechny nazpaměť. Ono to ani k ničemu není. V programování se každý profesionál specializuje jen na určitou disciplínu, ale i tak je třeba mít komplexní znalosti. Pokud je máte a k tomu hromadu zkušeností, můžete psát dobré a kvalitní aplikace.

Cílem tohoto článku bylo ukázat na to, že je dobré umět si všechno napsat sám (to jsou ty teoretické znalosti), ale je nutné dobře znát konkrétní technologii (to je ta praxe). Jinak aplikace, které napíšete, budou navenek vypadat možná stejně, ale uvnitř to bude naprostý paskvil, který se bude obtížně udržovat, spravovat a rozšiřovat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Znovu som si prečítal váš článok a hodnota diskusie pod ním sa mu rovná. Proste ak chcete hovoriť o prístupoch programovania tak sa vyjadrím znovu a znovu čo ste v poslednom príspevku potvrdil a z článku to nie je jednoznačné že "je dobré umět si všechno napsat sám". A som ZA aby programator používal všetky možnosti danej platformy ale hľavne aby si vyskúšal takúto funkciu napísať sám, aby chápal čo je za tým!!! houk - dohovoril som

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Diskuse: Dva programátorské přístupy

> Na Matfyzu nám říkali, že programování je hlavně o teorii a algoritmech, že jazyk nebo technologii se už naučíme za týden. S tím bych si dovolil polemizovat, základy .NET frameworku se za týden pochytit dají, pokud člověk má obecné programátorské znalosti, ale aby člověk programoval pořádně a elegantně, musí mít s touto technologií alespoň půl roku zkušeností.

.NET není na matfyzu podle většinového mínění platná technologie ... třeba C se dá za týden naučit v pohode, když člověk umí programovat

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je fakt, ale stejně, naučíš se jazyk, ale abys v něm mohl dělat něco pořádného, musíš se k němu naučit spoustu knihoven atd. A to za týden nestihneš. Jazyk samotný jo, ale abys v něm něco napsal, to prostě vyžaduje mnoho zkušeností a stráveného času. Samotný jazyk je k ničemu, když neumíš používat knihovny.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak zrovna knihovny Cčka jdou naučit rychle, ono tam moc věcí není.

Offtopic: nevím jestli sis všiml, ale na mff žádný procedurální jazyk kromě C není dobrý-c++ je v některých věcech zbytečně komplikované, pascal smrdí, VB taky, VB.net je stejné jako VB a navíc má .net, c# chce .net a má moc objektů. Navíc .netové jazyky pod monem se spíš plíží než jdou. A java je pomalá, managed a taky moc objektová. C nic extra nemá a tak je jednoduché a nejsou tam kontroverzní témata jako pohodlná práce s pamětí čí objekty a přetěžování operátorů. :)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Smrdí spíše váš příspěvek. Koukám, že pro vás by byl ideální programovací jazyk Karel. POLOŽ, KROK.

Po přečtení vašeho příspěvku se ani nebudu obtěžovat vám vysvětlovat, že to co jste napsal je skutečně politováníhodné.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Nejde o nedorozumění? Mám zato, že autor pouze popisuje jak on vidí postoj Matfyzu k jiným jazykům.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Diskuse: Dva programátorské přístupy

Ja som včera riešil presne túto dilemu. Potreboval som prehľadať nezotriedené pole integerov. Samozrejme, že BinarySearch mi vracala hlúposti typu -24. Tak som si povedal, že .NET framework 1.1 predsa niečo také musí vedieť a dal som sa do skúmania google. Po hodinke hrabania sa v zahraničných diskusiách som nenašiel nič okrem toho, že to nevedia, že sa to nedá. Tak som si potom za minútku napísal funkciu, čo si to pole prebublala sama :D. Prajem pekný deň.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nevím, jestli to není až v .NETu 2, ale předpokládám, že ne. Co třeba tohle:

Array.IndexOf(15)

BinarySearch se dá použít pouze pro setříděná pole, jinak nemá smysl.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tak jsem oprášil Visual Studio .NET 2003 a ano, statická metoda Array.IndexOf(array As System.Array, value As Object) As Integer tam samozřejmě je. Mohl jste si ušetřit práci.

Problém je v tom, že spousta lidí podceňuje, nebo vůbec neví o geniálním nástroji jménem Object Browser, bez kterého bych byl ztracen... Kdysi jsem jen tak ze zvědavosti zkoušel experimentovat s Javou a nechal jsem toho právě proto, že NetBeans nemá nic takového jako Object Browser ve VS a to je pro mě naprostá nutnost.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Dva programátorské přístupy

Svatá pravda. Budete-li se snažit využívat co nejvíce funkcionalitu kterou nabízí .NET Framework, seznámíte se s ním lépe, protože je tam většina věcí silně provázaných (třeba zrovna to formátování) a navíc budete mít jistotu, že používáte kód který byl prověřen léty praxe a otestován desítkami, né-li stovkami vývojářů.

Aneb jak kdysi napsal někdo na CodeProjectu: ".NET Framework je pokladnice, ve které nacházím každý den nový klenot..."

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback