Co byste doporučili začátečníkovi, aby udělal v C#?

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
strangereu
Level 4.5
Level 4.5
Příspěvky: 1719
Registrován: září 11
Bydliště: Vršovice
Pohlaví: Muž
Stav:
Offline
Kontakt:

Co byste doporučili začátečníkovi, aby udělal v C#?

Příspěvekod strangereu » 23 kvě 2017 14:24

Ahoj,
kvůli přítelkyní a její škole jsem se rozhodl, že trošku rozšířím svůj rozsah zkušeností a začnu se učit C#.
Momentálně ovládám na celkem solidní úrovní PHP, Javascript, Lua a pak ptákoviny jako je HTML, CSS a různe frameworky, ale to do toho nepočítám, protože to není ani programování.

Každopádně, začal jsem zkoušet určité věci sám podle toho, jaké úkoly měla ve škole přítelkyně (2 ročník).
Dělal jsem hrací kostku (Tu z člověče nezlob se), kreslil jsem pomocí těch kreslících funkcí draw rec, ell, atd... Pak jsem taky dál dělal semafor, který měnil barvy v určitém intervalu a teď naposledy odpočítávalo, které rozdělovalo na minuty a vteřiny.

Níže přikládám dva dokončené projekty z výše uvedených, které mi ještě zbyly v PC.
HOTOVO - Počítadlo.zip
(52.93 KiB) Staženo 55 x

HOTOVO - Hrací kostka.zip
(57.21 KiB) Staženo 61 x


Byl bych rád, kdyby mi tu někdo z vás mohl zadat nějaký úkol, který bych mohl vypracovat ve svém volném čase a zase se o něco zdokonalit a posunout svou úroveň.
Neříkám, že můj kód je nějak extrémně čistý nebo přehledný, ale myslím si, že nejhorší také není a zapracovat by se na tom do budoucna dalo.
http://screenshare.cz/

Reklama
zeus
Elite Level 10.5
Elite Level 10.5
Příspěvky: 10896
Registrován: únor 12
Bydliště: Pankrac
Pohlaví: Muž
Stav:
Offline

Re: Co byste doporučili začátečníkovi, aby udělal v C#?

Příspěvekod zeus » 23 kvě 2017 14:51

Co serial Mala hra o velkeho Bajta v teto sekci?
Prazaci jo ty se maj, az kdyz si me zavolaj..

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Co byste doporučili začátečníkovi, aby udělal v C#?

Příspěvekod faraon » 23 kvě 2017 16:37

Ale jo, a vůbec to nemusíš brát postupně:


A když to uděláš klikací v GUI a s barvičkami, tak to vůbec nebude vadit!

Ta kostka mi připomněla slavnou hru z pořadu Videostop, a semafor jsem kdysi dělal v GWBasicu. Barevně, ale v textovém režimu :lol:
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
strangereu
Level 4.5
Level 4.5
Příspěvky: 1719
Registrován: září 11
Bydliště: Vršovice
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Co byste doporučili začátečníkovi, aby udělal v C#?

Příspěvekod strangereu » 24 kvě 2017 16:37

Moc děkuju za reakce, dneska se na to vrhnu a pak pošlu, co se mi povedlo a co ne :-)

Jinak včera v noci jsem ještě upatlal dohromady takovou jednoduchou kalkulačku na výpočet percentuálního zbytku kapaliny v nádobce, kód přikládám níže a rovnou se ještě zeptám, jestli tu někdo z vás zkoumal můj kód, tak je tam potřeba něco zlepšit nebo se zaměřit na něco a pracovat na tom?

Výpočet hladiny

Kód: Vybrat vše

        static void Main(string[] args)
        {
            Console.Write("Prosím zadej maximální možnou hladinu v ml: ");
            string hladinaMax;
            hladinaMax = Console.ReadLine();

            Console.Write("Zadej aktuální stav hladiny v nádobce v ml: ");
            string hladinaCur;
            hladinaCur = Console.ReadLine();

            int a = int.Parse(hladinaMax);
            int b = int.Parse(hladinaCur);
            float c = 0;

            c = ((float)b / (float)a) * 100;

            Console.WriteLine("Aktuální stav hladiny: " + (float)c + "%");
            Console.ReadKey();
        }
http://screenshare.cz/

Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: leden 15
Bydliště: Krkonoše
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Co byste doporučili začátečníkovi, aby udělal v C#?

Příspěvekod satik » 24 kvě 2017 18:00

Kód: Vybrat vše

string hladinaCur;
hladinaCur = Console.ReadLine();

tohle můžeš zjednodušit na jeden řádek na:

Kód: Vybrat vše

string hladinaCur = Console.ReadLine();

a to samý třeba s
float c

Kód: Vybrat vše

(float)c

zbytečný přetypování

zbytečný mít uložený oba stringy hladinaMax a hladinaCur když pak používáš jen ty float hodnoty

na výpisy stringů je lepší použít buďto rovnou format nebo string interpolaci, tady je to sice fuk, ale u složitějších aplikací každý spojování stringů plusem vytvoří novej string, což pak zbytečně zatěžuje GC, pokud se toho tam vyskytuje víc
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index

jsemzpet
Level 1
Level 1
Příspěvky: 74
Registrován: březen 17
Pohlaví: Muž
Stav:
Offline

Re: Co byste doporučili začátečníkovi, aby udělal v C#?

Příspěvekod jsemzpet » 24 kvě 2017 18:24

Měl by ses zbavit některých programátorských zlozvyků:

-nepíšeš dokumentační komentáře
-komentáře a názvy proměnných píšeš česky
-používáš tzv. magic numbers
-textové řetězce píšeš rovnou do kódu
-program nemá dobrou vnitřní strukturu, měl by být lépe členěn do funkcí
-používáš nevhodné konstrukce (kaskáda if místo jednoho switche)

To, že používáš objektově orientovaný jazyk zcela neobjektově také není úplně programátorsky čisté. Být tebou tak bych začal hezky od začátku. Žádné IDE, obyčejné C nebo C++, kód piš v textovém editoru a překládej s gcc. Vyzkoušej si jak funguje linker, co to jsou makra, jak se pracuje s hlavičkovými soubory, nauč se pracovat s pointery.
Když si všechno naklikáš v IDE, moc se toho nenaučíš. Také by sis měl vybírat náročnější úkoly, pokud budeš dělat takové primitivní věci, také se moc nenaučíš.

Neboj se dát si těžké cíle, tak se nejvíc naučíš. Pro začátek si zkus nasimulovat funkcionalitu nějakého shellového příkazu. Pár nápadů:
-tracert
-tr
-awk
-cat

Další náměty:
-hledání cesty v orientovaném grafu
-simulace web browseru (načte HTML a CSS a podle toho vykreslí stránku)

EDIT:
ale u složitějších aplikací každý spojování stringů plusem vytvoří novej string


To může být pravda, ale většinou to tak není. Kompilátory s vysokou mírou optimalizace si sami vyberou, co je nejvhodnější, takže většinou není nutné dělat nejrůznější hacky, které pak mohou snižovat čitelnost kódu.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Co byste doporučili začátečníkovi, aby udělal v C#?

Příspěvekod CZechBoY » 24 kvě 2017 18:38

@jsemzpet: k čemu mu bude nízkoúrovňová znalost když (asi?) nechce dělat nízkoúrovňový věci.
Nevim co znamená naklikat v IDE, ale já jsem nikdy nic (kromě GUI) v IDE neklikal?
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

jsemzpet
Level 1
Level 1
Příspěvky: 74
Registrován: březen 17
Pohlaví: Muž
Stav:
Offline

Re: Co byste doporučili začátečníkovi, aby udělal v C#?

Příspěvekod jsemzpet » 24 kvě 2017 19:08

@faraon

Plánuješ pokračování té programátorské soutěže?

Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: leden 15
Bydliště: Krkonoše
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Co byste doporučili začátečníkovi, aby udělal v C#?

Příspěvekod satik » 25 kvě 2017 11:02

jsemzpet píše:
ale u složitějších aplikací každý spojování stringů plusem vytvoří novej string


To může být pravda, ale většinou to tak není. Kompilátory s vysokou mírou optimalizace si sami vyberou, co je nejvhodnější, takže většinou není nutné dělat nejrůznější hacky, které pak mohou snižovat čitelnost kódu.

Uh, oznacujes best practices za hacky? :D
Interpolace stringu je v C# celkem novinka prave pro zjednoduseni a zprehledneni skladani stringu.

Jinak pochybuju, ze by kompilator mohl jakkoliv zoptimalizovat spojovani stringu v c#, kdyz treba napises

Kód: Vybrat vše

string a,b,c,d;
...
string str = a + "ahoj " + b + c + ", hodnota: " + d;


String je immutable, takze pro pripojovani kazdyho dalsiho stringu se vytvori nova instance, do ktery se mezivysledek ulozi - takze treba kdyz to napises takhle, tak tim vytvoris 5 novych instanci stringu, pricemz az tu posledni pouzijes, ostatni pak jen zbytecne pridelavaj praci GC.

Jinak doporucuju programovat to, kvuli cemu programujes - u me to treba byly hry, takze jsem ze zacatku delal predevsim jednoduchy hry.
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index

jsemzpet
Level 1
Level 1
Příspěvky: 74
Registrován: březen 17
Pohlaví: Muž
Stav:
Offline

Re: Co byste doporučili začátečníkovi, aby udělal v C#?

Příspěvekod jsemzpet » 25 kvě 2017 11:43

Nevíš, jak funguje optimalizace u překladačů. Ano, string je neměnný, ale myslíš si, že když napíšeš "ab" + "cd", tak to je bude překladač vždy skutečně spojovat? Pokud se mají pouze vypsat, tak je reálně spojovat nebude.

Jinak pochybuju, ze by kompilator mohl jakkoliv zoptimalizovat spojovani stringu v c#, kdyz treba napises

To záleží na tom, jak a kde budeš s proměnnou str pracovat. Pokud ji jen vypíšeš, spojování není nutné. Pokud budeš iterovat přes jednotlivé znaky toho stringu, spojení bude nutné.

Jinak zrovna string interpolation je z hlediska výkonu o něco horší než prostá konkatenace. A co je horší, že interpolace je ze své podstaty obtížně optimalizovatelná.

Z hlediska tisku je mnohem lepší printf jak jej známe z C/C++. Zápis je podobný jako u interpolace v C#, ale stringy se nespojují, protože printf může brát libovolný počet argumentů.

someoneFromSomewhere
nováček
Příspěvky: 20
Registrován: květen 17
Pohlaví: Muž
Stav:
Offline

Re: Co byste doporučili začátečníkovi, aby udělal v C#?

Příspěvekod someoneFromSomewhere » 25 kvě 2017 16:16

Je dobré se před manuálníma optimalizacema podívat na to, co kompilátor všechno dělá sám. Někdy totiž přílišná optimalizace zablokuje automatickou optimalizaci.

Příklad v C++:

Kód: Vybrat vše

std::vector<T> get() {
   std::vector<T> vect;
   vect.insert(...);
   return vect;
}


Kompilátor tenhle kód optimalizuje a místo vytvoření kopie vektoru, přesune data přímo.
Ale když se napíše tohle, tak k tomu nedojde (proto je lepší vracet prostý vektor, pokud se jedná o temp. objekt):

Kód: Vybrat vše

std::vector<T> get() {
   std::vector<T> vect;
   vect.insert(...);
   return std::move(vect);
}
std::endl není nový řádek!


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti